关于java的反射-反射基石:Class

package com.demo.day01;

public class ClassDemo {
	
	
	/**
	 * Person p1 = new Person();
	 * 1.字节码:当原程序中用到了Person这个类的时候,这个类编译成class文件放在硬盘上就是一堆二进制代码
	 * 要把这些二进制代码加载到内存中去,才可以用它去创建一个个的对象,内存中的这些代码就是字节码;
	 * 例如内存中有Person,Date,Math三个对象,则有他们三个对象的字节码:
	 * Class class1 = Date.class//Date类对应的字节码;
	 * Class class2 = Person.class//Person类对应的字节码;
	 * p1.getClass()//这也是获取Person对象的字节码;
	 * Class.forName("java.lang.String")://得到String类的字节码;
	 * 这也是 Class.forName("全类名")的作用:即获取该类的字节码;
	 * 得到某个类的字节码有两种情况:
	 *  1.这个类的字节码已经加载到内存中(JVM)去了,此时只要找到这个类的字节码,直接返回即可;
	 *  2.内存中(JVM)没有:此时用类加载器去加载,加载进来后缓存到缓存(JVM)中;
	 * 得到各个字节码对应的实例对象:
	 *   1.类名.class()例如:System.class();
	 *   2.对象.getClass()例如:new Date().getClass();
	 *   3.Class.forName("全类名")例如:Class.forName("java.util.Date")
	 * 在JVM中内置了8(基本数据类型)+1(Void)种数据类型的字节码    
	 * 总之:只要是在原程序中出现的类型都有各自的Class实例对象,例如int[],void;
	 * @param args
	 * @throws ClassNotFoundException 
	 */
	public static void main(String[] args) throws ClassNotFoundException {
		String str1 = "abc";
		Class cls1 = str1.getClass();
		Class cls2 = String.class;
		Class cls3 = Class.forName("java.lang.String");
		
		System.out.println(cls1 == cls2);//true
		System.out.println(cls1 == cls3);//true
		
		System.out.println(int.class == Integer.class);//false
		System.out.println(int.class == Integer.TYPE);//true
		System.out.println(int[].class.isPrimitive());//false
		System.out.println(int[].class.isArray());//true
	}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值