所有的技术实现目标都是:重用性
“反”与“正”的操作:
- 正操作是指:当要使用一个类时,先导入所在的包,然后再实例化对象,依靠对象调用类中的方法。
- 反操作是指:根据实例化对象推出其类型。
正操作:
1.引入包
2.实例化对象
3.调用其方法
反操作:
Object类中提供的方法:获取class对象信息:public final Class<?> getClass();
范例:观察class对象的使用
public class ClassTest {
public static void main(String[] args) {
System.out.println(System.in.getClass());
}
}
getClass()可以帮助开发者找到对象的根源。
反射中的核心操作都是通过Class类对象展开的。
Class类是根源,那么要获取他的实例化对象可以采用三种方式。
java.lang.Class类的定义:
public final class Class<T> extends Object
implements Serializable, GenericDeclaration, Type, AnnotatedElement, TypeDescriptor.OfField<Class<?>>, Constable
jdk1.5开始,Class使用了泛型标记,主要为了避免向下转型
【Object类支持】Object对象可以通过实例化对象获取Class对象:public final Class<?> getClass();
public class ClassTest {
public static void main(String[] args) {
String str=new String();
Class<? extends String> cla = str.getClass();
System.out.println(cla);//获取类的完整名称
System.out.println(cla.getName());//直接类
}
}
【JVM直接支持】采用“类.class”实例化
使用此类模式,必须导入对应的开发包
public class ClassTest {
public static void main(String[] args) {
Class<? extends String> cla = String.class;
System.out.println(cla);//获取类的完整名称
System.out.println(cla.getName());//直接类
}
}
【Class】Class中提供有一个static方法:
- 加载类:
public static Class<?> forName(String classname) throws ClassNotFoundException
public class ClassTest {
public static void main(String[] args) throws ClassNotFoundException {
Class<?> cla = Class.forName("wzr.study09.io.case3.InputUtil");
System.out.println(cla);//获取类的完整名称
System.out.println(cla.getName());//直接类
}
}
可以直接采用字符串的方式定义要使用的类型,程序中不需要编写任何import语句。