在 java.lang.reflect 包中有三个类 Field, Method 和 Constructor 分别用于描述类的域.方法和构造器. Class 类中的 getFields, getMethods 和 getConstructor 方法将分别返回类提供的 public 域.方法和构造器数组,其中包括超类的公有成员. Class 类中的 getDeclaredFields, getDeclaredMethods 和 getDeclaredConstructor 方法将分别返回类中声明的…
Employee[] a = new Employee[100]; // ... // array is full a = Arrays.copyOf(a, 2 * a.length); 如何编写这样一个通用的 copyOf 方法呢? // 不够好的实现 public static Object[] badCopyOf(Object[] a, int newLength){ Object[] newArray = new Object[newLength]; System.arraycopy(a…
在编写程序时,如果知道想要查看的域名和类型,查看指定的域是一个很容易的事,而利用反射机制可以查看在编译时还不清楚的对象域. java Employee tank = new Employee("t-man", 35000, 6, 4, 1989); Class cl = tank.getClass(); Field f = cl.getDeclaredField("name"); f.setAccessible(true); // 使得可以访问似有域 Object…
能够分析类能力的程序称为反射(reflection). 反射库(reflection library)提供了一个非常丰富且精心设计的工具集,以便编写能够动态操纵 Java 代码的程序. 反射机制可以用来: 利用反射分析类 在运行时使用反射分析对象 使用反射编写泛型数组代码 调用任意方法(利用 Method 对象,这个对象很像 C++ 中的函数指针) Class 类 在程序运行期间,Java Runtime 为每个类型管理一个 Class 类型的对象. Object 类中的 getClass()…
hashCode 方法 散列码(hash code)是由对象导出的一个整形值(可以是负数).其是没有规律的,如果x与y是两个不同的对象,则x.hashCode()与y.hashCode()基本上不会相同. hashCode 方法定义在 Object 类中,因此每个对象都有一个默认的散列码方法,其返回结果是对象的存储地址. 一个例子: ```java String string1 = "hiwangzi"; StringBuilder stringBuilder1 = new Strin…
equals 方法示例 // 代码来自<Java核心技术 卷I>P167 // 父类 public class Employee{ ... public boolean equals(Object otherObject){ // a quick test to see if the objects are identical if(this == otherObject) return true; // must return false if the explicit parameter…
继承 一个对象变量可以指示多种实际类型的现象被称为多态(polymorphism). 在运行时能够自动地选择调用哪个方法的现象称为动态绑定(dynamic binding). 如果是private方法.static方法.final方法或者构造器,编译器可以准确知道应该调用哪个方法,此种调用方式称为静态绑定(static binding). 子类不能覆盖父类中final修饰的方法(final类中所有方法自动地成为final方法,并且final类不能被继承). 在父类转子类的类型转换前,可以先借助…
泛型数组列表 ArrayList 是一个采用类型参数(type parameter)的泛型类(generic class). java ArrayList<Employee> staff = new ArrayList<Employee>(); ArrayList<Employee> staff = new ArrayList<>(); // JavaSE 7 之后可以简写 JavaSE 5.0 以前的版本没有提供泛型类,而是有一个 ArrayList 类,…
「白皮书」关键术语 简单性(C++--) 面向对象 分布式 健壮性 安全性 体系结构中立 可移植性 解释型 高性能 多线程 动态性 Java 发展历程 SUN公司--Stanford University Network 主设计者:James Gosling 1996年初 - 发布 Java 1.0 Java 2, JDK 1.2 有了很大的改变 - 更加接近"一次编写,随处运行"的承诺 J2SE 5.0 得到了进一步改进 - 泛型.(以下几项受 C# 启发) foreach.自动装箱…
基本数据类型 1. 整型 注意:Java 没有任何无符号(unsigned)形式的 int.long.short 或 byte 类型. 不同进制的表示形式: 十六进制数值有一个前缀0x或0X(如0xCAFE). 八进制有一个前缀0,例如,010对应八进制中的8.很显然,八进制表示法比较容易混淆,所以建议最好不要使用八进制常数. 从Java 7开始,加上前缀0b或0B就可以写二进制数.例如,0b1001就是9. 另外,同样是从Java 7开始,还可以为数字字面量加下划线,如用(1_000_000或…