关于反射的学习笔记1

概念:

  Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期

借助于Reflection API取得任何类的内部信息,

并能直接操作任意对象的内 部属性及方法。

加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象

(一个 类只有一个Class对象),这个对象就包含了完整的类的结构信息。

我们可 以通过这个对象看到类的结构。这个对象就像一面镜子,

透过这个镜子看 到类的结构,所以,我们形象的称之为:反射。

 

关于类的加载:

1、类的加载过程:
程序经过javac.exe命令以后,会生成一个或多个字节码文件(.class结尾),接着我们使用java.exe命令
对某个字节码文件进行解释运行。相当于将某个字节码文件加载到内存中,此过程就称为类的加载,
加载到内存中的类,我们就称为运行时类,此运行时类,就作为Class的一个实例。
2.换句话说,Class的实例就对应着一个运行时类。比如 此例子,Person为运行时类,创建Class的实例即是 Person.Class。
3.加载到内存中的运行时类,会缓存一定的时间,在此时间之内,我们可以通过不同的方式
来获取此运行时类。

Java反射机制提供的功能:

在运行时判断任意一个对象所属的类

在运行时构造任意一个类的对象

在运行时判断任意一个类所具有的成员变量和方法

在运行时获取泛型信息

在运行时调用任意一个对象的成员变量和方法

在运行时处理注解 生成动态代理

相关的API:

java.lang.Class:代表一个类 

java.lang.reflect.Method:代表类的方法 

java.lang.reflect.Field:代表类的成员变量 

java.lang.reflect.Constructor:代表类的构造器

 

 

 

我们获取Class 的实例有四种方法

1,通过当前类的属性 .class 的方法

2.通过运行时类的对象调用 .getClass()

3.通过class的静态方法,forName(String classPath)

4.使用类的加载器ClassLoader 的方式,这个方式使用过你当前创建的类调用getClassLoader的方式

详细步骤如下图所示:

 

 关于类的加载器,

 

 创建类的对象:调用Class对象的newInstance()方法 要 求:

1。类必须有一个无参数的构造器。 2。类的构造器的访问权限需要足够。

 

//1.根据全类名获取对应的Class对象

String name = “atguigu.java.Person";

Class clazz = null;

clazz = Class.forName(name);

//2.调用指定参数结构的构造器,生成Constructor的实例

Constructor con = clazz.getConstructor(String.class,Integer.class);

//3.通过Constructor的实例创建对应类的对象,并初始化类属性

Person p2 = (Person) con.newInstance("Peter",20);

System.out.println(p2);

 

需要掌握的终点是,如果通过反射机制去获取指定的方法,属性,或者构造器等。

 

 

 

 

 

 

 

posted @   自学Java笔记本  阅读(37)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示