反射基础

反射就是把Java类中的各种成分映射成相应的Java类.
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();
}

}

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值