反射的概述和获取class对象的三种方式

、java学习型技术博客、期待与您交流! ——-

java反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称之为java语言的反射机制


动态获取类中的信息,就是java反射
可以理解为对类的解剖。

当程序员写好了一个类(例如:bean.Person)

在运行的时候,jvm就会产生,字节码文件(class Class)

这个字节码文件中就有我们写好的类中的全部内容。
比如:
名称
字段
构造函数
一般函数

该类(Class)就可以获取字节码文件中的所有内容
那么反射,就是依靠该类完成的

想要对一个类文件进行解剖,只要获取到该类的
字节码文件对象即可

获取字节码文件的三种方式

    /*
 要想对字节码文件进行解剖,必须要有字节码文件对象。
 如何获取字节码文件对象呢?
 * */
public class three1 {
    public static void main(String[] args) throws ClassNotFoundException {
        getClassObject_1();
    }

    /*
     方式三:
     只要通过给定的类的字符串名称就可以获取该类,更为扩展。
     可以用Class类中的方法完成。
     该方法就是forName. 


     这种方式只要有名称即可,更为方便,扩展性更强
     * */
    public static void getClassObject_3() throws ClassNotFoundException{
        String className="bean.Person";//这个要到包名,因为是字符串,和倒不倒包没有关系
        Class clazz=Class.forName(className);
        System.out.println(clazz);
        bean.Person p=new bean.Person();
        System.out.println(p);
    }






    /*
     方式2:
     2.任何数据类型都具备一个静态的属性,class来获取其对应的class对象。

     相对简单,但是还是需要明确要用到类中的静态成员
     还是不够扩展
     * 
     * */

    private static void getClassObject_2(){
        Class clazz=Person.class;
        Class clazz1=Person.class;
        System.out.println(clazz==clazz1);
    }






    /*
        获取字节码对象的方式1;
        Object类中的getClass()方法的。
        想要使用这种方式,必须要明确具体的类,并并创建对象
     * */
    public static void getClassObject_1(){
        Person p=new Person();
        Class clazz=p.getClass();

        Person p1=new Person();
        Class clazz1=p1.getClass();

        System.out.println(p);
        System.out.println(clazz);
        System.out.println(clazz==clazz1);

    }

}


//person类

public class Person {
    private int age;
    private String name;
    public Person() {
        super();
        System.out.println("person run");
    }
    public Person( String name, int age) {
        super();
        this.age = age;
        this.name = name;
        System.out.println("person param run"+this.name+":"+this.age);
    }
    public void show(){
        System.out.println(name+"....show run...."+age);
    }

    public void method(){
        System.out.println("method run");
    }

    public void paramMethod(String str,int num){
        System.out.println("paramMethod run..."+str+":"+num);

    }
    public static void staticMethod(){
        System.out.println("static method run.....");
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值