Java 在运行时使用反射分析对象 - Java 面向对象编程

本节将进一步查看数据域的实际内容。在编写程序时,如果知道想要查看的域名和类型,查看指定的域是一件很容易的事。而利用反射机制可以查看在编译时还不清楚的对象域。 查看对象域的关键方法是 Field 类中的 get 方法,如下: Employee harry = new Employee("Harry Hacker", 35000, 10, 1, 1989); Class cl = harry.getClass(); Field f = cl.getDeclaredFiled("name"); Object v = f.get(harry); //harry 对象里的 name 域的值,如:”Harry Hacker“ 由于 name 是一个私有域,所以 get 方法将会抛出一个 IllegalAccessException。只有利用 get 方法才能得到可访问域的值。如果一个 Java 程序没有受到安全管理器的控制,就可以覆盖访问控制。如下: f.setAccessible(true); //现在可以调用 f.get(harry) 方法了 setAccessible 方法是 AccessibleObject 类中的一个方法,它是 Field、Method 和 Constructor 类的公共超类,这个特性是为了调试、持久存储和相似机制提供的。 name 域是一个 String,把它作为 Object 返回没有什么问题,但是假定想要查看 salary 域,它属于 double 类型,可以使用 Field 类中的 getDouble 方法,也可以调用 get 方法,反射机制将会自动的将这个域值打包到相应的对象包装器中,这里将打包成 Double。 也可以调用 f.set(obj, value) 将对象的 f 域设置成新值。

面向对象程序设计(简称 OOP)是当今主流的程序设计泛型。Java 是完全面向对象的,面向对象的程序是由对象组成,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。

面向对象将数据放在第一位,然后在考虑操作数据的算法。

类(class)是构造对象的模板和蓝图,由类构造(construct)对象的过程称为创建类的实例(instance)。

封装(encapsulation)将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。对象中的数据称为实例域(instance field),操纵数据的过程称为方法(method)。对于每个特定的类实例(对象),都有一组特定的实例域值。这些值的集合就是这个对象的当前状态(status)。封装的关键在于绝对不能让类中的方法直接访问其它类的实例域,程序仅通过对象的方法与对象数据进行交互。封装可以提高程序的重用性和可靠性。

继承(inheritance)是通过扩展一个类来建立一个新的类,这个扩展后的新类具有所扩展的类的全部属性和方法。

要想使用对象必需首先构造对象,并指定其初始状态,然后对对象应用方法。如下:

Date today = new Date();  
System.out.println(today.toString());  

Date 是 Java 标准库中的一个类,它的对象描述的是一个时间点。通过在构造器前(构造器名和类名相同)加上 new 操作符,构造了一个 Date 对象,并将其赋值给给 today 变量。然后调用 Date 类中的 toString 方法,返回日期的字符串描述,并在控制台打印。


Run