反射机制

概述

  主要是指程序可以访问,检测和修改它本身状态和行为的一种能力

运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法

     对于任意一个对象,都能够调用它的 任意一个方法

这种动态获取的信息及动态调用对象的方法的功能称为java的 反射机制

为什么要用反射机制,直接创建对象不就可以了?这就涉及到了动态与静态的概念

  静态编译:在编译时确定类型,定对象

  动态编辑:在运行时确定类型,绑定对象

功能

  在运行时判断任意一个对象所属的类(instanceof)

  在运行时构造一个类的对象

  在运行时判断任意一个类所具有的成员变量和方法

  在运行时调用任意一个对象的方法

Class对象

要想操纵类中的属性和方法,都必须从获取Class对象开始

 //1.对象名.getclass()方法
	   Employee employee=new Employee("tanlei", 20);
	   Class<?> class1=employee.getClass();
	   System.out.println(class1.getTypeName());
//2.类名.class
	   Class<?>class2=Employee.class;
//3.使用class.forName()
	   try {
		Class.forName("com.iotek.classtype.Employee");
	   } catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	   }
 //4.获取基本数据类型的Class对象
	   Class<?>class3=int.class;
//5.通过基本数据类型包装类来获取对应的基本数据类型所对应的class对象
	   Class<?>class4=Integer.TYPE;
package com.iotek.classtype;

public class classDemo {
   public static void main(String[] args) {
       //1.对象名.getclass()方法
       Employee employee=new Employee("tanlei", 20);
       //class类
       Class<?> class1=employee.getClass();
       System.out.println(class1.getTypeName());
       //获得父类
       System.out.println(class1.getSuperclass());
       
       //2.类名.class
       Class<?>class2=Employee.class;
       System.out.println(class2.getTypeName());
       System.out.println(class2.getSuperclass());
       
       //3.使用class.forName()
       try {
        Class.forName("com.iotek.classtype.Employee");
       } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
       System.out.println(class2.getTypeName());
       System.out.println(class2.getSuperclass());
       
       //4.获取基本数据类型的Class对象
       Class<?>class3=int.class;
       System.out.println(class3.getTypeName());
       System.out.println(class3.getSuperclass().getName());
       
       //5.通过基本数据类型包装类来获取对应的基本数据类型所对应的class对象
       Class<?>class4=Integer.TYPE;
       System.out.println(class4.getTypeName());
       System.out.println(class4.getSuperclass().getName());
}
}

class Employee{
    private String name;
    private int age;
    public Employee(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
    
    
}
原文地址:https://www.cnblogs.com/tanlei-sxs/p/9997939.html