Java语言中,万事万物皆对象,但是静态成员、基本的数据类型(基本的数据类型也有自己的包装类)等并不是对象,因为静态的变量和函数属于类,我们可以通过 类.静态变量 / 类.静态函数等方式调用。
public class Test {
private static String name = "test";
private static String name() {
return "这是一个测试类";
}
public static void main(String[] args) {
System.out.println(Test.name());
System.out.println(Test.name);
}
}
输出结果:这是一个测试类
test
因此,类也是对象,任何一个类都是java.lang.Class的实例对象,我们可以通过三种方式来表达本文中Class的实例对象Test。
1、 每一个类都有一个隐含的静态成员变量class。
Class class1=Test.class;
2、通过Test 类的对象(Test test = new Tset(); )test,调用getClass() 方法,既:
Class class2=test.getClass();
在这里class1和class2是Class的实例对象,Test也是Class的实例对象,因此class1和class2表示了Test类的类类型(类类型指的是:类本身就是Class的一个实例对象)。
3、通过动态加载类Class.forName(""),注:""里为类的全称,包含包名。
class3=Class.forName("xx.xx.Test")
我们可以通过newInstance()方法创建Tset 的实例对象,但是需要做强制转换:
Test test2=(Test)class3.newInstance();
代码如下:
public class Test {
public static void main(String[] args) {
//Test的实例对象表示
Test test = new Test();
//1、通过Test隐藏的静态成员变量class(每一个类都有一个隐藏的静态成员变量class)
Class class1 = Test.class;
//2、通过Test类的实例对象test,调用它的getClass()方法
Class class2 = test.getClass();
//3、通过动态加载类forName()方法
Class class3 = null;
try {
class3 = Class.forName("test.staticTest.Test");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
if (class1 == class2) {
System.out.println("class1与class2比较结果:"+true);
}
if (class2 == class3) {
System.out.println("class2与class3比较结果:"+true);
}
}
}
输出结果:
class1与class2比较结果:true
class2与class3比较结果:true
声明一下此文是本人的第一篇博客,有解释不当的地方希望大神们多多指教。。。