Java--反射

反射:通过class对象后- - >得到类的信息
首先,创建一个类:

class Student{
    private String name="caocao";
    public int age=18;
    public Student(){//构造函数
        System.out.println("Student.init!!");
    }
    public void fun(){//公共方法
        System.out.println("public Student.fun1()!!");
    }
    private void fun2(){//私有方法
        System.out.println("private  Student.fun2()!!");
    }
}

1、通过s1.getClass();

Student s1=new Student();//Student类的一个对象
        //s1.getClass();
        Class c1=s1.getClass();//Class的一个对象
        System.out.println(c1);

输出结果:
这里写图片描述
2、直接通过类名 .class 安全可靠

    //说明任何一个类都有一个隐含的静态成员变量 class
    Class c2=Student.class;
    System.out.println(c2);

输出结果同上。
3、通过Class对象的forName()静态方法来获取

//可能要抛出异常ClassNotFoundException
        Class c3=Class.forName("com.tulun.src.Student");
        System.out.println(c3);

4、一个类型对应一个class对象(和类型一一对应)

System.out.println(c1.equals(c2));
System.out.println(c1.equals(c3));
System.out.println(c2.equals(c3));

输出结果为:
这里写图片描述


Class有很多方法:

  • getName():获得类的完整名字。
  • getFields():获得类的public类型的属性.
  • getDeclaredFields():获得类的所有属性。包括private 声明的和继承类
  • getMethods():获得类的public类型的方法。
  • getDeclaredMethods():获得类的所有方法。包括private 声明的和继承类
  • getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字, parameterTypes 参数指定方法的参数类型。
  • getConstructors():获得类的public类型的构造方法。
  • getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型。
  • newInstance():通过类的不带参数的构造方法创建这个类的一个对象。

    接下来,我们来实现几个方法:

    1、getName():获得类的完整路径

String classname=c1.getName();
System.out.println(classname);

这里写图片描述
2、获得类的所有属性,包括私有成员变量

扫描二维码关注公众号,回复: 2566125 查看本文章
Field[] field1=c1.getDeclaredFields();
        for(Field field:field1){
            System.out.println(field.getName());
        }

这里写图片描述
3、getConstructors():获得类的public类型的构造方法

Constructor[] conArray=c1.getConstructors();
        for(Constructor c:conArray){
            System.out.println(c);
        }

猜你喜欢

转载自blog.csdn.net/xyxy66/article/details/80470763