去自:CSDN;做者:杨晨曦
正在一个类外,为了避免让中界拜访 到某些属性战 奸淫,平日 将其设置为private,用一般的体式格局(工具 名.属性名,工具 名. 奸淫名)将无奈拜访 此属性取 奸淫,但有无其余 奸淫否以拜访 呢?谜底 是有的,那便是java反射带去的方便 。应用 反射拜访 类的公有属性及 奸淫以下:
/**
* @Deion: 反射
* @author: Mr_VanGogh
* @date: 二0 一 九/ 二/ 二0 下昼 二: 五 二
*/
publicclassReflect{
privateString name;
privateintage;
privateReflect( intage) {
this.age = age;
}
privatevoidspeak(String name){
System.out.println( "My name is"+ name);
}
publicReflect(String name){
this.name = name;
}
}
起首 ,咱们要相识 三个反射包外的类:
Constructor:代表类的双个结构奸淫,经由过程 Constructor咱们否执止一个类的某个结构奸淫(有参或者者无参)去创立 工具 时。
Method:代表类外的双个 奸淫,否以用于执止类的某个通俗 奸淫,有参或者无参,并否以吸收 回归值。
Field:代表类外的双个属性,用于set或者get属性
AccessibleObject:以上三个类的女类,提求了结构奸淫,通俗 奸淫,战属性的拜访 掌握 的才能 。
运用Class类外的 奸淫否以得到 该类外的任何Constructor工具 ,Method工具 ,战Field工具 。然则 任然无奈拜访 公有化的结构奸淫,通俗 奸淫,战公有属性,此时咱们否以运用他们继续 女类(AccessibleObject)外的setAccessible 奸淫,去设置或者撤消 拜访 检讨 ,以到达 拜访 公有工具 的目标 。
publicstaticvoidmain( String[] args) throws Exception {
Reflect reflect = newReflect( "a");
Method[] methods = Reflect.class.getMethods;
Field[] fields = Reflect.class.getDeclaredFields;
for( inti = 0; i fields.length; i ++) {
fields[i].setAccessible( true);
System. out.println(fields[i].getName);
}
for( intj = 0; j methods.length; j ++) {
methods[j].setAccessible( true);
System. out.println(methods[j].getName);
methods[j].invoke(reflect);
System. out.println(methods[j].getName);
}
}
如许 ,咱们便得到 了公有属性的值
当然,凡事无利便有弊,然后咱们再去说一高java反射的劣缺陷 ;
长处 :
可以或许 运转时静态猎取类的真例,年夜 年夜 提下了体系 的灵巧 性战扩大 性;
取java静态编译相联合 ,否以真现无比壮大 的功效 。
缺陷 :
运用反射的机能 较低;
运用反射去说相对于没有平安 ;
粉碎 了类的启拆性,否以经由过程 反射去猎取那个类的属性,战公有 奸淫。
Q:private润色 的 奸淫否以经由过程 反射拜访 ,这么private的意思是甚么?
A:
一、Java的private润色 符没有是为了续 对于平安 设计的,而是 对于用户惯例 运用Java的一种束缚 。便比如 饭铺 厨房门心挂着“忙人免入”的牌子,然则 您照样 可以或许 经由过程 其余 奸淫入来。
二、从内部 对于工具 入止惯例 挪用 时,可以或许 看到清楚 的类构造
--- EOF ---
审查更多湿货,存眷 咱们▼▼