Class是java.lang包中的类,该类的实例可以帮助程序创建其他类的实例或者取得其他类的对象的内部信息。
参考代码如下所示:
package pack07; import java.util.Date; class Rect{ double width, height, area; public double getArea() { area = width * height; return area; } } public class Test11 { public static void main(String[] args) { // TODO Auto-generated method stub try{ Class cs = Class.forName("pack07.Rect"); Rect rect = (Rect)cs.newInstance();//Rect必须有无参构造方法 rect.width = 100; rect.height = 200; System.out.println("rect的面积:" + rect.getArea()); cs = Class.forName("java.util.Date"); Date date = (Date)cs.newInstance(); System.out.println(date.toString()); } catch(Exception e) { System.out.println(e.toString()); } } }
运行结果如下所示:
获取类的相关信息
当一个类被加载且创建对象是,和该类相关的一个类型为Class的对象就会自动创建,任何对象调用getClass()方法都可以获取和该对象相关的一个Class对象,这个Class对象调用如下的方法可以获取对象的有关信息。
String getName()返回类的名字
Constructor[] getDeclaredConstructors()返回类的全部构造方法
Field[] field getDeclaredFields()返回类的全部成员变量
Method[] getDeclaredMethods()
代码展示如下所示:
import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Date; public class Test12 { public static void main(String[] args) { // TODO Auto-generated method stub Date date = new Date(); Class cs = date.getClass(); String className = cs.getName(); Constructor[] con = cs.getDeclaredConstructors(); Field[] field = cs.getDeclaredFields(); Method[] method = cs.getDeclaredMethods(); System.out.println("类的名字:" + className); System.out.println("类中有如下的成员变量:"); for(int i = 0; i < field.length; i++) { System.out.println(field[i].toString()); } System.out.println("类中有如下的方法:"); for(int i = 0; i < method.length; i++) { System.out.println(method[i].toString()); } System.out.println("类中有如下的构造方法"); for(int i = 0; i < con.length; i++) { System.out.println(con[i].toString()); } } }
运行结果如下所示: