反射获取.class文件的三种方法

/**
 *	 获取一个类的.class文件对象的三种方式
 * 	1,对象获取
 * 	2,类名获取
 * 	3,class类的静态方法获取
 */
public class ReflectDemo {

	public static void main(String[] args) throws ClassNotFoundException {
		
		//对象获取
		Person p = new Person();
		Class c = p.getClass();
		
		//类名获取
		 Class c1 = Person.class;
		 
		 //3,class类的静态方法获取
		 Class c2 = Class.forName("demo.Person");
		 
        //获取对象中所有公共的构造方法
		Constructor[] cons = c2.getConstructors();
		
		//获取指定空参数构造器
		Constructor con = c2.getConstructor();
		
		//运行获得的构造方法
		Object obj = con.newInstance();
		
		//调用类中的构造方法
		Person p1 = (Person)obj;
		p1.eat();

        //获取有参数的构造方法
		Constructor conc = c2.getConstructor(String.class);
		Object objc = conc.newInstance("zhangsan");
		 
         //3,class类的静态方法获取
		 Class cnew = Class.forName("demo.Person");
         //快捷方法直接创建.class实例
        Object objnew =  cnew.newInstance();

	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`.class` 和反射机制都可以用于创建对象的实例,但它们的实现方式和使用场景有所不同。 1. `.class`:通过 `.class` 获取一个类的 Class 对象,可以使用 `new` 关键字直接实例化该类的对象。例如,`MyClass obj = new MyClass();`。这种方式是在编译时确定类型并直接创建对象。`.class` 文件必须在编译时存在,否则无法进行实例化。 2. 反射机制:通过反射机制,可以在运行时动态地获取类的信息,并且可以通过 Class 对象的相关方法实例化对象。例如,`Class.forName("com.example.MyClass").newInstance();`。这种方式是在运行时根据类名动态加载并创建对象。通过反射,可以实例化任意一个已经被加载到内存中的类,甚至是在编译时无法确定的类型。 区别: - `.class` 方式在编译时就确定了具体的类型,直接使用 `new` 关键字创建对象,比较简单直观。 - 反射机制通过运行时动态获取类的信息,并且可以实例化任意已加载的类,具有更大的灵活性和扩展性。但相对于直接使用 `.class` 方式,反射机制的性能较低,因为需要动态地加载和实例化对象。 需要根据具体的需求来选择使用哪种方式来实例化对象。如果在编译时已经确定了具体的类型,可以直接使用 `.class` 方式来创建对象。如果需要在运行时动态加载和创建对象,或者需要处理一些动态生成的类,可以使用反射机制来实例化对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值