1. 程式人生 > >Java學習筆記17:Java中的getClass()方法

Java學習筆記17:Java中的getClass()方法

Getclass():
返回此 Object 的執行時類。用的是誰的建構函式,返回的就是誰的型別。
參考:

1.getClass()方法 和 class()方法
https://blog.csdn.net/qq_36761831/article/details/80552485

一般情況下,getclass()方法和class()方法是等價的,都可以獲得一個型別名。

兩者最直接的區別就是,getClass()是一個類的例項所具備的方法,而class()方法是一個類的方法。
另外getClass()是在執行時才確定的,而class()方法是在編譯時就確定了。

getClass() 方法是 Object 類定義的方法,它返回物件執行時的 Class 例項,然後使用此例項呼叫 getName() 方法可以獲得類的名稱。

2.Java中的getClass()方法
https://blog.csdn.net/liu16659/article/details/79494201

例項:
當使用getClass()方法的物件是匿名內部類的物件時:

package create;

abstract class People{
	public void eat(String food){}
}

public class Test1 {
	public static void main(String[] args) {
		People p=new People(){
			public void eat(String food){
				System.out.println("I'm eating "+food);
			}
		};
		p.eat("feet");
		p.getClass();
		System.out.println(p.getClass());
		p.getClass().getCanonicalName();
		System.out.println(p.getClass().getCanonicalName());
	}
}

結果如下:

I'm eating feet
class create.Test1$1
null

java的getClass()函式
Java反射學習

所謂反射,可以理解為在執行時期獲取物件型別資訊的操作。傳統的程式設計方法要求程式設計師在編譯階段決定使用的型別,但是在反射的幫助下,程式設計人員可以動態獲取這些資訊,從而編寫更加具有可移植性的程式碼。嚴格地說,反射並非程式語言的特性,因為在任何一種語言都可以實現反射機制,但是如果程式語言本身支援反射,那麼反射的實現就會方便很多。

1,獲得型別類

我們知道在Java中一切都是物件,我們一般所使用的物件都直接或間接繼承自Object類。Object類中包含一個方法名叫getClass,利用這個方法就可以獲得一個例項的型別類。型別類指的是代表一個型別的類,因為一切皆是物件,型別也不例外,在Java使用型別類來表示一個型別。所有的型別類都是Class類的例項。例如,有如下一段程式碼:

A a = new A();

if(a.getClass()==A.class)

System.out.println(“equal”);

else System.out.println(“unequal”);

結果就是打印出 “equal”。

可以看到,物件a是A的一個例項,A某一個類,在if語句中使用a.getClass()返回的結果正是A的型別類,在Java中表示一個特定型別的型別類可以用“型別.class”的方式獲得,因為a.getClass()獲得是A的型別類,也就是A.class,因此上面的程式碼執行的結果就是打印出 “equal”。特別注意的是,型別類是一一對應的,父類的型別類和子類的型別類是不同的,因此,假設A是B的子類,那麼如下的程式碼將得到 “unequal”的輸出:

A a = new A();

if(a.getClass()==B.class)

System.out.println(“equal”);

else System.out.println(“unequal”);

因此,如果你知道一個例項,那麼你可以通過例項的“getClass()”方法獲得該物件的型別類,如果你知道一個型別,那麼你可以使用“.class”的方法獲得該型別的型別類。

2,獲得型別的資訊

在獲得型別類之後,你就可以呼叫其中的一些方法獲得型別的資訊了,主要的方法有:

getName():String:獲得該型別的全稱名稱。

getSuperClass():Class:獲得該型別的直接父類,如果該型別沒有直接父類,那麼返回null。

getInterfaces():Class[]:獲得該型別實現的所有介面。

isArray():boolean:判斷該型別是否是陣列。

isEnum():boolean:判斷該型別是否是列舉型別。

isInterface():boolean:判斷該型別是否是介面。

isPrimitive():boolean:判斷該型別是否是基本型別,即是否是int,boolean,double等等。

isAssignableFrom(Class cls):boolean:判斷這個型別是否是型別cls的父(祖先)類或父(祖先)介面。

getComponentType():Class:如果該型別是一個數組,那麼返回該陣列的元件型別。

此外還可以進行型別轉換這類的操作,主要方法有:

asSubclass(Class clazz):Class:將這個型別

轉載https://www.cnblogs.com/lianghui66/archive/2012/12/03/2799134.html