8.10 Class类
Class类的实例可以帮助程序创建其他类的实例或取得其他类的对象内部信息
8.10.1 使用Class实例化一个对象
(1)使用Class的类方法可以得到一个和某类(参数 className 指定的类)相关的Class对象
public static Class forName(String className)throw ClassNotFoundException
上述方法返回一个和参数
className指定的类相关的Class对象。如果类在某个包中,className必须要带包名(例子:className=“Java.util.Date”)
(2)步骤(1)中获得的Class对象调用
public Object newInstance()throwClassNotFoundException,IllegalAccessException
就可以得到一个className类对象
/*
* 使用Example8_22_Rect类以及java.util包中Date类的对象
*/
public class Example8_22 {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Class class1 = Class.forName("Example8_22_Rect");
Example8_22_Rect rect = (Example8_22_Rect) class1.newInstance();
rect.width = 100;
rect.height = 100;
System.out.println("面积:" + rect.getArea());
class1 = Class.forName("java.util.Date");
Date date = (Date) class1.newInstance();
System.out.println(date.toString());
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
8.10.2 获取类的有关信息
Class对象经常调用的方法:
(1)String getName():返回类的名字
(2)Constructor[ ] getDeclaredConstructors():返回类的全部构造方法
(3)Field[ ] getDeclaredFields() :返回类的全部成员变量
(4)Method [ ] getDeclaredMethods() : 返回类的全部方法
/*
* 使用相应的Class对象列出了Java.util.Data全部成员变量和方法的名字
*/
public class Example8_23 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Date date=new Date();
Class class1=date.getClass();
String cString=class1.getName();
Constructor[] constructors=class1.getDeclaredConstructors();
Field[] fields =class1.getDeclaredFields();
Method [] methods=class1.getDeclaredMethods();
System.out.println("类的名字:"+cString);
System.out.println("类中有如下的成员变量:");
for (int i = 0; i < fields.length; i++) {
System.out.println(fields[i].toString());
}
System.out.println("类中有如下的方法:");
for (int i = 0; i < methods.length; i++) {
System.out.println(methods[i].toString());
}
System.out.println("类中有如下的构造方法:");
for (int i = 0; i < constructors.length; i++) {
System.out.println(constructors[i].toString());
}
}
}
/*
类的名字:java.util.Date
类中有如下的成员变量:
private static final sun.util.calendar.BaseCalendar java.util.Date.gcal
private static sun.util.calendar.BaseCalendar java.util.Date.jcal
private transient long java.util.Date.fastTime
private transient sun.util.calendar.BaseCalendar$Date java.util.Date.cdate
private static int java.util.Date.defaultCenturyStart
private static final long java.util.Date.serialVersionUID
private static final java.lang.String[] java.util.Date.wtb
private static final int[] java.util.Date.ttb
类中有如下的方法:
public boolean java.util.Date.equals(java.lang.Object)
public java.lang.String java.util.Date.toString()
public int java.util.Date.hashCode()
public java.lang.Object java.util.Date.clone()
public int java.util.Date.compareTo(java.util.Date)
public int java.util.Date.compareTo(java.lang.Object)
private void java.util.Date.readObject(java.io.ObjectInputStream) throws java.io.IOException,java.lang.ClassNotFoundException
private void java.util.Date.writeObject(java.io.ObjectOutputStream) throws java.io.IOException
private final sun.util.calendar.BaseCalendar$Date java.util.Date.normalize(sun.util.calendar.BaseCalendar$Date)
private final sun.util.calendar.BaseCalendar$Date java.util.Date.normalize()
public static long java.util.Date.parse(java.lang.String)
public boolean java.util.Date.before(java.util.Date)
public boolean java.util.Date.after(java.util.Date)
public void java.util.Date.setTime(long)
public long java.util.Date.getTime()
public static java.util.Date java.util.Date.from(java.time.Instant)
public int java.util.Date.getDate()
public static long java.util.Date.UTC(int,int,int,int,int,int)
public int java.util.Date.getYear()
public void java.util.Date.setYear(int)
public int java.util.Date.getMonth()
public void java.util.Date.setMonth(int)
public void java.util.Date.setDate(int)
public int java.util.Date.getDay()
public int java.util.Date.getHours()
public void java.util.Date.setHours(int)
public int java.util.Date.getMinutes()
public void java.util.Date.setMinutes(int)
public int java.util.Date.getSeconds()
public void java.util.Date.setSeconds(int)
private final long java.util.Date.getTimeImpl()
static final long java.util.Date.getMillisOf(java.util.Date)
private static final java.lang.StringBuilder java.util.Date.convertToAbbr(java.lang.StringBuilder,java.lang.String)
public java.lang.String java.util.Date.toLocaleString()
public java.lang.String java.util.Date.toGMTString()
public int java.util.Date.getTimezoneOffset()
private final sun.util.calendar.BaseCalendar$Date java.util.Date.getCalendarDate()
private static final sun.util.calendar.BaseCalendar java.util.Date.getCalendarSystem(int)
private static final sun.util.calendar.BaseCalendar java.util.Date.getCalendarSystem(long)
private static final sun.util.calendar.BaseCalendar java.util.Date.getCalendarSystem(sun.util.calendar.BaseCalendar$Date)
private static final synchronized sun.util.calendar.BaseCalendar java.util.Date.getJulianCalendar()
public java.time.Instant java.util.Date.toInstant()
类中有如下的构造方法:
public java.util.Date(java.lang.String)
public java.util.Date(int,int,int,int,int,int)
public java.util.Date(int,int,int,int,int)
public java.util.Date()
public java.util.Date(long)
public java.util.Date(int,int,int)
*/