Class的作用:?
Class类可以帮助我们在程序运行时分析类,说白了就是获取类中的值。可能瞬间就想到了反射,没错!Class一般就是和反射配套使用的,因为我们向Class提供一个类或一个类的类名,Class就可以提供我们很多信息,比如属性/方法/修饰符/构造器/类名等等。然后我们就可以进一步进行反射。
**
Class的运用方式:
-
获取类对象有三种方法 .getClass() .class() class.forName() 我们使用的比较多的一种就时?
-
获取类中使用 .getDeclaredFilelds()可以获取所有的属性如果需要获得私有的属性需要.setAccessible(true)设置后私有方法可以调用
-
获取类中使用 .getDeclaredMethods()可以获得所有的方法如果需要获得私有方法需要.setAccessible(true)设置后私有方法可以调用
public static void getDemoClass() throws ClassNotFoundException {
//获取类对象
Class<?> aClass = Class.forName("com.Class01.People");
//获取类对象中所有的方法
Method[] declaredMethods = aClass.getDeclaredMethods();
//获得类对象中所有的属性
Field[] declaredFields = aClass.getDeclaredFields();
//遍历类中方法名
for(int i =0; i < declaredMethods.length; i++){
String methodsName = declaredMethods[i].getName();
System.out.println("Class中的方法有"+methodsName);
}
//遍历类中属性名
for(int i =0; i < declaredFields.length; i++){
String declaredName = declaredFields[i].getName();
System.out.println("Class中的属性有"+declaredName);
}
}
总结
然后我们连类中所有的方法和属性都可以看到了,完全的破坏了类的封装性......?
也有一些优点和缺点把(网上总结了一些)
优点:
1:能够运行时动态获取类的实例,大大提高了系统的灵活性和扩展性;
2:与java动态编译相结合,可以实现无比强大的功能。
缺点:
1:使用反射的性能较低;
2:使用反射来说相对不安全;
3:破坏了类的封装性,可以通过反射来获取这个类的属性,和私有方法。