日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

java中class什么意思?

發(fā)布時(shí)間:2023/12/15 综合教程 22 生活家
生活随笔 收集整理的這篇文章主要介紹了 java中class什么意思? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

class是一個(gè)類,存在于java.lang包中,它的構(gòu)造函數(shù)是私有的,由JVM(類加載器)創(chuàng)建Class對象,我們可以通過getClass()方法獲取到Class對象。

    /*
     * 私有構(gòu)造函數(shù),使得只有jvm可以創(chuàng)建該類的對象,這個(gè)私有構(gòu)造函數(shù)還可以防止通過默認(rèn)構(gòu)造函數(shù)創(chuàng)建類對象
     */
    private Class(ClassLoader loader) {
        // 初始化final變量ClassLoader
        classLoader = loader;
    }

登錄后復(fù)制

Class 類是在Java語言中定義一個(gè)特定類的實(shí)現(xiàn)。一個(gè)類的定義包含成員變量,成員方法,還有這個(gè)類實(shí)現(xiàn)的接口,以及這個(gè)類的父類。Class類的對象用于表示當(dāng)前運(yùn)行的 Java 應(yīng)用程序中的類和接口。 比如:每個(gè)數(shù)組均屬于一個(gè) Class 類對象,所有具有相同元素類型和維數(shù)的數(shù)組共享一個(gè)Class 對象。基本的 Java 類型(boolean, byte, char, short,int, long, float 和 double) 和 void 類型也可表示為 Class 對象。

Class對象,通過它我們可以拿到創(chuàng)建的類的屬性,方法等。

Class類的作用

(1)獲取類中屬性的類型

(2)獲取類中屬性的名稱

(3)獲取類的方法

(4)獲取類的基類等等

(5)綜合上述可以利用它完成反射

Class的主要方法

1.forName方法

輸入需要加載的類的全路徑名,得到類的Class對象

2.newInstance方法

  public T newInstance()
        throws InstantiationException, IllegalAccessException
    {
        if (System.getSecurityManager() != null) {
            checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), false);
        }
        // NOTE: 下面的編碼可能不是嚴(yán)格符合當(dāng)前的java內(nèi)存模型
        // 尋找構(gòu)造器
        if (cachedConstructor == null) {
            if (this == Class.class) {
                throw new IllegalAccessException(
                    "Can not call newInstance() on the Class for java.lang.Class"
                );
            }
            try {
                Class<?>[] empty = {};
               //獲取無參構(gòu)造器,如果沒有就拋出異常,說明這個(gè)方法只適用于有無參構(gòu)造函數(shù)的類
                final Constructor<T> c = getConstructor0(empty, Member.DECLARED);
                // 設(shè)置構(gòu)造器允許訪問
                java.security.AccessController.doPrivileged(
                    new java.security.PrivilegedAction<Void>() {
                        public Void run() {
                                c.setAccessible(true);
                                return null;
                            }
                        });
                cachedConstructor = c;
            } catch (NoSuchMethodException e) {
                throw (InstantiationException)
                    new InstantiationException(getName()).initCause(e);
            }
        }
        Constructor<T> tmpConstructor = cachedConstructor;
        // 安全檢查
        int modifiers = tmpConstructor.getModifiers();
        if (!Reflection.quickCheckMemberAccess(this, modifiers)) {
            Class<?> caller = Reflection.getCallerClass();
            if (newInstanceCallerCache != caller) {
                Reflection.ensureMemberAccess(caller, this, null, modifiers);
                newInstanceCallerCache = caller;
            }
        }
        // 執(zhí)行無參構(gòu)造函數(shù)創(chuàng)建實(shí)例對象
        try {
            return tmpConstructor.newInstance((Object[])null);
        } catch (InvocationTargetException e) {
            Unsafe.getUnsafe().throwException(e.getTargetException());
            // Not reached
            return null;
        }
    }

登錄后復(fù)制

3.isInstance(native方法)

用于判斷入?yún)⑹欠駷楫?dāng)前Class對象(子類)的實(shí)現(xiàn)類

public class TestInfo {

    static {
        System.out.println("我是誰");
    }

    public TestInfo(){
        System.out.println("我是構(gòu)造函數(shù)");
    }
    public String test="測試屬性";
    public static void main(String[] args) {
        TestClass info=new TestClass();
        //返回結(jié)果是true因?yàn)閕nfo是子類的對象System.out.println(TestInfo.class.isInstance(info));
    }
    public static class TestClass extends TestInfo{

    }}

登錄后復(fù)制

4.getName、getTypeName、getCanonicalName、getSimpleName

    public static void main(String[] args) {
        System.out.println(TestClass.class.getTypeName());
        System.out.println(TestClass.class.getCanonicalName());
        System.out.println(TestClass.class.getSimpleName());
        System.out.println(TestClass.class.getName());
        System.out.println("-------------------------------------------------------");
        System.out.println(TestClass[].class.getTypeName());
        System.out.println(TestClass[].class.getCanonicalName());
        System.out.println(TestClass[].class.getSimpleName());
        System.out.println(TestClass[].class.getName());
    }

    public static abstract class TestClass<T extends TestInfo, String> extends TestInfo implements Aware, Comparable<Integer> {
        public abstract void test();
    }

登錄后復(fù)制

輸出結(jié)果

com.hikvision.test.abc.TestInfo$TestClass
com.hikvision.test.abc.TestInfo.TestClass
TestClass
com.hikvision.test.abc.TestInfo$TestClass
-------------------------------------------------------
com.hikvision.test.abc.TestInfo$TestClass[]
com.hikvision.test.abc.TestInfo.TestClass[]
TestClass[]
[Lcom.hikvision.test.abc.TestInfo$TestClass;

登錄后復(fù)制

5.getClassLoader

獲取當(dāng)前類的類加載器

6.getTypeParameters

獲取泛型類中的泛型參數(shù)數(shù)組。

7.getSuperclass和getGenericSuperclass

都是獲取父類信息,但是后者會帶上泛型參數(shù)

8.getInterfaces和getGenericInterfaces

獲取當(dāng)前Class對象實(shí)現(xiàn)的接口數(shù)組,但是后者會帶上接口的泛型參數(shù),如

  public static void main(String[] args) {
        System.out.println(TestClass.class.getInterfaces()[1]);
    }

    public static abstract class TestClass<T extends TestInfo,String> extends TestInfo implements Aware,BeanFactory {
        public abstract void test();
    }

登錄后復(fù)制

輸出結(jié)果

interface org.springframework.beans.factory.BeanFactory
java.lang.Comparable<java.lang.Integer>

登錄后復(fù)制

9.isAssignableFrom(native方法)

這個(gè)方法比較反人類,括號里的入?yún)⒈硎镜氖钱?dāng)前Class對象的父類或者是同一個(gè)對象時(shí)才成立。

//這樣返回的是false
System.out.println(TestClass.class.isAssignableFrom(TestInfo.class));

登錄后復(fù)制

10.isInterface(native方法)

判斷是否為接口

11.isArray(native方法)

是否為數(shù)組

12.isPrimitive(native方法)

用于判斷這個(gè)Class對象是否為基本類型,如int,byte,char等

13.isAnnotation

判斷這個(gè)Class對象是否為注解

14.getComponentType

如果當(dāng)前Class對象是數(shù)組,獲取數(shù)組中的元素類型

15.getModifiers

獲取屬性或方法前面的修飾詞對應(yīng)的枚舉值

16.getDeclaringClass

獲取方法或?qū)傩缘臍w屬類,或者獲取當(dāng)前Class對象繼承于哪個(gè)類

17.getSimpleName

Class對象的類名

18.getClasses、getDeclaredClasses

(1)獲取Class對象中public修飾的內(nèi)部類

(2)獲取Class對象中的內(nèi)部類,繼承成員是不包含在內(nèi)的

19.getFields、getField、getDeclaredFields

(1)獲取public修飾的屬性域

(2)根據(jù)輸入的屬性名查找對應(yīng)的屬性域

(3)獲取Class對象中的屬性域

20.getMethods、getMethod、getDeclaredMethods

(1)獲取public修飾的方法

(2)根據(jù)輸入的方法名和入?yún)㈩愋停檎覍?yīng)的方法

(3)獲取Class對象中的方法

21.getConstructors、getConstructor、getDeclaredConstructors

(1)獲取public修飾的構(gòu)造函數(shù)

(2)根據(jù)輸入的方法名和入?yún)㈩愋停檎覍?yīng)的構(gòu)造函數(shù)

(3)獲取Class對象中的構(gòu)造函數(shù)

以上就是java中class什么意思?的詳細(xì)內(nèi)容,更多請關(guān)注風(fēng)君子博客其它相關(guān)文章!

總結(jié)

以上是生活随笔為你收集整理的java中class什么意思?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。