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属性

[java]  view plain  copy
  1. Class clazz1 =Person.class;  
  2. System.out.println(clazz1.getName());  
  3.   
  4. Class clazz2 = String.class;  
  5. System.out.println(clazz2.getName);  

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

[java]  view plain  copy
  1. Person  p =new Person();  
  2. Class clazz3 = p.getClass();  
  3. System.out.prinln(clazz3.getName());<strong>  
  4. lt;/strong>  

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

[java]  view plain  copy
  1. String className ="com.arguigu.java.Person";  
  2. Class clazz4 = Class.forName(className);  
  3. //clazz4.newInstance();  
  4. System.out.prinln(clazz4.getName());  

4.通过类的加载器

[java]  view plain  copy
  1. ClassLoader  classLoader = this.getClass().getClassLoader();  
  2. Class  clazz5 = classLoader.loadClass(className);  
  3. System.out.println(clazz5.getName());  

用途

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

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

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


以上就是Class实例化的四种方式

猜你喜欢

转载自blog.csdn.net/kakaka2011/article/details/79905444