反射

JavaBean 必须包含一个无参数的public构造方法。
属性必须都是私有的。
JavaBean必须包含符合命名规范的get和set方法,以便访问属性。
JavaBean应该是可序列化(serializable)的。




反射:在编译期间,并不清楚应该加载那个类。在运行期间在决定应该对那个类进行加载。通过反射,我们可以对类进行加载、探知、自审。


-句话:运行时探究和使用编译时未知的类。










public class ManTest {


/**
* @param args
*/
public static void main(String[] args) {
Test t =  new Test(20, "张三");
System.out.println(t.age+"    "+t.name);
t.eat();

Test t2 =  new Test(30, "李四");
System.out.println(t2.age+"    "+t2.name);
t2.eat();
System.out.println(t==t2);
//得到t和t2的类模板对象 通过对象.getClass()得到Class对象
Class c1 = t.getClass();
Class c2 = t2.getClass();

System.out.println(c1==c2);

//通过类名.class方式得到类模板
Class c3 = Test.class;q
System.out.println(c1==c3);

//通过Class.forName(类的全路径(包名+类名));
try {
Class c4 = Class.forName("Test");
System.out.println(c1 == c4);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


//得到当前类模板中所有公有的属性列表,包括父类继承的公有属性
//Field[] fs = c1.getFields();
//得到当前类模板中所有的属性列表,包括私有属性。只能打印当前类的所有属性,不能打印父类继承的属性。
Field[] fs = c1.getDeclaredFields();
for (Field f : fs) {
//打印当前属性的名字
System.out.println(f.getName());
}

//得到当前类模板中公有方法列表,包括父类的公有方法
//Method[] methods = c1.getMethods();
//得到当前类模板中所有方法列表。包括私有,但不包括父类
Method[] methods = c1.getDeclaredMethods();
for (Method m : methods) {
System.out.println(m);
}
}


}






构造方法的作用:


1、如果该类没有加载,则加载类。
2、为对象在堆中分配空间。
3、初始化成员变量。
4、返回对象的引用。




//类加载时会将静态块,静态方法,静态变量读取在内存中
Class c = Class.forName("com.lovo.txt.Student");
//调用加载类中的无参构造方法产生对象。作用等同于new
Object obj =  c.newInstance();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值