JAVA反射机制02

java.lang.Class是反射的源头,我们创建了一个类(源文件),通过编译(javac.exe),生成对应的.class文件,之后我们使用java.exe加载(使用的是JVM的类加载器来完成的)此.class文件加载到内存以后就是一个运行时类,存放在缓存区。那么这个运行时类本身就是一个Class的实例。 1.每一个运行时类只加载一次

2.有了一个Class的实例以后,我们才可以进行如下的工作:

(1)创建对应的运行时类的对象

(2)获取对应的运行时类的完整结构(属性、方法、构造器、内部类、父类、所在的包、异常、注解等)

(3)调用对应的运行时类的指定的结构(属性、方法、构造器)

(4)反射的应用,动态代理 Person p = new Person(); Class claaa = p.getClass();//通过运行时类的对象,调用其getClass(),返回其运行时类

如何获取Class的实例(3种)

1.调用运行时类本身的.class属性 Class claaa = Person.class; System.out.println(claaa.getName());

2.通过运行时类的对象获取 Person p = new Person(); Class claaa = p.getClass();

3.通过Class的静态方法获取,通过此方式可以体会到反射的动态性 String className = "com.at.java.Person" Class class = Class.forName(className);(要抛出一个ClassNotFoundException)

4.(该方式了解就可以)通过类的加载器 ClassLoader classLoader = this.getClass.getClassLoader();(this是指当前的方法) Class claaa = classLoader.loadClass(className); **关于类的加载器:** **ClassLoder classLoder1 = ClassLoder.getSystemClassLoder();(系统类加载器)** **ClassLoder classLoder2 = classLoder1 .getParent();//可以获取类加载器classLoder1 的父类(扩展类加载器)** **

当一个文件不是直接放在工程下而是放在具体的某个包下时,想获取文件内容可以写如下代码:** 创建对应的运行时类的对象,使用newInstance(),实际上就是调用了运行时类的空构造器 要想能够成功创建,

掌握如下:

ClassLoader loder = this.getClass().getClassLoader();

InputStream is = loader.getResourceAsStream("com\\atguigu\\java\\jdbc.prop")

Properties pros = new Properties(); 

pros.load(is)

1.要求对应的运行时类要有空参的构造器

2.构造器的权限修饰符要足够

转载于:https://my.oschina.net/u/3686592/blog/2243666

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值