2019-04-23

反射

反射的概述             

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

反射的使用

1、获取Class对象的三种方式 1.1 Object ——> getClass(); 1.2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性 1.3 通过Class类的静态方法:forName(String className)(常用)

获取Class对象的三种方式

1 Object ——> getClass();

2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性

3 通过Class类的静态方法:forName(String className)(常用)

public class Fanshe { public static void main(String[] args) { //第一种方式获取Class对象 Student stu1 = new Student();//这一new 产生一个Student对象,一个Class对象。 Class stuClass = stu1.getClass();//获取Class对象 System.out.println(stuClass.getName()); //第二种方式获取Class对象 Class stuClass2 = Student.class; System.out.println(stuClass == stuClass2);//判断第一种方式获取的Class对象和第二种方式获取的是否是同一个 //第三种方式获取Class对象 try { Class stuClass3 = Class.forName("fanshe.Student");//注意此字符串必须是真实路径,就是带包名的类路径,包名.类名 System.out.println(stuClass3 == stuClass2);//判断三种方式是否获取的是同一个Class对象 } catch (ClassNotFoundException e) { e.printStackTrace(); } } }

通过反射获取构造方法并使用:

public class Student { ---------------构造方法-------------------

(默认的构造方法) Student(String str){ System.out.println("(默认)的构造方法 s = " + str); }

无参构造方法 public Student(){ System.out.println("调用了公有、无参构造方法执行了"); }

有一个参数的构造方法 public Student(char name){ System.out.println("姓名:" + name); } 有多个参数的构造方法 public Student(String name ,int age){ System.out.println("姓名:"+name+"年龄:"+ age);}

受保护的构造方法 protected Student(boolean n){ System.out.println("受保护的构造方法 n = " + n); }

私有构造方法 private Student(int age){ System.out.println("私有的构造方法 年龄:"+ age); } }

调用方法: 1.获取构造方法:

1).批量的方法: public Constructor[] getConstructors():所有”公有的”构造方法 public Constructor[] getDeclaredConstructors():获取所有的构造方法(包括私有、受保护、默认、公有)

2).获取单个的方法,并调用: public Constructor getConstructor(Class… parameterTypes):获取单个的”公有的”构造方法: public Constructor getDeclaredConstructor(Class… parameterTypes):获取”某个构造方法”可以是私有的,或受保护、默认、公有; 调用构造方法: Constructor–>newInstance(Object… initargs)

2、newInstance是 Constructor类的方法(管理构造函数的类)

api的解释为: newInstance(Object… initargs) 使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。 它的返回值是T类型,所以newInstance是创建了一个构造方法的声明类的新实例对象。并为之调用

你可能感兴趣的:(2019-04-23)