1、java
getClass方法:
類型:public final Class<? extends Object> getClass()
功能:返回該對象的運行時類的java.lang.Class對象(API上的解釋)
有方法類型能夠知道,該方法只能由類的實例變量調用
例子:數據庫
[java] view plaincopyeclipse
JButton b1 = new JButton("button1"); 函數
System.out.println(b1.getClass()); 工具
輸出:
class javax.swing.JButtonthis
class屬性
當你要得到一個類的Class對象時(做函數參數的時候),你不能調用getClass方法,那你只能用類名.class來達到效果
例子:spa
[java] view plaincopy.net
System.out.println(JButton.class); orm
輸出:
class javax.swing.JButton對象
getName方法:
類型:public String getName()
功能:以String形式返回次Class對象所表示的實體名稱
例子:
[java] view plaincopy
JButton b1 = new JButton("button1");
System.out.println(b1.getName());
輸出:
javax.swing.JButton
能夠發現用class屬性和getClass返回的輸出是同樣的,用getName返回的比前面兩種少了class和一個空格。
.eclipse工具 能夠按"."而後立刻提示不少方法 供你選擇
那他如何知道"."了之後有哪些方法?
他用的語法就是getClass().getMethods();
2、
.class實際上是在java運行時就加載進去的
getClass()是運行程序時動態加載的
下面以例子說明:
首先建一個基類Baseclass
package classyongfa;
public class Baseclass {
private String height;
public String getHeight()
{
return height;
}
public void setHeight(String height)
{
this .height=height;
}
下面是繼承Baseclass類Extendclass
package classyongfa;
public class Extendclass extends Baseclass {
private String width;
public String getWidth()
{
return width;
}
public void setWidth(String width)
{
this .width=width;
}
public static void main(String[] arg0)
{
Baseclass baseclass1=new Extendclass();
Baseclass baseclass2=new Baseclass();
System.out.println(baseclass1.getClass().getSimpleName());//實際運行的是繼承類Extendclass
System.out.println(baseclass2.getClass().getSimpleName());//實際運行的是Baseclass
System.out.println(Baseclass.class .getSimpleName());//加載時類名
System.out.println(Extendclass.class .getSimpleName());//加載時類名
}
結果是
Extendclass
Baseclass
Baseclass
Extendclass
3、 四種獲取Class對象的方法 Java反射機制
下面以一個具體的實例來講明。此實例來自《精通Hibernate 3.0 Java數據庫持久層開發實踐》一書。
先在com.hqh.reflect下建一個文件UseInfojava
package com.hqh.reflect;
public class UseInfo {
private Integer id;
private String userName;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package com.hqh.reflect;
public class GetClassTest {
public static void main(String[] args) {
GetClassTest test = new GetClassTest();
if(test.ClassCheck())
System.out.println("OK");
}
public boolean ClassCheck() {
try {
System.out.println("經過類自己得到對象");
Class userClass = this.getClass() ;
System.out.println(userClass.getName());
System.out.println("===========");
System.out.println("經過子類的實例得到父類對象");
UseInfo useInfo = new UseInfo();
userClass = useInfo.getClass();
System.out.println(userClass.getName());
Class subUserClass = userClass.getSuperclass() ;
System.out.println(subUserClass.getName());
System.out.println("===========");
System.out.println("經過類名.class獲取對象");
Class forClass = com.hqh.reflect.UseInfo.class ;
System.out.println(forClass.getName());
System.out.println("===========");
System.out.println("經過類名的字符串獲取對象");
Class forName = Class.forName("com.hqh.reflect.UseInfo") ;
System.out.println(forName.getName());
System.out.println("=============");
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}
結果:
經過類自己得到對象com.hqh.reflect.GetClassTest===========經過子類的實例得到父類對象com.hqh.reflect.UseInfojava.lang.Object===========經過類名.class獲取對象com.hqh.reflect.UseInfo===========經過類名的字符串獲取對象com.hqh.reflect.UseInfo=============OK