分享

忆反射

 太极混元天尊 2018-04-13

最近整理在框架的知识点中很多地方用到反射有点遗忘了,顺便回忆了下,希望能帮到各位。

反射的概念

当一个class文件被加载到内存中的时候,那么jvm就会马上对该class文件的成员进行解剖,然后将class文件的成员数据封装到一个Class对象中,我们如果可以获取到Class对象,那么我们就可以通过该Class对象来操作该类的所有成员。

获取class对象的方式

首先我们先自定义一个类

package cn.itcast.reflect;

public class Person {
 String name;
 int age;
 public Person(String name, int age) {
   this.name = name;
   this.age = age;
 }
 public Person() {
 }
 public void eat(int num,String[] arr){
   System.out.println(name+'吃'+num+'斤米饭');
 }
 public static void sleep(int hours){
   System.out.println('睡'+hours+'小时');
 }
 private void study(){
   System.out.println(name+'熬夜学习...');
 }
 @Override
 public String toString()
{
   return '姓名:'+ this.name+' 年龄:'+this.age;
 }

}

 获取方式1:通过Class.forName获取Class对象

package cn.itcast.reflect;

public class Demo1 {
 public static void main(String[] args) throws Exception {
   //通过Class.forName获取Class对象.
   Class clazz1 =   Class.forName('cn.itcast.reflect.Person');
       System.out.println('clazz1:'+clazz1.getSimpleName());
 }  
}

输出结果为:class1:Pserson

获取方式2:通过类名获取

package cn.itcast.reflect;

public class Demo1 {
 public static void main(String[] args) throws Exception {
   //方式1:通过Class.forName获取Class对象.
   Class clazz1 =   Class.forName('cn.itcast.reflect.Person');
       //System.out.println('clazz1:'+clazz1.getSimpleName());
     //方式2:可以通过类名获取Class对象。
     Class clazz2 = Person.class;
     System.out.println('是同一个对象吗?'+(clazz1==clazz2));
 }  
}

输出结果:是一个对象吗?true

获取方式3:可以通过对象获取Class对象

package cn.itcast.reflect;

public class Demo1 {
 public static void main(String[] args) throws Exception {
   //方式1:通过Class.forName获取Class对象.
   Class clazz1 =   Class.forName('cn.itcast.reflect.Person');
       //System.out.println('clazz1:'+clazz1.getSimpleName());
     //方式2:可以通过类名获取Class对象。
       Class clazz2 = Person.class;
       //System.out.println('是同一个对象吗?'+(clazz1==clazz2));
       //方式3: 可以通过对象获取Class对象
       Class clazz3 = new Person().getClass();
       System.out.println('是同一个对象吗?'+ (clazz2 == clazz3));
 }  
}

输出结果:是同一个对象吗?true

以上就是获取class对象的三种方式你了解了吗?

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多