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();
属性必须都是私有的。
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();