反射

package cn.itcast.reflect;

public class Person {
    
    private int id;
    
    String name;
    
    public Person(int id,String name){
        this.id = id;
        this.name = name;
    }
    
    public Person(){}
    
    
    public void eat(int num){
        System.out.println(name+"吃很"+num+"斤饭");
    }
    
    private static void sleep(int num){
        System.out.println("明天睡上"+num+"小时");
    }
    
    
    public static void  sum(int[] arr){
        System.out.println("长度是:"+ arr.length);
    }
    
    
    @Override
    public String toString() {
        return " 编号:"+ this.id +" 姓名:"+ this.name;
    }
    
}
package cn.itcast.reflect;
/*
 反射: 当一个字节码文件加载到内存的时候,jvm会对该字节码进行解剖,然后会创建一个对象的Class对象,把字节码文件的信息全部都
 存储到该Class对象中,我们只要获取到Class对象,我们就可以使用字节码对象设置对象的属性或者调用对象的方法等操作....

注意: 在反射技术中一个类的任何成员都有对应 的类进行描述。  比如:  成员变量(Field)   方法----> Method类  

 */
public class Demo1 {
    
     Person p;
    
    public static void main(String[] args) throws ClassNotFoundException {
        //Person p = new Person(110,"狗娃");
        
        //推荐使用: 获取Class对象的方式一
        Class clazz1 = Class.forName("cn.itcast.reflect.Person");
        System.out.println("clazz1:"+ clazz1);
        
        
        //获取Class对象的方式二: 通过类名获取
        Class clazz2 = Person.class;
        System.out.println("clazz1==clazz2?"+ (clazz1==clazz2));
        
        
        //获取Class对象的方式三 :通过对象获取
        Class clazz3 = new Person(110,"狗娃").getClass();
        System.out.println("clazz2==clazz3?"+ (clazz2==clazz3));
        
    }
    
}

 

 

 

posted @ 2017-04-09 23:07  Rainyn  阅读(168)  评论(0编辑  收藏  举报