當前位置:生活全書館 >

IT科技

> class java

class java

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

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

CLASS是在網路工程中的一種協議,在java中有兩種物件:例項物件和Class物件。每個類執行時的型別資訊就是用Class物件表示的,它包含了與類有關的資訊,其實例項物件就是通過Class物件來建立的。

那我們如何獲得Class物件?

1、Class.forName(“類的全限定名”)

2、例項物件.getClass()

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

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

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

java class

JDK中,普通的Class.newInstance()方法的定義返回Object,要將該返回型別強制轉換為另一種型別,但是使用泛型的Class<T>,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+ "");        System.out.println("2-----------");        Animal ani1 = creatNew2(Cat.class);        Cat cat1 = (Cat) ani1;        System.out.println(cat1.name + " is " + cat1.type + "");        System.out.println("3-----------");        Object obj = creatNew3(Dog.class);        Dog dog2 = (Dog) obj;        System.out.println(dog1.name + " is " + dog2.type + "");        System.out.println("4-----------");        Object obj2 = creatNew4(Cat.class);        Cat cat2 = (Cat) obj2;        System.out.println(cat2.name + " is " + cat2.type + "");        System.out.println("5-----------");        Object obj3 = creatNew5(new Cat());        Cat cat3 = (Cat) obj3;        System.out.println(cat3.name + " is " + cat3.type + "");    }    /**     * 此方法是一個非泛型類中的泛型方法,引數為Class<T>型別,可以傳入任何類,但是Class<T>將引數在函式內部的型別固定為 T類,使用clazz.newInstance(),返回的型別也為固定的 T 型別。     * 如: 傳入Dog.class, 函式中的 T 固定為Dog.class,函式返回的是Dog型別,不需要強制轉換為Dog型別     * (當然,函式返回型別也可以是Object型別,但是沒必要)     */    public static <T> T creatNew1(Class<T> clazz) throws IllegalAccessException, InstantiationException {        System.out.println(clazz);//列印具體傳入的型別。        return clazz.newInstance();    }    /**     * 此方法引數是Class<? extends Animal>,只能傳入Animal及其子類的型別,函式返回型別只能宣告為Animal或Object型別,     * 如:傳入Cat.class,函式返回一個Animal的子類物件,需將此子類物件強制轉換為具體的子類(即Cat類)。     */    public static Animal creatNew2(Class<? extends Animal> 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";}/** * 這些方法,傳的引數宣告不同,其返回的宣告也必然要隨之不同。 */

標籤: java class
  • 文章版權屬於文章作者所有,轉載請註明 https://shqsg.com/dianzi/zvym64.html