栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

反射-Java

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

反射-Java

概述

反射:在程序的运行过程中,可以动态加载类,并知道类中各属性和方法。反射即把java类中的各个成分(属性,方法等)映射成一个个对象。
原理:在正常创建对象时,JVM将.class文件载入内存,然后JVM会自动创建一个class对象。
注意:
反射可以自动地创建对象,不需要new;
此时的class不是.class文件,不是关键字;

获得class对象 class

class是抽象类的类:
1.class类(class对象)用来描述普通的类;

每个类都可以有对应的class类型,如int;关键字void也有。

2.一个类只会产生一个class对象;
3.形式:
(1)object类中的getClass()返回的是对象名,对象名.getclass();
(2)class.forName(“全类名”); 全类名即路径+类名,如包名.要反射的类名,一般要抛异常。

package reflect;
public class Reflect {
	public static void main(String[] args) throws Exception {
		Student st=new Student();
		Class c=Class.forName("reflect.Student");
		System.out.println(c);
	}
}

(3)类名.class;

Class c = int.class;
返回构造方法:

1.返回student类中的所有构造方法:

package reflect;
import java.lang.reflect.Constructor;
public class Reflect {
	public static void main(String[] args) throws Exception {	
		Class c=Class.forName("reflect.Student");
		Constructor[] constru=c.getConstructors();//得到的是数组形式
		for(Constructor con:constru){
		System.out.println(con);	 
		 }
	}
}

2.返回指定的构造方法:getConstructor(参数);
3、newInstance()方法:

newInstance():可建由此类对象表示的类的新实例;
c.newInstance返回的是泛型,转一下类型即可;

但是此方法只能返回无参的构造方法,当没有无参的构造方法时会报错。

Class c=Class.forName(“包名.student”);
st=(Student)c.newInstance();

得到对象后:

1、以数组形式返回所有方法:(包括自带的方法)

Method[] Array=c.getMethods();
for(Method method:Array){
	System.out.println(method);
	}

2.获取指定的方法:

Method method=c.getMethod(“方法名”,一个或多个class对象);

3.访问私有方法:

Method pd=c.getDeclaredMethod("study2",int.calss);
pd.setAccessible(true);//访问权限中的flag设为true,才能访问私有方法
pd.invoke(st,2);

例:

public class Reflect {
	public static void main(String[] args) throws Exception {	
		Class c=Class.forName("reflect.Student");//获取学生类的class对象
		Constructor co=c.getConstructor(int.class,String.class);获取class对象的构造方法(对应int,String参数类型的)
		Student st=(Student)co.newInstance(9,"xiaoming");//创建类的新实例
		Method pd=c.getDeclaredMethod("study2",int.class);//获取私有方法
		pd.setAccessible(true);//访问权限
		pd.invoke(st,2);	 
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/346340.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号