获取Class对象的三种获取方式:

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013233097/article/details/46573291

方法一:通过object类中的getClass方法
// 虽然通用,但是前提是必须有指定类,并对该类进行对象的创建,才可以调用getclass方法。


方法二:使用任意数据类型的一个静态成员:class,所有的数据类型,都具备的一个属性,,
//不需要new对象,但还是要使用具体的类:


方法三:使用Class类中的Forname方法,通过给定的类名来获取对应的字节码文件对象。
// 必须知道类的名字,获取字节码文件,则需有forname自动完成,这就是反射技术。



package reflect;

public class ReflectGetClassDemo {
//要想获取字节码文件中的成员,必须要先获取字节码文件对象
	public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
//		方法一:通过object类中的getClass方法
//		虽然通用,但是前提是必须有指定类,并对该类进行对象的创建,才可以调用getclass方法。
//		getClass_way1();
		
//		方法二:使用任意数据类型的一个静态成员:class,所有的数据类型,都具备的一个属性,,
		//不需要new对象,但还是要使用具体的类:
//		getClass_way2();
		
//		方法三:使用Class类中的Forname方法,通过给定的类名来获取对应的字节码文件对象。
//		必须知道类的名字,获取字节码文件,则需有forname自动完成,这就是反射技术。
		getClass_way3();
	}

	private static void getClass_way3() throws 
				ClassNotFoundException, InstantiationException, IllegalAccessException {
		
		String className = "reflect.Person";//必须是全名称:
		//1,通过给定的类名称加载对应的字节码文件,并封装成字节码文件对象Class
		Class clazz = Class.forName(className);
//		System.out.println(clazz);
		
		//通过newInstance(),就可以创建字节码对象所表示的类的实例。 
			//通过new创建给定类的实例
			//调用该类的构造函数,会调用该实例的构造函数
			//通常被发射的类都会有构造函数。。
			//没有对应的构造函数会报InstantiationException异常。
			//如果有提供但权限不够,会报无效访问异常。
		Object obj = clazz.newInstance();
		//Person p = new Person();
//		1,加载Person类,并将Person类封装成字节码文件对象。
//		2,通过new创建Person对象。
//		3,调用构造函数对对象初始化。
		System.out.println(obj);//结果:类名@哈希值:reflect.Person@1bb60c3
	}

	private static void getClass_way2() {
		//不需要new对象,但还是要使用具体的类:
		Class clazz = Person.class;//所有数据类型都通用的方法,获取字节码对象
		System.out.println(clazz);
}

	private static void getClass_way1() {
//		通过object类中的getClass方法
//		虽然通用,但是前提是必须有指定类,并对该类进行对象的创建,才可以调用getclass方法。
		Person p = new Person();
		Class clazz = p.getClass();
		System.out.println(clazz.getName());
		Person p2 = new Person();
		Class clazz2 = p.getClass();
		System.out.println(clazz2.getName());
	}
}


阅读更多
换一批

没有更多推荐了,返回首页