導航:首頁 > 編程語言 > java獲取class類

java獲取class類

發布時間:2023-05-22 10:35:38

1. java 如何獲取基本類的class

publicstaticObjectgetType(Classc)throwsException{
Fieldf=c.getDeclaredField("TYPE");
Objectobj=f.get(c);
returnobj;
}
publicstaticvoidmain(String[]args)throwsException{
System.out.println(getType(Integer.class));
}

2. java class

java class是什麼,讓我們一起了解一下?

CLASS是在網路工程中的一種協議,在java中有兩種對象:實例對象和Class對象。每個類運行時的類型信息就是用Class對象表示的,它包含了與類有關的信息,其實實例對象就是通過Class對象來創建的。

那我們如何獲得Class對象?

1、Class.forName(「類的全限定名」)

2、實例對象.getClass()

3、類名.class (類字面常量)

實戰操作:如何獲得一個實例的類型類?

Object類中包含一個方法名叫getClass,利用這個方法就可以獲得一個實例的類型類。類型類指的是代表一個類型的類,因為一切皆是對象,類型也不例外,在Java使用類耐滑型類來表示一個類型,所有的類型類都是Class類的實例。getClass()會看到返回Class 。

JDK中,普通的Class.newInstance()方法的定義返回Object,要將該返回類型強制轉換為另一種類型,但是使用泛型的Class ,Class.newInstance()方法具有一個特定的返回類型。

代碼如下: public class Main2 {     public static void main(String[] args) throws InstantiationException, IllegalAccessException {         System.out.println("1-----------");         Dog dog1 = creatNew1(Dog.class);         System.out.println(dog1.name + " is " + dog1.type+ "\n");         System.out.println("2-----------");         Animal ani1 = creatNew2(Cat.class);         Cat cat1 = (Cat) ani1;         System.out.println(cat1.name + " is " + cat1.type + "\n");         System.out.println("3-----------");         Object obj = creatNew3(Dog.class);         Dog dog2 = (Dog) obj;         System.out.println(dog1.name + " is " + dog2.type + "\n");         System.out.println("4-----------");         Object obj2 = creatNew4(Cat.class);         Cat cat2 = (Cat) obj2;         System.out.println(cat2.name + " is " + cat2.type + "\n");         System.out.println("5-----------");         Object obj3 = creatNew5(new Cat());         Cat cat3 = (Cat) obj3;  蔽畝碼       System.out.println(cat3.name + " is 宏哪" + cat3.type + "\n");     }     /**      * 此方法是一個非泛型類中的泛型方法,參數為Class 類型,可以傳入任何類,但是Class 將參數在函數內部的類型固定為 T類,使用clazz.newInstance(),返回的類型也為固定的 T 類型。      * 如: 傳入Dog.class, 函數中的 T 固定為Dog.class,函數返回的是Dog類型,不需要強制轉換為Dog類型      * (當然,函數返回類型也可以是Object類型,但是沒必要)      */     public static   T creatNew1(Class  clazz) throws IllegalAccessException, InstantiationException {         System.out.println(clazz);//列印具體傳入的類型。         return clazz.newInstance();     }     /**      * 此方法參數是Class ,只能傳入Animal及其子類的類型,函數返回類型只能聲明為Animal或Object類型,      * 如:傳入Cat.class,函數返回一個Animal的子類對象,需將此子類對象強制轉換為具體的子類(即Cat類)。      */     public static Animal creatNew2(Class  clazz) throws IllegalAccessException, InstantiationException {         System.out.println(clazz);//列印具體傳入的類型。         return clazz.newInstance();     }     /**      * 此方法參數是Class,可傳入任何類,其返回只能聲明為Object類對象。      * 如:傳入Dog.class, 返回的是Object類型的對象,需強制轉換為Dog類型的對象。      */     public static Object creatNew3(Class clazz) throws IllegalAccessException, InstantiationException {         System.out.println(clazz);//列印具體傳入的類型。         return clazz.newInstance();     }     /**      * 傳入參數Class  和 上一個方法傳入 Class 的區別還不是很清楚,其返回只能聲明為Object類對象。      * 如:Cat.class, 返回的是Object類型的對象,需強制轉換為Cat類型的對象。      */     public static Object creatNew4(Class  clazz) throws IllegalAccessException, InstantiationException {         System.out.println(clazz);//列印具體傳入的類型。         return clazz.newInstance();     }     /**      * 傳入Object類型的對象,返回也聲明為Object類型。      */     public static Object creatNew5(Object object) {         System.out.println(object.getClass());//列印具體傳入的類型。         return object;     } } abstract class Animal {     public String type = "type = animal "; } class Dog extends Animal {     public String name = "name = gou"; } class Cat extends Animal {     public String name = "name = mao"; } /**  * 這些方法,傳的參數聲明不同,其返回的聲明也必然要隨之不同。  */

3. java 如何獲取 泛型的 class

package com.leo.common;
public class Genericity<T> {
public static void main(String[] args) {
Genericity<String> test = new Genericity<>("test1");
System.out.println(test.getGenericityName());
Genericity<Double> test1 = new Genericity<>(new Double(123));
System.out.println(test1.getGenericityName());
}
private T data;
public Genericity(T data) {
this.data = data;
}
public T getData() {
return this.data;
}
public String getGenericityName() {
return data.getClass().getName();
}
}

4. java web怎麼獲取class類的編譯路徑

javaweb中的java文件會在伺服器中生成class文件,比如tomcat目錄下的webapps目錄下,放你的javaweb項目,在項目中有個WEB-INF目錄,裡面有一個classes文件夾,裡面放的都是對源碼進行編譯後生成的.class文件

5. java中如何得到一個數組的class的元素class

1、在Java中,所有的數組都有一個預設的屬性length,用於獲取數組中元素的個數。
2、數組的復制:System.array()。淺拷貝
3、數組的排序:Arrays.sort()。
4、在已排序的數組中查找某個元素:Arrays.binarySearch()。
5、獲取Class的三種方式:
(1)利用對象調用getClass()方法獲取該對象的Class實例;
(2)使用Class類的靜態方法forName(),用類的名字獲取一個Class實例;
(3)運用.class的方式來獲取Class實例,對於基本數據類型的封裝類,還可以採用.TYPE來獲取相對應的基本數據類型的Class實例。

6. java獲取泛型class

很多朋友都想知道java怎麼獲取泛型class?下面侍襲就一起來了解一下吧~
獲取泛型Class的方法
Class類的方法:
public Type getGenericSuperclass()
方法作用:

如果超類是參數化類型,則返回的 Type 對象必須准確反映源代碼中所使用的實際類型參數。如果以前未曾創建表示超類的參數化類型,則創建這個類型。有關參數化老做兄類型創建過程的語義,請參閱 ParameterizedType 聲明胡好。如果此 Class 表示 Object 類、介面、基本類型或 void,則返回 null。如果此對象表示一個數組類,則返回表示 Object 類的 Class 對象。

ParameterizedType類的方法:

Type[] getActualTypeArguments()

方法作用:返回表示此類型實際類型參數的 Type 對象的數組。

注意,在某些情況下,返回的數組為空。如果此類型表示嵌套在參數化類型中的非參數化類型,則會發生這種情況。

二、獲取泛型Class對象

(解析Excel的類代碼較多,這里定義幾個簡單的類記錄)

定義獲取泛型Class對象的工具類

GenericSuperclassUtil
import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public class GenericSuperclassUtil { /* * 獲取泛型類Class對象,不是泛型類則返回null */ public static Class  getActualTypeArgument(Class  clazz) { Class  entitiClass = null; Type genericSuperclass = clazz.getGenericSuperclass(); if (genericSuperclass instanceof ParameterizedType) { Type[] actualTypeArguments = ((ParameterizedType) genericSuperclass) .getActualTypeArguments(); if (actualTypeArguments != null && actualTypeArguments.length > 0) { entitiClass = (Class ) actualTypeArguments[0]; } } return entitiClass; } }
定義BaseService ,用來測試不使用父類時泛型Class的獲取

BaseService
public class BaseService  { public Class  getEntityClass() { return GenericSuperclassUtil.getActualTypeArgument(this.getClass()); } }
測試BaseService.getEntityClass() @Testpublic void testBaseService() { System.out.println(new BaseService ().getEntityClass());// 控制台輸出:null }

7. java 怎麼獲取t的class

1. public Type getGenericSuperclass()
用來返回表示當前Class 所表示的實體(類、介面、基本類型或 void)的直接超類的Type。如果這個直接超類是參數化類型的,則返回的Type對象必須明確反映在源代碼中聲明時使用的類型。比如:

import java.lang.reflect.ParameterizedType;
public class GT1 extends GT2<Integer>{
public static void main(String[] args) {
System.out.println(((ParameterizedType)new GT1().getClass().getGenericSuperclass()));
}
}

則輸出結果即為:
GT2<java.lang.Integer>

如果此Class代表的是Object 類、介面、基本類型或 void,則返回 null。。如果此對象表示一個數組類,則返回表示 Object 類的 Class 對象。

2. public Type[] getGenericInterfaces()
與上面那個方法類似,只不過Java的類可以實現多個介面,所以返回的Type必須用數組來存儲。
以上兩個方法返回的都是Type對象或數組,在我們的這個話題中,Class都是代表的參數化類型,因此可以將Type對象Cast成ParameterizedType對象。而 ParameterizedType對象有一個方法, getActualTypeArguments()。
public Type[] getActualTypeArguments()
用來返回一個Type對象數組,這個數組代表著這個Type聲明中實際使用的類型。接著使用上面的例子:

import java.lang.reflect.ParameterizedType;
public class GT1 extends GT2<Integer>{
public static void main(String[] args) {
System.out.println(((ParameterizedType)new GT1().getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
}
}

8. Java 獲取包所有class

既然是封到包里的,遍歷確實是有點麻煩

思路如下:

  1. 輸入包名

  2. 轉換為資源路徑名,即以『/』替換『.』

  3. 找到ClassLoader,並獲得資源名對於的資源對象

  4. 判斷資源對象是否為jar包內

4.1若否,則使用文件系統進行處理為文件夾,之後遍歷名稱進行類載入。這里直接使用資源路徑名,會是其真實位置,不用關注因部署在tomcat上而產生的路徑變化。

4.2若是,則構造一個jar文件類,使用jar操作類遍歷內容,進行類載入。

實現參考(其實我只是把它的思路總結出來):http://guoliangqi.iteye.com/blog/644876

閱讀全文

與java獲取class類相關的資料

熱點內容
程序員試用期匯報問題協助怎麼寫 瀏覽:127
抖音演算法到底是什麼 瀏覽:126
哪個vlan技術對報文加密 瀏覽:570
單片機定時電路 瀏覽:672
山西平台伺服器雲主機 瀏覽:700
按摩肚臍解壓視頻 瀏覽:989
php55安裝教程 瀏覽:137
雲伺服器怎麼查找本機域名 瀏覽:22
qd123y壓縮機參數 瀏覽:385
程序員媽媽懷孕 瀏覽:490
金普國際編程 瀏覽:537
java什麼是引用類型 瀏覽:944
這是命令嗎txt 瀏覽:314
支付寶android包名 瀏覽:154
eclipsemaven命令 瀏覽:68
24路伺服器配什麼cpu 瀏覽:466
壓縮文件和解壓文件哪個快 瀏覽:675
亞馬遜雲伺服器視頻通話 瀏覽:912
金融知識app哪個好 瀏覽:978
農行理財app收益在哪裡 瀏覽:969