class는 "클래스"를 의미합니다. 이는 java.lang 패키지에 존재하는 특정 클래스의 구현을 정의하며 JVM에 의해 제어됩니다. 클래스 로더)는 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
(1) 속성 유형 가져오기 the class# 🎜🎜#
(2) 클래스의 속성 이름 가져오기 (3) 클래스의 메서드 가져오기 (4) 클래스의 기본 클래스 가져오기 등# 🎜🎜#(5) 위 내용을 바탕으로 반영 완료에 사용할 수 있습니다
The main method of Class1.forName 메소드# 🎜🎜#
로드해야 하는 클래스의 전체 경로 이름을 입력하고 해당 클래스의 클래스 객체를 가져옵니다# 🎜🎜#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(네이티브 메소드)
입력 매개변수가 현재 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
현재 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(네이티브 메소드)
이 메소드는 더 비인간적입니다. 괄호 안의 입력 매개변수는 현재 Class 객체의 상위 클래스 또는 동일한 객체를 나타냅니다.
//这样返回的是false System.out.println(TestClass.class.isAssignableFrom(TestInfo.class));
10.isInterface(네이티브 메소드)
인터페이스인지 판단
11.isArray(네이티브 메소드)
# 🎜🎜 #배열인지 여부12.isPrimitive(네이티브 메소드) 이 Class 객체가 int, byte, char와 같은 기본 유형인지 확인하는 데 사용됩니다. 등# 🎜🎜#13.isAnnotation
이 클래스 객체가 주석인지 확인
14.getComponentType
If 현재 클래스 객체는 배열입니다. 배열을 가져옵니다. 요소 유형
15.getModifiers
속성 또는 메서드 앞에 있는 수정자에 해당하는 열거형 값을 가져옵니다#🎜 🎜#
16.getDeclaringClass메서드 또는 속성에 속하는 클래스를 가져오거나 17.getSimpleName#에서 현재 Class 객체가 상속하는 클래스를 가져옵니다. 🎜🎜#
클래스 객체의 클래스 이름
# 🎜🎜#18.getClasses, getDeclaredClasses(1) 클래스 객체에서 공개 수정된 내부 클래스 가져오기#🎜 🎜#(2) Class 객체에서 내부 클래스를 가져옵니다. 상속된 멤버는 포함되지 않습니다.
19.getFields, getField, getDeclaredFields
(1) 공개 수정된 속성 필드 가져오기
(2) 입력에 따라 해당 속성 도메인 찾기
(3) 클래스 개체에서 속성 도메인 가져오기
# 🎜🎜#20.getMethods, getMethod, getDeclaredMethods( 1) 공개 수정 메소드 가져오기 (2) 입력 메소드 이름 및 매개변수 유형을 기준으로 해당 메소드 찾기 (3) 클래스 객체에서 메서드 가져오기 #🎜 🎜#21.getConstructors, getConstructor, getDeclaredConstructors
(1) 공개 수정된 생성자 가져오기 # 🎜🎜#
(2) 입력 메소드 이름과 입력 매개변수 유형에 따라 해당 생성자를 찾습니다 (3) 클래스 객체에서 생성자를 가져옵니다위 내용은 Java에서 클래스는 무엇을 의미합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!