反射机制: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 重点!反射机制学习相关推荐

  1. Java动态性——反射机制学习笔记

    java动态性包括: 反射机制 动态编译 动态执行javascript代码 动态字节码 对动态性的理解 在程序运行过程中(而非编译时),动态地对对象创建及操作 动态语言: python javascr ...

  2. Java:反射机制学习

    文章目录 前言 一.Java反射机制具体是什么 为什么Java要有反射机制,为什么像C++之类的语言不需要有反射机制 反射机制宏观上能让我们做些什么 二.通过反射获取运行时标识Class类 1.Cla ...

  3. 学习:java原理—反射机制

    一.什么是反射: 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提 出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...

  4. 【Java的反射机制】

    了解Java的反射机制 Java 反射机制是 Java 语言的一个重要特性.在学习 Java 反射机制前,大家应该先了解两个概念,编译期和运行期. 编译期是指把源码交给编译器编译成计算机可以执行的文件 ...

  5. Java的反射机制 —— 类的镜子

    Java的反射机制 -- 类的镜子 文章目录 Java的反射机制 -- 类的镜子 一.反射机制的原理 1.1.什么是反射? 1.2.反射机制的实现 1.3.获取类的Class对象的途径 1.4.运行时 ...

  6. Java的反射机制,内含超简单实例代码(搞懂反射,这一篇就够了)

    一 首先来说说反射机制的概念: 程序在运行时, 对于类来说,可以知道该类的任意属性和方法: 对于对象来说,可以调用该对象的任意方法和属性: 就以上这种动态获取信息的机制就称为Java的反射机制 彻底了 ...

  7. Java的反射机制 工厂模式综合讲解【转载自51CTO】

    2019独角兽企业重金招聘Python工程师标准>>> Java的反射机制 工厂模式综合讲解 1.什么叫反射 Java.lang.reflect包下 正常情况下我们可以通过类实例化一 ...

  8. java xml 反射_Java 读取XML文件以及Java 的反射机制实现

    Java 读取XML文件以及Java 的反射机制实现 代码部分 import java.io.File; import javax.xml.parsers.DocumentBuilder; impor ...

  9. Java编程:Java的反射机制中的 getComponentType() 方法

    转载自  Java编程:Java的反射机制中的 getComponentType() 方法 Java 中所有的类都继承自 Object,数组本身也是一个 Class,如果我们能够得到数据的 Class ...

  10. 搞懂Java的反射机制

    搞懂Java的反射机制 1.什么是反射? java的反射机制是指可以在运行状态下获取类和对象的所有属性和方法. 2.反射的作用? 1.在运行时获取一个类/对象的成员变量和方法 2.在运行时创建一个类的 ...

最新文章

  1. 工具类的方法怎么引用_Hutool中那些常用的工具类和方法
  2. java维吉尼亚密码_java实现维吉尼亚加密/解密算法 | 学步园
  3. python编程视频-Python开发视频百度就得看这个!
  4. 学好python工资一般多少钱-Python工资多少?就业发展前景怎么样?
  5. 兼顾FPGA和单片机
  6. GacUI学习(一)
  7. php 下拉菜单 搜索,DedeCMS实现百度搜索下拉菜单提示信息功能
  8. rest api_REST API的演变
  9. Loadruner压数据库oracle,LoadRunner连接Oracle数据库(转)
  10. 20145212 《信息安全系统设计基础》第3周学习总结
  11. idea怎么调试jsp页面_一文学会JSP
  12. Linux系统编程 -- volatile关键字
  13. EnvironmentLocationNotFound: Not a conda environment:
  14. 爬取豆瓣网电视剧数据(共1500条)
  15. 【icourse163】学习python爬虫的代码整理
  16. 5款精美APP原型设计模板,触手可得
  17. python方向键 ubuntu,ubuntu|linux下 如何用python 模拟按键
  18. avr 74hc595驱动数码管动态显示c语言例程,一种电梯钢丝绳张力计控制系统软件的设计...
  19. IOS开发之——设置APP图标、名字、启动页(50)
  20. teambition/tower/team@osc/worktile团队协作工具价格比较

热门文章

  1. Datacamp 笔记代码 Supervised Learning with scikit-learn 第一章 Classification
  2. 提供源码:java获取节假日、工作日,存入数据库,查找指定日期前一天,后一天。
  3. STM32Cube-按键检测
  4. html图片滤镜,纯CSS图片滤镜项目CSSgram简介
  5. linux查看磁盘读取慢日志,Linux命令:使用dd测磁盘读写速度
  6. 用lavaan包进行验证性因子分析
  7. 微服务使用swagger-ui工具,跨域问题
  8. 【IoT】创业:内容运营 - 戴上写作的六顶思考帽
  9. “为地球熄灯一小时”纯属闹剧
  10. 西门子官方资料库地址集