大数据必学Java基础(八十九):反射的深入了解

2022-12-13 10:56:41 浏览数 (2)

​反射的深入了解

一、提供丰富的类

代码语言:javascript复制
package com.lanson.test02;
//作为一个父类
public class Person {
    //属性
    private int age;
    public String name;

    //方法
    private void eat(){
        System.out.println("Person---eat");
    }
    public void sleep(){
        System.out.println("Person---sleep");
    }
}


package com.lanson.test02;
//Student作为子类
public class Student extends Person {
    //属性:
    private int sno;//学号
    double height;//身高
    protected double weight;//体重
    public double score;//成绩

    //方法:
    public String showInfo(){
        return "我是一名三好学生";
    }
    private void work(){
        System.out.println("我以后会找工作--》成为码农  程序员 程序猿  程序媛");
    }

    //构造器
    public Student(){
        System.out.println("空参构造器");
    }
    private Student(int sno){
        this.sno = sno;
    }
    Student(int sno,double weight){
        this.sno = sno;
        this.weight = weight;
    }
}

二、获取字节码信息的四种形式

代码语言:javascript复制
package com.lanson.test02;

public class Test {
    public static void main(String[] args) throws ClassNotFoundException {
        //案例:以Person的字节码信息为案例
        //方式1:通过getClass()方法获取
        Person p = new Person();
        Class c1 = p.getClass();
        System.out.println(c1);

        //方式2:通过内置class属性:
        Class c2 = Person.class;
        System.out.println(c2);

        System.out.println(c1==c2);

        //注意:方式1和方式2  不常用

        //方式3:--》用的最多:调用Class类提供的静态方法forName
        Class c3 = Class.forName("com.lanson.test02.Person");
        //方式4:利用类的加载器(了解技能点)
        ClassLoader loader = Test.class.getClassLoader();
        Class c4 = loader.loadClass("com.lanson.test02.Person");
    }
}

三、可以作为Class类的实例的种类

Class类的具体的实例:

(1)类:外部类,内部类

(2)接口

(3)注解

(4)数组

(5)基本数据类型

(6)void

验证:

代码语言:javascript复制
package com.lanson.test02;

public class Demo {
    public static void main(String[] args) {
        /*
        Class类的具体的实例:
        (1)类:外部类,内部类
        (2)接口
        (3)注解
        (4)数组
        (5)基本数据类型
        (6)void
         */
        Class c1 = Person.class;
        Class c2 = Comparable.class;
        Class c3 = Override.class;

        int[] arr1 = {1,2,3};
        Class c4 = arr1.getClass();
        int[] arr2 = {5,6,7};
        Class c5 = arr2.getClass();
        System.out.println(c4==c5);//结果:true .同一个维度,同一个元素类型,得到的字节码就是同一个
        
        Class c6 = int.class;
        Class c7 = void.class;
    }
}

0 人点赞