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

目的 :便于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()

需要有无参数的构造方法

 

动态加载类

编译加载类:静态加载类

运行加载类:动态加载类

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

 

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

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

进一步完善

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

 

获取方法信息

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

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

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);
	}
}

 

相关文章: