java反射(二):获取Class类的四种方式

我们创建了一个类,通过 编译(javac.exe),生成对应的.class文件,之后使用java.exe(JVM的类加载器来完成)加载此.class文件,此.class文件加载到内存以后,就是一个运行时类,存放在缓存区,这个运行时类就是一个

Class的实例。

java.lang.class是反射的源头。

它有如下几个特点:

1.每一个运行时类只加载一次

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

2.1创建对应的运行时类的对象

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

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

2.4)反射的应用:动态代理。


在正常方式下:我们需要引入需要的“包类”名称——通过new实例化——取得实例化的对象

反射方式:实例化对象——getClass()方法——得到完整的“包类”名称。

这相当于是一个倒序的过程。

如何获取Class实例呢?

Class只有在实例后才能开始进行反射。下面是实例化的四种方式:

1.调用运行时类本身的.class属性

		Class clazz1 =Person.class;
		System.out.println(clazz1.getName());
		
		Class clazz2 = String.class;
		System.out.println(clazz2.getName);

2.通过运行时类的对象获取

	Person  p =new Person();
	Class clazz3 = p.getClass();
	System.out.prinln(clazz3.getName());<strong>
</strong>

3. 通过Class的静态方法获取(反射的动态性)

String className ="com.arguigu.java.Person";
Class clazz4 = Class.forName(className);
//clazz4.newInstance();
System.out.prinln(clazz4.getName());

4.通过类的加载器

ClassLoader  classLoader = this.getClass().getClassLoader();
Class  clazz5 = classLoader.loadClass(className);
System.out.println(clazz5.getName());

用途

1.可以创建对应的运行时类的对象

2.获取对应的运行时类的完整的类的结构:属性/方法/构造器//父类/泛型/注解/异常/内部类

3.可以调用对应的运行时类中指定的结构(某个指定的属性/方法/构造器)


以上就是Class实例化的四种方式,下一篇介绍第四种类加载器ClassLoader的使用。




  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值