其最重要的一个作用就是可以动态地创建类的对象,获取方法如下
public static 类> forName(String className)
返回与具有给定字符串名称的类或接口关联的类对象。
public class test03{
public static void main(String args[]){
/*Class.forName:
* 1、静态方法
* 2、方法的参数是String类型的
* 3、字符串必须是一个完整的类名,即必须带有包名*/
Class c1 = null;
try {
c1 = Class.forName("java.lang.String");
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
System.out.println(c1);//c1代表String.class文件,或者说c1代表String类型
//class java.lang.String
}
}
import java.util.Date;
public class test03{
public static void main(String args[]){
Class c1 = null;
Class c2 = null;
try {
c1 = Class.forName("java.lang.String");
c2 = Class.forName("java.util.Date");
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
System.out.println(c1);
//第二种方式:Java中任何一个对象都有一个方法:get.class()
String s = "abc";
Class x = s.getClass(); //x代表String.class文件,或者说x代表String类型
System.out.println(x==c1);//true(==比较的是内存地址,说明两个的内存地址是一样的)
Date date = new Date();
Class y = date.getClass();
System.out.println(y==c2);//true
//(y和c2两个变量中保存的内存地址都是一样的,都指向方法区中的字节码文件)
}
}
Class c= 任何类型.class;
import java.util.Date;
public class test03{
public static void main(String args[]){
Class c1 = null;
Class c2 = null;
try {
c1 = Class.forName("java.lang.String");
c2 = Class.forName("java.util.Date");
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
System.out.println(c1);//c1代表String.class文件,或者说c1代表String类型
//输出:class java.lang.String
//第二种方式:Java中任何一个对象都有一个方法:get.class()
String s = "abc";
Class x = s.getClass(); //x代表String.class文件,或者说x代表String类型
System.out.println(x==c1);//true(==比较的是内存地址,说明两个的内存地址是一样的)
Date date = new Date();
Class y = date.getClass();
System.out.println(y==c2);//true
//第三种方式:Java语言中 任何一种数据类型(包括基本数据类型),都有一个.Class属性
Class z = String.class;
Class w = int.class;
System.out.println(z==x);//true
}
}
Java创建对象的方式总共有以下几种:
1)通过new语句实例化一个对象
2)通过反射机制创建对象
3)通过clone()方法创建对象
4)通过反序列化的方式创建对象
获取到对象 进而可以获取 方法, 属性,。。。。。