学习Java(76)_什么是反射

摘要:
1、什么是反射。
2、运用 Class 类,进行对象实例化的三种方式。
什么是反射?
一般来说,先有,再有对象。所谓的“反”就是指可以利用对象找到对象的出处,在Object类中有一个方法,取的 class 对象:public final Class getClass();
调用getClass()方法后输出了类的完整名称,等于是找到了对象的出处。
Class类对象实例化
java.lang.Class 是一个类,这个类是反射操作的源头,即:所有的反射都要从此类开始进行,这个类有三种实例化方式:
第一种:调用 Object 类中的 getClass(); (不常用)
第二种:使用“类.class”取的。(很常用)
范例:
import java.util.Date;
class TestClass
{
	public static void main( String[] args )
	{
		Date date = new Date();
		System.out.println( date.getClass() );
		
		Class<?> cla1 = Date.class;
		System.out.println( cla1 );
		
		Class<?> cla2 = TestClass.class;
		System.out.println( cla2 );
	}
}
/*
	在JDK1.8.0_91中运行的结果是:
	============================
	E:\textjava>java TestClass
	class java.util.Date
	class java.util.Date
	class TestClass
	============================
	总结:
		
*/
第一种方法需要实例化对象,而第二种方法不用实例化对象就可以得到类名。
第三种:调用 Class 类提供的一个方法:实例化 Class 类对象(使用最多的方法)
public static Class forName( String className ) throws ClassNotFoundException;
class TestClass
{
	public static void main( String[] args )
	{
		try
		{
			Class<?> cla = Class.forName( "java.util.Date" );
			System.out.println( cla );
		}
		catch( ClassNotFoundException e )
		{
			e.printStackTrace();
		}
		
	}
}
/*
	在JDK1.8.0_91中运行的结果是:
	============================
	E:\textjava>java TestClass
	class java.util.Date
	============================
	总结:
		第三种方法明显区别于第二种方法的地方在于,
		不使用 import 语句导入一个明确的类,
		而类名称是采用字符串的形式进行描述的。
*/


小艾的博客 http://www.aixinyan.me/