Java运行时系统一直对所有的对象进行所谓的运行时类型识别。这项信息记录了每个对象所属的类。虚拟机通常使用运行时类型信息选择正确的方法去执行。
一个Class描述一个类的,类型,属性,方法名等信息。
使用静态方法forname来取得字符串对应的Class对象。
系统启动时包含 main 方法的类会被加载,它会加载所有它需要的类。每个被加载的类又都要加载它所需要的类,以些类推。对一个大型应用程序来说,这会花费很长的时间,用户也会因此觉得不耐烦。使用下面的技巧,你可以给用户造成快速启动的假相。不过,要确保main 方法所在的类淌有显式引用其他类。先显示一个启动画面,然后调用Class.forName手工强制加载其它类。
获到Class的三个方法
1. 运行时对象调用getClass方法。
2. Class.forName(“”);方法,会加载类,并返回Class对象
3. 类的.class属性。
Class描述的是一种类型,需这类型未必是类。如int.class
虚拟机为每种类型管理独一无二的Class对象。因此可以使用==操作符来比较类对象。
类包括一无参的构造方法时,可以使用e.getClass().new Instance();方法得到一个新实例对象。
代码实例:
package
com.jianshe;
/**
*
下面演示了得到Class对象的三种方法。
*
1.
通过对象得到Class对象
*
2.
通过字符串得到Class对象
*
3.
通过类型得到Class对象
*
4.
从一个字符串创建新对象
*
总结:当得到Class对象后就可以清楚的知道一个类型具有方法,属性等相关信息。
*
并具可以从一个字符串创建新的对象。这里只能创建提供默认构造函数的对象,对于通过名称创建对象时传递参数,
*
只能使用Constructor类的newInstance方法。
*
@author
jiansheliu
*/
public
class
Test
{
public
static
void
main(String[]
args)
{
//1.
通过对象得到Class
Integer
i
=
Integer.valueOf(9);
System.
out
.println(i.getClass().getName());;
//2.
通过字符串得到Class
try
{
Class
name
=
Class.forName(
"java.lang.Integer"
);
System.
out
.println(name.getName());
}
catch
(ClassNotFoundException
e)
{
e.printStackTrace();
}
//3.
通过类的属性得到Clss
System.
out
.println(Integer.
class
.getName());
//4.
从字条串创建新对象,使用newInstance对象只能创建
try
{
Class
name
=
Class.forName(
"java.util.ArrayList"
);
java.util.ArrayList
list
=
(java.util.ArrayList)name.newInstance();
list.add(
"sss"
);
System.
out
.println(list.size());
}
catch
(ClassNotFoundException
e)
{
e.printStackTrace();
}
catch
(InstantiationException
e)
{
e.printStackTrace();
}
catch
(IllegalAccessException
e)
{
e.printStackTrace();
}
}
}