Java的反射方法

六十八、newInstance()方法

条件:该类必须有无参构造器,如果没有运行时会抛出异常,没有重载的方法

		Class c=Student.class();
		Object o1=c.newInstance();
		Student s=(Student)o1;
		或  	
		Student s=(Student) c.newInstance();

六十九、获取public权限的无参数的构造器
	Constructor con=c.getConstructor();
	Student s=(Student) con.newInstance();
	System.out.println(s.name);

七十、调用指定参数的public权限的构造器
Class c=Student.class();
Constructor con1=c.getConstructor(String.class,int.class);
//co.setAccessible(true);//打开权限
Student s1=(Student)con1.newInstance("student",10);	

七十一、获取所有public权限的构造器
	Constructor [] co=c.getConstructors();
	for(int i=0;i<co.length;i++) {
		System.out.println(co[i]);
	}

七十二、通过反射获取构造器
获取构造器的方式:
c.getConstructor( Class... cl)---获取指定参数的public权限的构造器
c.getConstructors();---获取所有public权限的构造器
c.getDeclaredConstructor(Class... cl);--获取所有权限指定参数构造器
c.getDeclaredConstructors();---获取所有权限的所有构造器

通过构造器创建对象:
如果是私有构造器con.setAccessiable(true),用这个方法打开私有权限

七十三、Filed类的get()、set()方法

	Student s=new Student();
	Class c=s.getClass();
	Field f=c.getField("name");
	f.set(s, "小明");
	System.out.println(f.get(s));

七十四、获取指定类的所有public权限的属性,包括继承来的

	Field [] f=c.getFields();
	for(int i=0;i<f.length;i++) {
		System.out.println(f[i]);
	}

七十五、获取所有权限的指定属性,不包括继承来的

	Field f1=c.getDeclaredField("age");
	f1.setAccessible(true);
	System.out.println(f1.get(s));

七十六、获取指定类中所有权限的所有属性

		Field [] f=c.getDeclaredFields();
		for(int i=0;i<f.length;i++) {
			System.out.println(f[i]);
		}

七十七、获取静态属性不用指定对象,getField()方法获取public权限的属性,不带s

		System.out.println(c.getField("num").get(null));   
		null:因为静态数据不以不依赖于对象

七十八、获取public权限的指定参数的方法

	Class c= Student.class;
	Method m=c.getMethod("sleep");
	System.out.println(m);	//输出具体的方法名(包括包名)
	m.invoke(s);   //s是对象

七十九、获取指定类的所有public权限的方法(包括继承过来的):getMethods()

		Method [] m1=c.getMethods();
		for(int i=0;i<m1.length;i++) {
			System.out.println(m1[i]);
		}

八十、获取所有权限的指定参数的方法,不包括继承来的方法

		Method m3=c.getDeclaredMethod("speak");
		m3.setAccessible(true);//打开权限
		m3.invoke(s);

八十一、获取本类中所有权限的所有方法(不包括继承来的)

		Method m4[]=c.getDeclaredMethods();
		for(int i=0;i<m4.length;i++) {
			System.out.println(m4[i]);	 
		}

八十二、获取静态方法及执行

		Method m=c.getMethod("fun1");
		//静态方法传null是可以的
		m.invoke(null);  //null:因为静态数据不以不依赖于对象

八十三、比较(类型判定)

		Class c=Person.class;
		Class c1=Student.class;
		System.out.println(c.isInstance(c1));  //true
		System.out.println(c1 instanceof Student); //true
		//报错:类型不兼容时,会报错
		System.out.println(str instanceof Student); //false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值