反射机制

所有的技术实现目标都是:重用性

“反”与“正”的操作:

  • 正操作是指:当要使用一个类时,先导入所在的包,然后再实例化对象,依靠对象调用类中的方法。
  • 反操作是指:根据实例化对象推出其类型。

正操作:
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语句。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值