高频面试八股文用法篇(六) 说说反射及其作用

news2024/12/30 2:46:01

目录

什么是反射?

反射的作用

反射的优缺点

反射的用途


什么是反射?

 

  • 动态语言。 当程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言。
  • Java 并不是动态语言,但是它却又一个非常突出的动态相关的机制,俗称:反射。

反射允许运行中的 Java 程序获取自身的信息,并且可以操作类和对象的内部属性。

程序中一般的对象类型都是在编译期就确定下来的,而Java 反射机制可以动态的创建对象并调用其属性,这样对象的类型在编译期是未知的。

反射的核心:是 JVM 在运行时 才动态加载类或调用方法或属性,不需要事先(写代码的时候或编译期)知道对象是谁。

java反射就是在运行状态中:

  • 对于任意一个类,都能够知道这个类的所有属性和方法;
  • 对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。

这也是Java被视为动态语言的一个关键性。
 

反射的作用

 

  • 在运行时构造任意一个类的对象;
  • 在运行时判断任意一个对象所属的类;
  • 在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法);
  • 在运行时调用任意一个对象的方法

 

比如:通过反射生成对象的实例主要有两种方式:

方法一:使用Class对象的newInstance()方法来创建Class对象对应类的实例

方法二:先通过Class对象获取指定的Constructor对象,再调用Constructor对象的newInstance()方法来创建实例:可以用指定的构造器构造类的实例

创建数组(方法一)

Class classType = Class.forName("java.lang.String");
Object array = Array.newInstance(classType, 10);

反射的优缺点

优点

  • 可以在程序运行的过程中,操作这些对象。

  • 可以解耦,提高程序的可扩展性。

缺点

  • 反射会额外消耗一定的系统资源,因此如果不需要动态地创建一个对象,那么就不需要用反射。
  • 另外,反射调用方法时可以忽略权限检查,因此可能会破坏封装性而导致安全问题

反射的用途

反射最重要的用途就是开发各种通用框架

1.各种框架:(spring,struts....)用反射,运行时动态加载需要加载的对象。

  • Spring 框架的 IOC 基于反射创建对象和设置依赖属性。

  • Spring MVC 的请求调用对应方法,也是通过反射。

  • JDBC 的 Class#forName(String className) 方法,也是使用反射。

2.各种IDE开发工具:当我们输入一个对象或类并想调用它的属性或方法时,一按点号,编译器就会自动列出它的属性或方法,这里就会用到反射。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/614838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Permission denied, please try again.

如果你是容器或者二进制安装启动的gitlab,在克隆代码一直有这样的问题 正克隆到 h5... git192.168.0s password: Permission denied, please try again. 服务ipgit 192.168.40.15 gitlab192.168.40.17 1、 docker run -d --name gitlab -p 80:80 -p 224:22 -p 4…

基于springboot的在线学习平台

源码获取,V:qq2056908377 采用技术 项目整体采用传统的B/S架构和MVC设计模式,开发语言选用JavaHTMLJavascript,技术上采用SpringBoot、Mybatis等开发框架,数据库采用MySQL 5.7。 功能介绍 平台分为用户端和管理两个系…

1.8 基于Java配置方式使用Spring MVC

一、基于Java配置方式使用Spring MVC 实现步骤 1、创建Maven项目 Maven项目 - SpringMvcDemo02 2、添加相关依赖 在pom.xml文件里添加相关依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/…

chatgpt赋能python:如何用Python创建一个成功的项目

如何用Python创建一个成功的项目 无论是初学者还是有经验的开发者&#xff0c;Python语言的丰富生态系统和易于使用的语法使得它在项目开发领域中成为了一种非常流行的选择。但是&#xff0c;要构建一个好的Python项目需要很多工作&#xff0c;需要一些经验和技巧。在这篇文章…

LeetCode_二叉树_BFS_中等_117.填充每个节点的下一个右侧节点指针 II

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给定一个二叉树&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; }填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点&#xff0c;则将 …

数据共享传输:台式机和笔记本同步文件!

为什么要在台式机和笔记本同步文件&#xff1f; “我想在台式机和笔记本同步文件。因为我工作时使用笔记本&#xff0c;在家里使用安装了Windows 10系统的台式机&#xff0c;我想要在笔记本和台式机之间同步应用程序、游戏、文档等。有没有一种可以在台式机和笔记本同步文件的…

11 【组件通信】

1.props 适用于的场景:父子组件通信 注意事项: 如果父组件给子组件传递数据(函数):本质其实是子组件给父组件传递数据 如果父组件给子组件传递数据(非函数):本质就是父组件给子组件传递数据 书写方式:3种 [‘todos’],{type:Array},{type:Array,default:[]} 特殊情况&am…

为何要将行驶证转为Excel?在线怎么操作?需要注意些什么?

一、为何要将行驶证转为excel表格&#xff1f;有何好处&#xff1f; 将行驶证转为Excel一般是为了方便信息的整理和管理。将行驶证上的信息录入Excel表格中&#xff0c;可以实现快速搜索、排序和筛选等功能&#xff0c;避免了手动整理信息的繁琐和容易出错的问题。此外&#xf…

ChatGPT 时代,程序员的生存之道 | 人工智能 AI

ChatGPT 近期炙手可热&#xff0c;仿佛没有什么问题是它不能解决的。出于对 ChatGPT 的好奇&#xff0c;我们决定探索下它对于前端开发人员来讲&#xff0c;是作为辅助工具多一些&#xff0c;还是主力工具更多一些&#xff1f; 2D 能力测试 我们就挑选一个著名的递归回溯问题—…

MySQL的知识点整理(学习笔记)

目录 一、认识数据库 1. 什么是数据库 2. 数据库类型 3. 常见的数据库管理系统 4. MySQL介绍 5. MySQL的安装&管理工具的安装 6. SQL概述 7. 在DOS系统中操作MySQL 8. MySql常用命令 二、操作数据库 1、使用navicat创建数据库 2、备份和还原数据库 3、MySQL数据…

医疗文本智能标注工具接连落地,景联文科技助力“GPT+健康医疗”稳步前行

随着医疗技术的飞速发展和普及&#xff0c;医疗数据量日益庞大&#xff0c;医疗数据的处理成为了一个极为重要的问题。医疗数据中包含着众多的病历记录、化验报告、影像资料等&#xff0c;这些数据需要专业人员运用专业的知识进行处理。目前&#xff0c;很多医院和相关研究机构…

懒人必备Jetpack MVVM框架

目录 效果图 项目依赖 使用介绍 项目使用的三方库及其简单示例和资料 网络请求相关使用介绍 谷歌Jetpack框架使用介绍 常见问题 github地址 Android Jetpack MVVM框架开发&#xff0c;基于AndroidX开发&#xff0c;傻瓜式使用&#xff0c;适用于所有项目 谷歌 Android…

mathtype7中文版下载安装后如何关联word

随着网络时代的发展&#xff0c;许多数据都需要上传网络。无论是否是数学专业的师生&#xff0c;在平时的学习中常需要输入数学公式。可数学公式中文字部分少&#xff0c;公式中常包含许多特殊符号&#xff0c;虽然通过输入法可以输入某些特殊公式符号&#xff0c;但不完美&…

springboot项目外卖管理 day02-新增员工以及员工信息编辑

文章目录 一、新增员工1.1、需求分析1.2、数据模型1.3、代码开发 二、员工信息分页查询2.1、需求分析 2.2、代码开发2.3、分页插件2.4、员工信息分页查询 三、启用/禁用员工账号3.1、需求分析3.2、代码开发3.3、根据id修改员工信息3.4、代码修复 4、编辑员工信息4.1、功能需求4…

企业级信息系统开发讲课笔记4.6 Spring Boot整合MyBatis

文章目录 零、学习目标一、Spring Boot数据访问概述二、Spring Boot 整合MyBatis&#xff08;一&#xff09;基础环境搭建1、数据准备&#xff08;1&#xff09;创建博客数据库&#xff08;2&#xff09;创建文章表&#xff08;3&#xff09;文章表插入记录&#xff08;4&#…

protobuf 的安装

protobuf 的安装 安装步骤最后的解决办法git clone遇到的问题解决办法: 后续遇到的问题1.果然还是报错了: 2023-06-05更新Abseil的安装2023-06-06更新代码 安装步骤 这个博主的操作对我有效,这个写的好 apt-get install autoconf automake libtool curl make g unzip(成功) g…

【AUTOSAR】Bootloader说明(二)---- 初始化流程及配置

按照DSP复位后的执行情况&#xff0c;Boot-loader分为以下几部分&#xff1a; DSP启动及系统初始化RAM自检应用程序有效性检查UDS命令处理FALSH操作 DSP启动及系统初始化 选择从FLASH启动 DSP的启动模式配置为从FLASH启动【参考】&#xff0c;硬件引脚配置如下&#xff1a; 引…

Vue.js 中的 Nuxt.js 是什么?如何使用 Nuxt.js?

Vue.js 中的 Nuxt.js 是什么&#xff1f;如何使用 Nuxt.js&#xff1f; Nuxt.js 是一个基于 Vue.js 的服务端渲染应用框架&#xff0c;它提供了一种简单的方式来创建基于 Vue.js 的应用程序。Nuxt.js 提供了许多有用的功能&#xff0c;如自动路由、代码分割、服务端渲染等&…

你了解 .gitkeep文件吗?

目录 简介 作用 例程 简介 本文主要介绍在git中, .gitkeep的作用。 作用 git无法追踪一个空的文件夹&#xff0c;当用户需要追踪(track)一个空的文件夹的时候&#xff0c;按照惯例&#xff0c;大家会把一个称为.gitkeep的文件放在这些文件夹里。 例程 就个人而言&#…

VST的天花板?苹果Vision Pro解析

看了那么多预测、分析之后&#xff0c;苹果MR头显&#xff08;Apple Vision Pro&#xff09;真正的来了。 十多年前&#xff0c;Oculus Rift DK1开启了近代新一轮VR热潮。十年之后&#xff0c;发展未及预期&#xff0c;VR仍未走向大众。如今整个AR/VR行业都在期待&#xff0c;…