標(biāo)簽(空格分隔): java
參考博客###
用法:##
getClass()
類型:public final Class<? extends Object> getClass()
注意這里的返回類型是Class<? extends Object>對象腰根,而且還是final類型。
由方法類型可以知道拾并,該方法只能由類的實例變量調(diào)用核偿,即用對象調(diào)用
功能:返回該對象的運行時類的Java.lang.Class對象(API上的解釋)
JButton b1 = new JButton("button1");
System.out.println(b1.getClass());
//輸出:
class javax.swing.JButton
.class屬性
當(dāng)你要獲得一個類的Class對象時(作函數(shù)參數(shù)的時候)磨镶,你不能調(diào)用getClass方法,那你只能用類名.class來達到效果
System.out.println(JButton.class);
//輸出:
class javax.swing.JButton
getName方法:(只是用來獲取class對象的名稱兢孝,因為返回值是String類型局劲,所以與前兩個相比沒有太多的實用價值)
類型:public String getName(),返回的是String類型
功能:以String形式返回次Class對象所表示的實體名稱
JButton b1 = new JButton("button1");
System.out.println(b1.getName());
//輸出:
javax.swing.JButton
可以發(fā)現(xiàn)用class屬性和getClass返回的輸出是一樣的冰肴,用getName返回的比前面兩種少了class和一個空格屈藐。
深入?yún)^(qū)別:##
.class其實是在java運行時就加載進去的,可以說是編譯時期就決定好的
getClass()是運行程序時動態(tài)加載的
首先建一個基類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());//加載時類名
}
結(jié)果是
Extendclass
Baseclass
Baseclass
Extendclass
四種獲取Class對象的方法 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對象");
Class userClass = this.getClass() ;
System.out.println(userClass.getName());
System.out.println("===========");
System.out.println("通過子類的實例獲得父類class對象");
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對象");
Class forClass = com.hqh.reflect.UseInfo.class ;
System.out.println(forClass.getName());
System.out.println("===========");
System.out.println("通過類名的字符串獲取class對象");
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;
}
}
結(jié)果:
通過類本身獲得對象
com.hqh.reflect.GetClassTest
===========
通過子類的實例獲得父類對象
com.hqh.reflect.UseInfo
java.lang.Object
===========
通過類名.class獲取對象
com.hqh.reflect.UseInfo
===========
通過類名的字符串獲取對象
com.hqh.reflect.UseInfo
=============
OK