获得Class对象的多种方法及其不同之处

反射(反编译):简单的说就是:通过.class文件得到.java文件。

package Reflect;

public class Student {

	//属性
	public String name;	
	protected int age;
	String address;
	private int idNum;
	
	//静态代码块,类加载的时候执行
	static{
		System.out.println("加载类-->我是静态代码块");
	}
	
	
	{
		System.out.println("生成了对象-->我是构造代码块");
	}

}
public class Demo1 {

	/**
	 * @param args
	 * @throws ClassNotFoundException 
	 */
	public static void main(String[] args) throws ClassNotFoundException {
		//第一种(只会加载类)
		Class class1=Class.forName("Reflect.Student");
		//第二种(不会加载类,也没有生成对象)
		Class class2=Reflect.Student.class;
		//第三种(既会加载类,也生成了对象)
		Student s1=new Student();
		Class class3=s1.getClass();//Object类有一个getClass方法
		
		//第四种(忽略)
		String path="Reflect.Student";
		Class class4=path.getClass();  //这里得到的是String类的Class对象
		
		
        System.out.println(class1==class2);
		System.out.println(class1==class3);
		System.out.println(class3==class4);

	}

}

重点:这里主要讲解三种创建Class对象的方法特别注意:一个类只会创建一个Class对象,在实验的时候请将其他创建Class对象的方法注释掉):

(1)Class class1=Class.forName("Reflect.Student");// 会加载类,则Student类中的静态代码块也会被加载。
(2)Class class2=Reflect.Student.class;//不回加载类,也没有生成对象
(3)Student s1=new Student();
        Class class3=s1.getClass();//既加载类,也生成了对象,(Object类有一个getClass方法)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值