JAVA-获取类的三种方法与反射机制

JAVA反射机制

java反射机制是在运行的状态中,对于任意一个类(class文件)
都能知道这个类的所有属性和方法.
都能调用它的任意一个方法和属性

简单说: 动态获取类种的信息就是java反射
(可以理解为对类进行解剖)


获取类的第一种方法

被获取的类

package com.test;

public class Person {
	public Person() {
		System.out.println("Hello");
	}
} 

在这里类获取

package com.demo;
import com.test.Person;

public class Demo {
	public static void main(String[] args) {
		getClassObject();
	}
	public static void getClassObject() {
		Person p1 = new Person();
		Class<?> clazz1 = p1.getClass();
		
		Person p2 = new Person();
		Class<?> clazz2 = p2.getClass();
		System.out.println(clazz1 == clazz2);
	}
}

运行结果:
在这里插入图片描述
想要用这种方式必须要明确具体的类,并创建对象 麻烦


获取类的第二种方法

被获取的类

package com.test;

public class Person {
	public Person() {
		System.out.println("Hello");
	}
} 

在这里类获取

package com.demo;
import com.test.Person;

public class Demo {
	public static void main(String[] args) {
		getClassObject();
	}
	public static void getClassObject() {
		Class clazz1 = Person.class;
		Class clazz2 = Person.class;
		
		System.out.println(clazz1 == clazz2 );
	}
}

运行结果:
在这里插入图片描述
任何数据类型都具备一个静态的属性.class来获取其对应的Class对象
相对简单,但要明确用到类中的静态成员.还是不够扩展.


获取类的第三种方法

扫描二维码关注公众号,回复: 8874189 查看本文章

被获取的类

package com.test;

public class Person {
	public Person() {
		System.out.println("Hello");
	}
} 

在这里类获取

package com.demo;

public class Demo {
    public static void main(String[] args) throws ClassNotFoundException {
    //需要抛出异常..因为这个需要的类可能不存在
        getClassObject();
    }

    public static void getClassObject() throws ClassNotFoundException {
        String className = "com.test.Person";
        Class clazz = Class.forName(className);
        System.out.println(clazz);
    }
}

运行结果:
在这里插入图片描述
只要通过给定的类的 字符串名称就可以获取该类, 更容易扩展
可以用Class类中的方法,forName.
这种方式只要有名称即可,更为方便,扩展性更强.

发布了87 篇原创文章 · 获赞 43 · 访问量 3985

猜你喜欢

转载自blog.csdn.net/weixin_42947972/article/details/103916830
今日推荐