java中的反射

java中的反射

获取类的class对象

package com.han.reflection;

/**
 * 获取类的class对象
 */
public class Test01 {
    public static void main(String[] args) throws  ClassNotFoundException{
        Class c1 = Class.forName("com.han.reflection.User");
        System.out.println(c1.hashCode());//1163157884

        Class c2 = Class.forName("com.han.reflection.User");
        Class c3 = Class.forName("com.han.reflection.User");
        Class c4 = Class.forName("com.han.reflection.User");

        System.out.println(c2.hashCode());//1163157884
        System.out.println(c3.hashCode());//1163157884
        System.out.println(c4.hashCode());//1163157884

    }
}

class User{
    private String name;
    private int age;

    public User(){

    }

    public User(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;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

获得class的几种方式

package com.han.reflection;

/**
 * 获得class对象的几种方式
 */
public class Test02 {
    public static void main(String[] args) throws ClassNotFoundException{
        Person p = new Student();
        System.out.println("这个人是:"+p.name);//这个人是:Student

        //获取Class实例的一些方法

        //通过对象获得
        Class c1 = p.getClass();
        System.out.println(c1);//class com.han.reflection.Student

        //通过包名加类名获得,forName
        Class c2 = Class.forName("com.han.reflection.Student");
        System.out.println(c2);//class com.han.reflection.Student

        //通过对象名获得
        Class c3 = Student.class;
        System.out.println(c3);//class com.han.reflection.Student

        //一些包装类有一些内置对象
        Class<Integer> c4 = Integer.TYPE;
        System.out.println(c4);//int

        //获得父类的Class
        Class c5 = c1.getSuperclass();
        System.out.println(c5);//class com.han.reflection.Person
    }
}

class Person{
    public String name;

    public Person(){

    }

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                '}';
    }
}

class Student extends Person{
    public Student(){
        this.name = "Student";
    }
}

class Teacher extends Person{
    public Teacher(){
        this.name = "Teacher";
    }
}

所有类型的class

package com.han.reflection;

import java.lang.annotation.ElementType;

/**
 * 所有类型的class
 */
public class Test03 {
    public static void main(String[] args) {
        Class c1 = Object.class;//对象 class java.lang.Object
        Class c2 = Comparable.class;//接口 interface java.lang.Comparable
        Class c3 = ElementType.class;//枚举 class java.lang.annotation.ElementType
        Class c4 = String[].class;//一维数组 class [Ljava.lang.String;
        Class c5 = int[][].class;//二维数组 class [[I
        Class c6 = Override.class;//注解 interface java.lang.Override
        Class c7 = Integer.class;//包装类 class java.lang.Integer
        Class c8 = String.class;//class java.lang.String
        Class c9 = void.class;//void
        Class c10 = Class.class;//class java.lang.Class

        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);
        System.out.println(c4);
        System.out.println(c5);
        System.out.println(c6);
        System.out.println(c7);
        System.out.println(c8);
        System.out.println(c9);
        System.out.println(c10);

        //只要元素类型和纬度一样,就是同一个class
        int [] a = new int[10];
        int [] b = new int[20];
        System.out.println(a.getClass().hashCode());//1163157884
        System.out.println(b.getClass().hashCode());//1163157884

        /**
         * 运行结果
         * class java.lang.Object
         * interface java.lang.Comparable
         * class java.lang.annotation.ElementType
         * class [Ljava.lang.String;
         * class [[I
         * interface java.lang.Override
         * class java.lang.Integer
         * class java.lang.String
         * void
         * class java.lang.Class
         * 1163157884
         * 1163157884
         */

    }
}
posted @ 2021-12-15 17:26  Dawn_006  阅读(31)  评论(0)    收藏  举报