反射就是把Java类中的各种成分映射成相应的Java类.
Class 类代表Java类,它的各个实例对象又分别对应什么呢?
对应各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码,等等.
一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的.
如何得到各个字节码对应的实例对象(Class类型)
类名.class 例如,System.class
对象.getClass(),例如 New Date().getClass()
Class.forName("类名"),例如,Class.forName("java.lang.String");
反射影响系统性能下降.因为反射需要把字节码放入缓存.反射越多,缓存占用量越大.
Class 类代表Java类,它的各个实例对象又分别对应什么呢?
对应各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码,等等.
一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的.
如何得到各个字节码对应的实例对象(Class类型)
类名.class 例如,System.class
对象.getClass(),例如 New Date().getClass()
Class.forName("类名"),例如,Class.forName("java.lang.String");
反射影响系统性能下降.因为反射需要把字节码放入缓存.反射越多,缓存占用量越大.
//获取本类的所有public构造方法
Constructor[] con = obj.getConstructors();
//获取本类所有的构造方法
//con = obj.getDeclaredConstructors();
System.out.println(con.length);
for(Constructor c : con){
System.out.println(c.getName());
}
// //获得所有的方法
// //获取public的方法,包括所有父类
// Method[] met = obj.getMethods();
// //获取本类的所有(public protected private)方法
// met = obj.getDeclaredMethods();
// System.out.println(met.length);
// for(Method m : met){
// System.out.println(m.getName());
// }
// //获得所有的属性
// //获得所有的public属性,包括所有父类
// Field[] fie = obj.getFields();
// //获取本类属性,不论private protected public 都能获取
// //fie = obj.getDeclaredFields();
// System.out.println(fie.length);
// for(Field f : fie){
// System.out.println(f);
// }
import java.lang.reflect.Method;
import java.lang.reflect.Type;
public class ReflectTest {
/**
* 〈出输反射的方法〉
* 〈功能详细描述〉
* @param args void
* 如果有违例,请使用@exception/throws [违例类型] [违例说明:异常的注释必须说明该异常的含义及什么条件下抛出该
* @see [类、类#方法、类#成员]
*/
public static void main(String[] args) {
try {
Class s = Class.forName("java.text.Format");
//获取public的方法,包括所有父类
//s.getMethods();
//获取本类的所有(public protected private)方法
Method[] meth = s.getDeclaredMethods();
int tt = 2;
for(int i=0; i<meth.length; i++){
//输出返回参数类型
System.out.print(meth[i].getGenericReturnType()+"\t");
//输出方法名
System.out.print(meth[i].getName()+"(");
Type[] types = meth[i].getGenericParameterTypes();
tt = 2;
for(int ta=0; ta<types.length;ta++){
//打印参数类型
System.out.print(types[ta]);
//判断是否为偶数个参数,为基数个
if(tt%2 != 0){
}else{
//如果为最后一个参数,忽略,号
if(ta < types.length-1){
System.out.print(",");
}
}
}
//输出参数最后的括号
System.out.println(")");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
1647

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



