fengfeilong0529 / Android-Notes

Ask myself one question at least every day!
0 stars 1 forks source link

Java基础知识回顾 #18

Open fengfeilong0529 opened 5 years ago

fengfeilong0529 commented 5 years ago

反射、 枚举、泛型、多线程、JVM内存分区等...

fengfeilong0529 commented 5 years ago

反射:

示例:

//调用构造方法(有参)
Constructor con = clazz.getDeclaredConstructor(char.class); con.setAccessible(true);//暴力访问(忽略掉访问修饰符)
obj = con.newInstance(’男’);

- #### 反射获取成员变量并使用:

//获取Class对象
Class stuClass = Class.forName("com.feilong.Student");
//获取所有公有的字段
Field[] fieldArray = stuClass.getFields();
//获取所有的字段(包括私有、受保护、默认的) fieldArray = stuClass.getDeclaredFields();
//获取公有字段并调用 Field f = stuClass.getField("name");
//获取一个对象
Object obj = stuClass.getConstructor().newInstance();//产生Student对象–》Student stu = new Student();
//为字段设置值
f.set(obj, "刘德华");//为Student对象中的name属性赋值–》stu.name = "刘德华"
//验证
Student stu = (Student)obj;
System.out.println("验证姓名:" + stu.name);

//获取私有字段****并调用 Field f = stuClass.getDeclaredField("phoneNum");
f.setAccessible(true);//暴力反射,解除私有限定
f.set(obj, "18888889999");
System.out.println("验证电话:"+ stu);

- #### 反射获取成员方法并调用:

//获取Class对象
Class stuClass = Class.forName("com.feilong.Student");
//获取所有公有方法
Method[] methodArray = stuClass.getMethods();
//获取所有的方法,包括私有的 methodArray = stuClass.getDeclaredMethods();
//获取公有的show1()方法 Method m = stuClass.getMethod("show1", String.class);
//实例化一个Student对象
Object obj = stuClass.getConstructor().newInstance();
m.invoke(obj, "刘德华");

//获取私有的show4()方法 m = stuClass.getDeclaredMethod("show4", int.class);
m.setAccessible(true);//暴力反射,解除私有限定
Object result = m.invoke(obj, 20);//需要两个参数,一个是要调用的对象(获取有反射),一个是实参
System.out.println("返回值:" + result);

fengfeilong0529 commented 5 years ago

枚举:

public class Main { public static void main(String args[]){ System.out.println("所有汽车的价格:"); for (Car c : Car.values()) System.out.println(c + " 需要 " + c.getPrice() + " 千美元。"); } }

fengfeilong0529 commented 5 years ago

泛型: