1.使用类字面常量:使用类字面常量不仅简单,还安全,因为它在编译时就会受到检查,不需要置于try语句块中,它根除了对forName方法的引用。类字面常量使用Class.forName时会自动的初始化。可以应用于普通的类,也可以应用于接口、数组以及基本数据类型。
class A {
static final int a = 12;
static {
System.out.println("A");
}
}
class A2 {
static int a2 = 123;
static {
System.out.println("A2");
}
}
class A3 {
static int a3 = 23;
static {
System.out.println("A3");
}
}
public class Test9 {
public static void main(String[] args) {
Class c = A.class;
System.out.println("创建A之后");
System.out.println(A.a);
System.out.println(A2.a2);
try {
Class c1 = Class.forName("SixtySix.A3");
} catch (ClassNotFoundException e) {
System.out.println("找不到A3");
System.exit(1);
}
System.out.println("创建A3之后");
System.out.println(A3.a3);
}
}
2.instanceof与Class的等价性:instanceOf和isInstance()的结果一样,比较的时候都考虑了继承关系。equals()和==比较是否为同一个类,没有考虑继承关系。
class Letter {
}
class A1 extends Letter {
}
public class Test10 {
public static void test(Object o) {
System.out.println(o.getClass());
System.out.println((o instanceof Letter));
System.out.println(o instanceof A1);
System.out.println(Letter.class.isInstance(o));
System.out.println(A1.class.isInstance(o));
System.out.println(o.getClass() == Letter.class);
System.out.println(o.getClass() == A1.class);
System.out.println(o.getClass().equals(Letter.class));
System.out.println(o.getClass().equals(A1.class));
}
public static void main(String[] args) {
test(new Letter());
test(new A1());
}
}
3.反射:运行时的类信息:在编译时,编译器必须知道所要通过RTTI来处理的类。反射的功能:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。 在用反射做事情之前必须先加载那个类的Class对象。
class Person {
private String name = "Tom";
public int age = 18;
public Person() {
}
private void say() {
System.out.println("say()");
}
public void work() {
System.out.println("work()");
}
}
public class Test11 {
public static void main(String[] args) {
Class c = Person.class;
String className = c.getName();
System.out.println(className);
Field[] f = c.getDeclaredFields();
for (Field field : f) {
System.out.println(field.getName());
}
Method[] m = c.getDeclaredMethods();
for (Method method : m) {
System.out.println(method.getName());
}
}
}
14万+

被折叠的 条评论
为什么被折叠?



