00024.04 反射:Class对象(注意是大写的C Class)非常重要

系列文章目录

前言

一、java.lang.Class类型

java.lang.Class类型:
所有的Java类型(包括基本数据类型、引用数据类型、void)
被加载到内存后,或者是编译器自动编译生成的class字节码,最终都会用一个Class对象来表示
即,所有的Java类型,在内存中都表示为一个Class对象
2、如何获取Class对象?4种 重点

  • 2、如何获取Class对象?4种 重点

  • (1)类型名.class

  • 优点:最简洁

  • 缺点:要求编译期这个类型就要存在
    在这里插入图片描述

  • (2)对象.getClass()

  • 这个方法在java.lang.Object类型中声明的,返回对象的运行时类型
    在这里插入图片描述

  • 适用于:你的先有对象

  • (3)Class.forName(“类型全名称”)

  • 类型全名称:包.类名

  • 优势:这个类型可以在编译期间未知,这个类名称可以在代码中出现,也可以配置在配置文件中,或者键盘输入等方式来指定。
    在这里插入图片描述
    在这里插入图片描述

  • (4)使用类加载器对象.loadClass(“类型全名称”)

  • 一般都是用在自定义类加载器对象去加载指定路径下的类
    在这里插入图片描述

  • 这四种方式:都可以选择,你就看当前的情况,哪种能用,就用哪种,如果都能用,就用最简便的。

二、代码

TestClass 类

package com.atguigu.test05;
import java.io.Serializable;
import java.lang.annotation.ElementType;
import org.junit.Test;
public class TestClass {
	@Test
	public void test05() throws ClassNotFoundException{
		Class c = TestClass.class;
		ClassLoader loader = c.getClassLoader();
		
		Class c2 = loader.loadClass("com.atguigu.test05.Employee");
		Class c3 = Employee.class;
		System.out.println(c2 == c3);
	}
	
	@Test
	public void test04() throws ClassNotFoundException{
		Class c = Class.forName("com.atguigu.ext.demo.AtGuiguExtDemo");
		System.out.println(c);
	}
	
	@Test
	public void test03() throws ClassNotFoundException{
		Class c2 = String.class;
		Class c1 = "".getClass();
		
		Class c3 = Class.forName("java.lang.String");
		System.out.println(c1 == c2);
		System.out.println(c1 == c3);
	}
	
	@Test
	public void test02(){
		Class c2 = String.class;
		Class c1 = "".getClass();
		System.out.println(c1 == c2);
	}
	
	@Test
	public void test01(){
		Class c1 = int.class;//基本数据类型
		
		Class c2 = void.class;//特殊的空类型
		
		Class c3 = String.class;//系统定义的类类型
		Class c4 = TestClass.class;//自定义的类的类类型
		
		Class c5 = Serializable.class;//接口类型
		Class c6 = ElementType.class;//枚举类型    
		Class c7 = Override.class;//注解类型
		
		Class c8 = int[].class;//数组类型
		
//		Class c9 = Student.class;//错误的,因为编译期间不存在
		
//		Class c10 = com.atguigu.ext.demo.AtGuiguExtDemo.class;//错误的,不在当前的类路径下
	}
}

Employee 类

package com.atguigu.test05;

public class Employee {

}

总结

如何获取Class对象?4种 重点

  • (1)类型名.class
  • 优点:最简洁
  • 缺点:要求编译期这个类型就要存在
  • (2)对象.getClass()
  • 这个方法在java.lang.Object类型中声明的,返回对象的运行时类型
  • 适用于:你的先有对象
  • (3)Class.forName(“类型全名称”)
  • 类型全名称:包.类名
  • 优势:这个类型可以在编译期间未知,这个类名称可以在代码中出现,也可以配置在配置文件中,或者键盘输入等方式来指定。
  • (4)使用类加载器对象.loadClass(“类型全名称”)
  • 一般都是用在自定义类加载器对象去加载指定路径下的类
  • 这四种方式:都可以选择,你就看当前的情况,哪种能用,就用哪种,如果都能用,就用最简便的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值