您的位置:首页 > 编程语言 > Java开发

java反射机制,代码示例

2016-11-21 21:23 309 查看
反射,可以随便访问方法和类,可以访问到不对外公开的方法和类。
new  Person方法是静态加载类,编译的时候加载类。
反射是动态加载类。运行的时候加载类

package com;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

class Person{
private int age;
private String name;
public Person(){
System.out.println("Construct Person");
}
public Person(int age){
System.out.println("Construct Person,age="+age);
this.age = age;
}
public Person(String name){
System.out.println("Construct Person,name="+name);
this.name = name;
}
public Person(int age,String name){
System.out.println("Construct Person,age="+age+",name="+name);
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void say(){
System.out.println("我在说:"+age+name);
}

}
public class TestDemo3 {
public static void main(String[] args) throws Exception {
//情况1
System.out.println("===情况1===");
Class<?> personClass1 = Class.forName("com.Person");
Object obj = personClass1.newInstance();//实例化对象,和new作用一样
Person person1 = (Person) obj;//向下转型
System.out.println(person1);

//情况2
System.out.println("===情况2===");
Constructor<?> cons[] = personClass1.getConstructors();
for(Constructor<?> temp : cons){
System.out.println(temp);
}

//情况3
System.out.println("===情况3===");
Constructor<?> con1 = personClass1.getConstructor(int.class,String.class);
Object obj2 = con1.newInstance(3,"[情况]");
Person person2 = (Person)obj2;//向下转型
Method marr[] = personClass1.getMethods();
for(Method temp :marr){
System.out.println(temp.getName());
}

//情况4
System.out.println("===情况4===");
Method method = personClass1.getMethod("setAge", int.class);
method.invoke(obj, 99);//调用setAge
Method getMethod = personClass1.getMethod("getAge");
System.out.println(getMethod.invoke(obj));

//情况5
System.out.println("===情况5===");
Field fieldarr[] = personClass1.getDeclaredFields();
for(Field temp : fieldarr){
System.out.println(temp.getName());
}

//情况6
System.out.println("===情况6===");
Field nameField=personClass1.getDeclaredField("name");
nameField.setAccessible(true);//解除private的封装限制
nameField.set(obj,"名称哦哦");
System.out.println(nameField.get(obj));//打印结果:名称哦哦
}
}


打印结果

===情况1===
Construct Person
com.Person@15db9742
===情况2===
public com.Person(int,java.lang.String)
public com.Person(java.lang.String)
public com.Person(int)
public com.Person()
===情况3===
Construct Person,age=3,name=[情况]
getName
setName
setAge
getAge
say
wait
wait
wait
equals
toString
hashCode
getClass
notify
notifyAll
===情况4===
99
===情况5===
age
name
===情况6===
名称哦哦
===
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: