反射

反射

  • 一.反射机制
  • 二.反射应用
    • 反射获取类对象的三种方式

一.反射机制

反射:一类应用,能够自描述和自控制
反射机制是构建框架技术的基础所在
java反射机制是指在运行状态中,动态的获取信息以及动态调用对象方法的功能
动态性质:运行时生成实例对象 运行期间调用方法 运行时更改属性
实现功能:
在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行时判断任意一个类所具有的方法和属性
在运行时调用任意一个对象的方法

反射技术常用类:
Class类:反射的核心类,反射所有的操作都是围绕该类来生成的,通过Class类可以获取类的属性,方法等信息内容。
Filed类:表示类的属性,可以获取和设置类中属性的值
Method类:表示类的方法,可以用来获取方法的信息,或者执行方法
Constructor类:表示类的构造方法

二.反射应用

反射获取类对象的三种方式

1.类型.class
2.forName(“类型的全路径名”)
3.对象.getClass

// TestStudent s=new TestStudent();
// //2.获取类对象的另一种方法
// Class sc = s.getClass();
//1.获取类对象
// Class stu = Student.class;
//3.获取类对象
// Class stu = Class.forName("cn.kgc.kb09.reflect.Student");

//        //2.通过类对象获取构造方法
//        Constructor con = stu.getDeclaredConstructor();
//        con.setAccessible(true);
//        //3.通过构造方法创建对象
//        Student student = con.newInstance();

        Student student=getStudent();
//        student.stuId=1;
//        student.gender="男";
//        student.setStuName("王思聪");
//        System.out.println(student);
    }



//    public T getObject(String classPath){
    public T getObject(Class<T> tClass){
        T t=null;
        try {

//           Class tClass=(Class)Class.forName(classPath);
            Constructor<T> c=tClass.getDeclaredConstructor();
            c.setAccessible(true);
            t=  c.newInstance(); }
//        catch (ClassNotFoundException e) {
//            e.printStackTrace();
//        }
        catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
return  t;
    }




    public static Student getStudent() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Class<Student> s=Student.class;
        Student stu=null;
        Constructor<Student> c=s.getDeclaredConstructor();
        c.setAccessible(true);
        stu=c.newInstance();
        return stu;
    }
}

你可能感兴趣的:(反射)