java 重点!反射机制学习
反射机制:java语言通过此可以更改字节码文件(class文件),类似黑客
与之相关的类有java.class
java.lang.reflect.Field,类的属性,静态变量,实例变量
java.lang.reflect.Constructor代表构造方法字节码,类的构造方法
java.lang.reflect.Method代表方法字节码,类的静态,非静态方法
首先要获取class文件,通过class包获取,内部有一个Forname静态方法,内部参数是string类型,可以输入想要获取字节码的包
Class s=Class.Forname(“java.utile.date”);
这里涉及到一个编译异常,用try catch解决(复习复习以前的异常处理)
try catch来解决s==d,表达的是内存地址比较是否一样
上面是一种方法,
还有一种Class s=对象名.getClass();getclass()可以获取对象的class文件
都保存的是.class文件。这个文件再内存中之保存一份。如下图,两个保存的都是String.class字节码文件,
package reflect01;import com.sun.istack.internal.localization.NullLocalizable;public class R01 {public static void main(String[] args) {Class s= null;try {s=Class.forName("java.lang.String");} catch (ClassNotFoundException e) {e.printStackTrace();}String sd="dfsd";Class f=sd.getClass();System.out.println(s==f);}
}
输出d的值是类的包名
输出结果为true、
下图为第三种方式
Class de=Date.class;
每种属性都有class字节码文件,下图int这样就不要了
字节码在jvm只保存一个
- 下面介绍一个方法newinstance,通过反射来实例化对象
package reflect01;public class R021 {//定义了一个R2的类以及无参构造防发public static void main(String[] args) {R02 e2=new R02();System.out.println(e2);try {Class x=Class.forName("reflect01.R02");Object object=x.newInstance();//调用类的无参构造方法,若没有无参构造方法会出错,// 若有其它构造方法会覆盖掉无参,也会出错System.out.println(object);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();}}
}
使用两种调用无参构造方式,第二种虽然麻烦需要try/catch,但是可拓展比直接new灵活,使用了反射机制,也保证必须无参构造方法存在
- 下面实践它的灵活性
1,创建一个配置文件properties,//文本文件不用编译,用io流读的方式赋值给filereader类型文件,
2,创建一个proper对象,该对象调用方法load加载filereader对象。proper对象就有内容了
3,下面进行反射,Class类型接受,右方导入配置文件的名称。
4,调用无参构造方法,只要更改配置文件里面的内容就可多类型输出各种类型的构造方法
package reflect01;import java.io.FileReader;
import java.util.Properties;public class R021 {//定义了一个R2的类以及无参构造防发public static void main(String[] args) throws Exception {FileReader fileReader = new FileReader("D:\\IDEA项目汇总斜杠分类\\heima1\\Reflect\\src\\reflect01\\classinfo.properties");Properties properties = new Properties();properties.load(fileReader);//加载存入fileReader.close();//关
// Class c=Class.forName("ClassName");错误//加载完成要读入名字String classname = properties.getProperty("ClassName");//字符串类型;好啦,赋值成功Class c = Class.forName(classname);//里面可以是string,也本身只能是stringObject object = c.newInstance();//TMD,必须加返回值啊,因为它饭会的是无参构造函数,Object 雷星来接受System.out.println(object);}
}
properties不用加分号
要注意加入路径名,不要只有类名。这是只要更改配置文件即可
- 未完,待更新,等我做完数据库实验
java 重点!反射机制学习相关推荐
- Java动态性——反射机制学习笔记
java动态性包括: 反射机制 动态编译 动态执行javascript代码 动态字节码 对动态性的理解 在程序运行过程中(而非编译时),动态地对对象创建及操作 动态语言: python javascr ...
- Java:反射机制学习
文章目录 前言 一.Java反射机制具体是什么 为什么Java要有反射机制,为什么像C++之类的语言不需要有反射机制 反射机制宏观上能让我们做些什么 二.通过反射获取运行时标识Class类 1.Cla ...
- 学习:java原理—反射机制
一.什么是反射: 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提 出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...
- 【Java的反射机制】
了解Java的反射机制 Java 反射机制是 Java 语言的一个重要特性.在学习 Java 反射机制前,大家应该先了解两个概念,编译期和运行期. 编译期是指把源码交给编译器编译成计算机可以执行的文件 ...
- Java的反射机制 —— 类的镜子
Java的反射机制 -- 类的镜子 文章目录 Java的反射机制 -- 类的镜子 一.反射机制的原理 1.1.什么是反射? 1.2.反射机制的实现 1.3.获取类的Class对象的途径 1.4.运行时 ...
- Java的反射机制,内含超简单实例代码(搞懂反射,这一篇就够了)
一 首先来说说反射机制的概念: 程序在运行时, 对于类来说,可以知道该类的任意属性和方法: 对于对象来说,可以调用该对象的任意方法和属性: 就以上这种动态获取信息的机制就称为Java的反射机制 彻底了 ...
- Java的反射机制 工厂模式综合讲解【转载自51CTO】
2019独角兽企业重金招聘Python工程师标准>>> Java的反射机制 工厂模式综合讲解 1.什么叫反射 Java.lang.reflect包下 正常情况下我们可以通过类实例化一 ...
- java xml 反射_Java 读取XML文件以及Java 的反射机制实现
Java 读取XML文件以及Java 的反射机制实现 代码部分 import java.io.File; import javax.xml.parsers.DocumentBuilder; impor ...
- Java编程:Java的反射机制中的 getComponentType() 方法
转载自 Java编程:Java的反射机制中的 getComponentType() 方法 Java 中所有的类都继承自 Object,数组本身也是一个 Class,如果我们能够得到数据的 Class ...
- 搞懂Java的反射机制
搞懂Java的反射机制 1.什么是反射? java的反射机制是指可以在运行状态下获取类和对象的所有属性和方法. 2.反射的作用? 1.在运行时获取一个类/对象的成员变量和方法 2.在运行时创建一个类的 ...
最新文章
- 工具类的方法怎么引用_Hutool中那些常用的工具类和方法
- java维吉尼亚密码_java实现维吉尼亚加密/解密算法 | 学步园
- python编程视频-Python开发视频百度就得看这个!
- 学好python工资一般多少钱-Python工资多少?就业发展前景怎么样?
- 兼顾FPGA和单片机
- GacUI学习(一)
- php 下拉菜单 搜索,DedeCMS实现百度搜索下拉菜单提示信息功能
- rest api_REST API的演变
- Loadruner压数据库oracle,LoadRunner连接Oracle数据库(转)
- 20145212 《信息安全系统设计基础》第3周学习总结
- idea怎么调试jsp页面_一文学会JSP
- Linux系统编程 -- volatile关键字
- EnvironmentLocationNotFound: Not a conda environment:
- 爬取豆瓣网电视剧数据(共1500条)
- 【icourse163】学习python爬虫的代码整理
- 5款精美APP原型设计模板,触手可得
- python方向键 ubuntu,ubuntu|linux下 如何用python 模拟按键
- avr 74hc595驱动数码管动态显示c语言例程,一种电梯钢丝绳张力计控制系统软件的设计...
- IOS开发之——设置APP图标、名字、启动页(50)
- teambition/tower/team@osc/worktile团队协作工具价格比较
热门文章
- Datacamp 笔记代码 Supervised Learning with scikit-learn 第一章 Classification
- 提供源码:java获取节假日、工作日,存入数据库,查找指定日期前一天,后一天。
- STM32Cube-按键检测
- html图片滤镜,纯CSS图片滤镜项目CSSgram简介
- linux查看磁盘读取慢日志,Linux命令:使用dd测磁盘读写速度
- 用lavaan包进行验证性因子分析
- 微服务使用swagger-ui工具,跨域问题
- 【IoT】创业:内容运营 - 戴上写作的六顶思考帽
- “为地球熄灯一小时”纯属闹剧
- 西门子官方资料库地址集