反射、、练习
myproperties.propertise
file文件mykey=myValue
name=java
address=\u5317\u4EAC
仿制昨上个
public class Student extends person implements InterfaceDemo {
public String name = null;
private int age = 0;
public String address = null;
String schoolname;
protected Long time;
public Student() {
// TODO Auto-generated constructor stub
}
private Student(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getSchoolname() {
return schoolname;
}
public void setSchoolname(String schoolname) {
this.schoolname = schoolname;
}
public Long getTime() {
return time;
}
public void setTime(Long time) {
this.time = time;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public void run(String str) {
System.out.println("this is run");
}
public void sleep(long time) {
this.time = time;
}
}
Test
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class classtest {
public static void main(String[] args) {
// 三种获取类名的方式
Class className = Student.class;
System.out.println(className.getName());
System.out.println(className.getSimpleName());
System.out.println(className.getCanonicalName());
System.out.println("1---------------------------------");
// Student className1 = new Student("俊成", 23, "甘肃");
// Class cn = className1.getClass();
// System.out.println(cn.getName());
// System.out.println(cn.getSimpleName());
// System.out.println(cn.getCanonicalName());
// System.out.println("2---------------------------------");
//
// try {
// Class className2 = Class.forName("com.hisoft.reflect.Student");
// } catch (ClassNotFoundException e) {
// e.printStackTrace();
// }
// System.out.println(cn.getName());
// System.out.println(cn.getSimpleName());
// System.out.println(cn.getCanonicalName());
// System.out.println("3---------------------------------");
// 获取父类
Class sperClass = Student.class.getSuperclass();
System.out.println(sperClass.getName());
// 获取对应接口Class对象
Class<?>[] interfaceClass = Student.class.getInterfaces();
System.out.println(interfaceClass[0].getName());
System.out.println("4---------------------------------");
// 获取方法
Method[] stumet = Student.class.getDeclaredMethods();
System.out.println(stumet[0].getName() + "\t" + stumet[0].getAnnotations());// 获取注释
Method[] studen = Student.class.getMethods();
// for(Method stu:studen){
// System.out.println(stu.getName()+"\t"+stu.getReturnType()+"\t"+stu.getParameters()[0].getType());//获取的是没有参数的方法
// }
System.out.println("5----------------------------------");
// 获取当前类自己定义属性,包括所有的权限修饰符
Field[] f1 = Student.class.getDeclaredFields();
for (Field f : f1) {
System.out.println(f.getName() + "\t" + f.getType() + "\t" + f.getModifiers());
}
System.out.println("6----------------------------------");
// 取得所有public的属性,包括继承的,接口中的和自己定义的
Field[] f2 = Student.class.getFields();
for (Field f : f2) {
System.out.println(f.getName() + "\t" + f.getType() + "\t" + f.getModifiers());
}
System.out.println("7----------------------------------");
// 用lass对象创建类的对象
try {
Class c = Class.forName("com.hisoft.reflect.Student");
Student stu2 = (Student) c.newInstance();
stu2.setName("俊成");
System.out.println(stu2.getName());
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("8----------------------------------");
//
Student stu3 = new Student();
Field namefie;
Field agefie;
Field addressfie;
try {
Class c = Class.forName("com.hisoft.reflect.Student");
stu3 = (Student) c.newInstance();
stu3 = (Student) c.newInstance();
stu3 = (Student) c.newInstance();
namefie = c.getField("name");
agefie = c.getDeclaredField("age");
// 只可以操作私有的
agefie.setAccessible(true);
addressfie = c.getField("address");
namefie.set(stu3, "嗷呦呦");
agefie.set(stu3, 53);
addressfie.set(stu3, "嗷aa");
System.out.println(stu3.getName());
System.out.println(stu3.getAge());
System.out.println(stu3.getAddress());
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("9----------------------------------");
// 反射获取访问权限
Field[] n = getPrivateField("com.hisoft.reflect.Student", "protected");
for (Field f : n) {
System.out.println(f.getName());
}
System.out.println("10----------------------------------");
// 获取方法
try {
Class d = Class.forName("com.hisoft.reflect.Student");
Student stu4 = new Student();
Method m = d.getDeclaredMethod("run", String.class);
m.invoke(stu4, "run");
System.out.println(m.getName());
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("10----------------------------------");
try {
Class c = Class.forName("com.hisoft.reflect.Student");
Student stu5 = (Student) c.newInstance();
Constructor[] con = c.getDeclaredConstructors();
for (Constructor cw : con) {
System.out.println(cw.getName());
}
Constructor c1 = c.getDeclaredConstructor(String.class, int.class, String.class);
c1.setAccessible(true);
Student stu6 = (Student) c1.newInstance("苏州", 34, "江苏");
System.out.println(stu6.getName() + "\t" + stu6.getAge() + "\t" + stu6.getAddress());
Constructor c2 = c.getConstructor(String.class, int.class);
Student stu7 = (Student) c2.newInstance("盖伦", 234);
System.out.println(stu7.getName() + "\t" + stu7.getAge());
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("11----------------------------------");
}
public static Field[] getPrivateField(String className, String quxiang) {
int qx = 0;
switch (quxiang) {
case "public":
qx = 1;
break;
case "private":
qx = 2;
break;
case "protected":
qx = 4;
break;
default:
qx = 0;
break;
}
Field[] f = null;
try {
Class c = Class.forName(className);
Field f1[] = c.getDeclaredFields();
int x = 0;
for (int i = 0; i < f1.length; i++) {
if (f1[i].getModifiers() == qx) {
x++;
}
}
f = new Field[x];
int j = 0;
for (int i = 0; i < f1.length; i++) {
if (f1[i].getModifiers() == qx) {
f[j] = f1[i];
f[j].setAccessible(true);
j++;
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return f;
}
}
2876

被折叠的 条评论
为什么被折叠?



