ホームページ > Java > &#&チュートリアル > Javaでクラスとは何を意味しますか?

Javaでクラスとは何を意味しますか?

little bottle
リリース: 2020-09-16 17:27:34
オリジナル
26569 人が閲覧しました

class は「クラス」を意味します。これは Java のクラスです。特定のクラスの実装を定義します。java.lang パッケージに存在します。そのコンストラクターはプライベートであり、JVM (クラス ローダー) によってロードされます。 ).device) を使用して Class オブジェクトを作成します。このオブジェクトは getClass() メソッドを通じて取得できます。

Javaでクラスとは何を意味しますか?

class は java.lang パッケージに存在するクラスです。そのコンストラクターはプライベートであり、Class オブジェクトは JVM (クラス ローダー) によって作成されます。 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 オブジェクトとして表すことができます。

クラス オブジェクト。作成したクラスの属性、メソッドなどを取得できます。

Javaでクラスとは何を意味しますか?

クラス class の役割

(1) クラス内の属性の型を取得する

(2) クラスの属性の名前を取得します。

#(3) クラスのメソッドを取得します。

#(4) クラスの基底クラスを取得します。

(5) 上記を踏まえて、リフレクションを完了します。

ClassのMainメソッド

1.forNameメソッド

Enterロードしてクラスの 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 (ネイティブ メソッド)

入力パラメータが現在の 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(ネイティブ メソッド)

## などのインターフェイスの汎用パラメーターをもたらします。 #This method is more anti-human. 括弧内の入力パラメータは、現在の Class オブジェクトまたは同じオブジェクトの親クラスを表します。

//这样返回的是false
System.out.println(TestClass.class.isAssignableFrom(TestInfo.class));
ログイン後にコピー

10.isInterface(ネイティブ メソッド)

インターフェイスかどうかの判断

11.isArray(ネイティブ メソッド)

配列かどうか

12.isPrimitive (ネイティブ メソッド)

この Class オブジェクトが int、byte、char などの基本型であるかどうかを判断するために使用されます。

13.isAnnotation

Class オブジェクトにアノテーションが付いているかどうかを判断します

14.getComponentType

現在の Class オブジェクトが配列の場合、配列内の要素の型を取得します

15.getModifiers

属性またはメソッドの前の修飾子に対応する列挙値を取得します

16.getDeclaringClass

メソッドまたは属性の属するクラスを取得します、または、現在の Class オブジェクトの継承元のクラスを取得します。

17 .getSimpleName

Class オブジェクトのクラス名

18.getClasses、getDeclaredClasses

(1) Class オブジェクト内の public-modified 内部クラスを取得します。

(2) Class オブジェクト内の内部クラスを取得します。継承されたメンバーは含まれません

19.getFields, getField, getDeclaredFields

(1) 公開変更属性フィールドを取得します

(2) 入力された属性名に従って、対応する属性ドメインを検索します

(3) 属性ドメインを取得しますクラス オブジェクト

20.getMethods, getMethod, getDeclaredMethods

( 1) パブリックに変更されたメソッド

を取得します (2) 対応するメソッド

に基づいて検索します入力メソッド名と入力パラメータの型について (3) Class オブジェクトのメソッド

を取得します。 21.getConstructors、getConstructor、getDeclaredConstructors

(1) パブリックに変更されたコンストラクター

# を取得します。 ##(2) 入力メソッド名と入力パラメータの型に基づいて、対応するコンストラクターを検索します

(3) Class オブジェクト内のコンストラクターを取得します

以上がJavaでクラスとは何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート