Class Student{
public int sum(int a, int b, int c){
return a+b+c < 20 ? 20 : a+b+c;
}
public String sum(String a, String b, String c){
return a+b+c < 20 ? 20 + "": (a+b+c) + "";
}
}
1.获取类类型(获取class类对象)的方法
1)通过类名: Class c1 = Student.class;
2)通过对象: Class c2 = student.getclass()
3)通过类的全称: Class c3 = Class.forName("com.Student");
其中 c1 = c2 = c3
2.通过类类型获取该类的对象
Student student = (Student ) c1.newInstance();
3.class类的api
1)Method[] publicMethods = c1.getMehods(); 类的所有public方法
2)Method[] declaredMethods = c1.getDeclaredMehods(); 该类声明的所有方法
3)Field[] publicFields = c1.getFields(); 类的所有public field
4)Field[] declaredFields = c1.getDeclaredFields(); 该类声明的所有field
5)Constructor[] publicConstructors = c1.getConstructors(); 类的所有public Constructor
6)Constructor[] declaredConstructors = c1.getDeclaredConstructors(); 该类声明的所有Constructor
4.方法的反射
Method method = c1.getMethod("sum", new Class[]{int.class, int.class, int.class});
method.invoke(c1, new int[]{10, 20, 30});
总结
1.类是java.lang.Class的对象,有三种方法可以拿到类的类类型。经常使用的是Class.forName或者对象.getClass()。
2.new方法是编译期静态加载对象,需要保证编译时对象就存在且正确。使用类的类类型来加载对象是动态加载对象,运行时正确即可。
3.通过反射可以调用类的方法,哪怕是private的方法,从而修改一些默认的行为。
总结
1.类是java.lang.Class的对象,有三种方法可以拿到类的类类型。经常使用的是Class.forName或者对象.getClass()。
2.new方法是编译期静态加载对象,需要保证编译时对象就存在且正确。使用类的类类型来加载对象是动态加载对象,运行时正确即可。
3.通过反射可以调用类的方法,哪怕是private的方法,从而修改一些默认的行为。