反射中类的加载与Class对象的联系

本文深入解析Java反射机制,探讨类的加载过程与Class对象的关系,介绍如何通过不同方式获取Class对象,以及反射在代码编译与自审中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

序言:类的加载机制与反射密切相关,我将介绍类的加载与Class对象的关系,并且在最后说明反射的作用。(当用到Class对象时,通常就是在使用反射!)

反射的基本思想: 

1)什么叫类的加载?:当程序运行的时候(包括调用其静态方法、new() 等),JVM中的类加载器,首先把我们要使用的Java类加载到内存中。这里加载的是编译后的.class文件(可能在磁盘、网络上),并生成与之对应的java.lang.Class对象。每个类加载到内存中,会创建一个对应的Class对象(通过反射可获得Class对象)。这个Class对象保存了这个类有哪些成员(数据成员,方法成员)。
2)Class对象:就是当类加载的时候,就会在内存中创建Class对象,通过Class对象可以获得该类的属性和方法。
重点1:1个类可以创建多个该类的对象,但只会创建1个Class类的对象(马上证明)。

创建一个User类(方便演示):

package Reflect;

public class User {
	public int id;
	protected int age;
	private String uname;

	public User(){
		
	}
	public User(int id, int age, String uname) {
		super();
		this.id = id;
		this.age = age;
		this.uname = uname;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}

}

举例:
常用的3种获取Class对象方法:

//User类的对象->获取Class对象
Class u1=user1.getClass();
//User类获取Class对象
Class u3=User.class;
//通过包+类名获取Class对象(最常用)
Class u4=Class.forName("Reflect.User");

//举例
Class i1=int.class;

验证(重点1): 

//加载User类
User user1=new User(1,18,"xiaowang1");
User user2=new User(2,18,"xiaowang2");
//获取反射对象
Class u1=user1.getClass();//getClass()为Object基类的方法
Class u2=user2.getClass();
//判断u1、u2是否为同一对象
System.out.println(u1==u2); //true

练习: 

int[] arr01=new int[10];
int[] arr02=new int[30];
System.out.println(arr01.getClass().hashCode()==arr02.getClass().hashCode());//true
		
int[] arr03=new int[10];
int[][] arr04=new int[10][10];
System.out.println(arr03.getClass().hashCode()==arr04.getClass().hashCode());//false

小结:
1.User类可以创建多个对象,但1个类只会创建1个Class对象。
2.这里用了getClass()获取Class对象,该方法为Object基类的方法。
3.体会练习中的题目,查看api。

 

那么Java反射有什么作用呢?

假如我们有两个程序员,一个程序员在写程序的时候,需要使用第二个程序员所写的类,但第二个程序员并没完成他所写的类。那么第一个程序员的代码能否通过编译呢?这是不能通过编译的。利用Java反射的机制,就可以让第一个程序员在没有得到第二个程序员所写的类的时候,来完成自身代码的编译。

Java的反射机制它知道类的基本结构,这种对Java类结构探知的能力,我们称为Java类的“自审”。大家都用过Jcreator和eclipse。当我们构建出一个对象的时候,去调用该对象的方法和属性的时候。一按点,编译工具就会自动的把该对象能够使用的所有的方法和属性全部都列出来,供用户进行选择。这就是利用了Java反射的原理,是对我们创建对象的探知、自审。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值