class的意思為“類”,是java中的一個類,是定義一個特定類的實現,存在於java.lang包中,它的構造函數是私有的,由JVM(類加載器)建立Class對象,可以透過getClass()方法取得到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對象,透過它我們可以拿到創建的類別的屬性,方法等。
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 .getSimpleNameClass物件的類別名稱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中文網其他相關文章!