高级java开发-----反射(1)

本文深入探讨Java反射机制,介绍Class类的多种实例化方法及动态加载类的过程。同时,通过ClassUtil工具类演示如何获取类的信息,包括名称、返回值类型及参数列表,为Java底层操作提供实用指南。

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

目的 :便于java底层操作 。 功能性的类一般使用动态加载

Class类的使用

·任何类都是Class类的实例对象

·Class类对象三种表示方式 某一个实例对象

Foo foo1 = new Foo()

(1)任何类都有隐含的静态成员变量 class

Class c1 = 其他任何类类名.class 如Foo.class

(2) 已知某个类的对象通过 getClass获得

Class c2 = foo1.getClass()

c1,c2表示Foo类的类类型 这个类表示自己也是个对象,自己也能实例化其他对象

(3)直接 Class.forName("com.imooc.,reflect.Foo")

可以通过类类型创建类的实例

Foo foo = (Foo)c1.newInstance()

需要有无参数的构造方法

 

动态加载类

编译加载类:静态加载类

运行加载类:动态加载类

 

·运行时加载 方法二 forName返回加载的类类型 。 也就是字符串代表的类

进一步完善

 

获取方法信息

获取某个类的名称 返回值类型 参数列表

ClassUtil.java文件



import java.lang.reflect.Method;

public class ClassUtil {
	
	
	public static void printClassMessage(Object obj){
		Class c = obj.getClass();
		System.out.println("类的名称是"+c.getName());
		Method[] ms = c.getMethods();
		//获取所有public函数 包括父类继承来的
		Method[] ms2 = c.getDeclaredMethods();
		//获取所有自己声明的方法
		for(int i=0;i<ms.length;i++){
		//getReturnType获取方法返回值类型的类类型 如int.class
		//int.class.getName才可以得到int
			
			Class returntype = ms[i].getReturnType();
			System.out.print(returntype.getName()+" ");
		//某个具体的方法对象 getName() 获取方法名
			System.out.print(ms[i].getName()+"(");
		//	获取参数类型 ---参数列表的类型的类类型
			Class[] paramTypes = ms[i].getParameterTypes();
			for (Class class1 : paramTypes) {
				System.out.print(class1.getName()+",");
			}
			System.out.println(")");
			
		}
		
	}
}

 ClassDemo.java文件

package com.imooc.reflect;

public class ClassDemo {
	public static void main(String[] args) {
		String s = "Hello";
		ClassUtil.printClassMessage(s);
		
		Integer n1 =1;
		ClassUtil.printClassMessage(n1);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值