首頁  >  文章  >  Java  >  java中class什麼意思?

java中class什麼意思?

little bottle
little bottle原創
2019-05-17 15:52:4726536瀏覽

class的意思為“類”,是java中的一個類,是定義一個特定類的實現,存在於java.lang包中,它的構造函數是私有的,由JVM(類加載器)建立Class對象,可以透過getClass()方法取得到Class對象。

java中class什麼意思?

class是一個類,存在於java.lang套件中,它的建構子是私有的,由JVM(類別載入器)建立Class對象,我們可以透過getClass()方法取得到Class物件。

    /*
     * 私有构造函数,使得只有jvm可以创建该类的对象,这个私有构造函数还可以防止通过默认构造函数创建类对象
     */
    private Class(ClassLoader loader) {
        // 初始化final变量ClassLoader
        classLoader = loader;
    }

Class 類別是在Java語言中定義一個特定類別的實作。一個類別的定義包含成員變量,成員方法,還有這個類別實現的接口,以及這個類別的父類別。 Class類別的物件用於表示目前執行的 Java 應用程式中的類別和介面。例如:每個陣列均屬於一個 Class 類別對象,所有具有相同元素類型和維度的陣列共用一個Class 物件。基本的 Java 類型(boolean, byte, char, short,int, long, float 和 double) 和 void 類型也可表示為 Class 物件。

Class對象,透過它我們可以拿到創建的類別的屬性,方法等。

java中class什麼意思?

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: 下面的编码可能不是严格符合当前的java内存模型
        // 寻找构造器
        if (cachedConstructor == null) {
            if (this == Class.class) {
                throw new IllegalAccessException(
                    "Can not call newInstance() on the Class for java.lang.Class"
                );
            }
            try {
                Class<?>[] empty = {};
               //获取无参构造器,如果没有就抛出异常,说明这个方法只适用于有无参构造函数的类
                final Constructor<T> c = getConstructor0(empty, Member.DECLARED);
                // 设置构造器允许访问
                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;
            }
        }
        // 执行无参构造函数创建实例对象
        try {
            return tmpConstructor.newInstance((Object[])null);
        } catch (InvocationTargetException e) {
            Unsafe.getUnsafe().throwException(e.getTargetException());
            // Not reached
            return null;
        }
    }

3.isInstance(native方法)

用於判斷入參是否為目前Class物件(子類別)的實作類別

public class TestInfo {

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

    public TestInfo(){
        System.out.println("我是构造函数");
    }
    public String test="测试属性";
    public static void main(String[] args) {
        TestClass info=new TestClass();
        //返回结果是true因为info是子类的对象System.out.println(TestInfo.class.isInstance(info));
    }
    public static class TestClass extends TestInfo{

    }}

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();
    }

輸出結果

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;

5.getClassLoader

##取得目前類別的類別載入器

#6.getTypeParameters

取得泛型類別中的泛型參數陣列。

7.getSuperclass和getGenericSuperclass

都是獲取父類別信息,但是後者會帶上泛型參數

8.getInterfaces和getGenericInterfaces

取得目前Class物件實作的介面數組,但後者會帶介面的泛型參數,如

  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();
    }

輸出結果

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

9.isAssignableFrom(native方法)

這個方法比較反人類,括號裡的入參表示的是當前Class物件的父類別或是同一個物件時才成立。

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

10.isInterface(native方法)

判斷是否為介面

11.isArray(native方法)

是否為陣列

12.isPrimitive(native方法)

用來判斷這個Class物件是否為基本型,如int,byte,char等

13.isAnnotation

#判斷這個Class物件是否為註解

14.getComponentType

如果目前Class物件是數組,取得數組中的元素類型

15.getModifiers

取得屬性或方法前面的修飾詞對應的枚舉值

16.getDeclaringClass

取得方法或屬性的歸屬類,或取得目前Class物件繼承於哪個類別

#17 .getSimpleName

Class物件的類別名稱

18.getClasses、getDeclaredClasses

(1)取得Class物件中public修飾的內部類別

(2 )取得Class物件中的內部類,繼承成員是不包含在內的

19.getFields、getField、getDeclaredFields

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

(2)根據輸入的屬性名稱尋找對應的屬性域

(3)取得Class物件中的屬性域

20.getMethods、getMethod、getDeclaredMethods

#( 1)取得public修飾的方法

(2)根據輸入的方法名稱和入參類型,找出對應的方法

(3)取得Class物件中的方法

21.getConstructors、getConstructor、getDeclaredConstructors

(1)取得public修飾的建構子

(2)根據輸入的方法名稱和入參類型,找出對應的建構子

(3)取得Class物件中的建構子

以上是java中class什麼意思?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn