代码之家  ›  专栏  ›  技术社区  ›  gameover

Java中的类文字是什么?

  •  46
  • gameover  · 技术社区  · 15 年前

    Java tutorial :

    最后,还有一种特殊的文字称为 类名称字面常量 ,通过采用类型名称并附加“ .class “例如, String.class . 这是指对象(类型为 Class )它表示类型本身。

    这个字面值可以分配给什么类型的变量?

    如果可能,请举个小例子。

    9 回复  |  直到 6 年前
        1
  •  45
  •   Joachim Sauer    12 年前
    Class<String> c = String.class;
    

    退房 Javadoc for java.lang.Class 看看你能用这些小家伙中的一个做些什么-大部分都与反射有关

        2
  •  35
  •   shinkou    15 年前

    要理解这一点,你必须理解 是类的实例(对象) 等级 . 字符串文字(例如“I am a string.”)是表示类的实例(对象)的符号。 ,而类文本(例如hashtable.class)是表示类实例的表示法。 等级 .

        3
  •  21
  •   Ben    15 年前

    多亏了这里的其他好答案,您知道它是什么,但是这里有一个典型的用法示例,也可以澄清:

        private static Logger log = Logger.getLogger(YourClassHere.class);
    

    如代码所示,这是一行,我们在其中初始化一个日志框架(在本例中,我使用的是 org.apache.log4j 包,但原则扩展到其他框架)。这个 getLogger() 方法需要一个类文本,这样它就知道它记录了什么(即当前对象的类)。

        4
  •  10
  •   Joachim Sauer    12 年前

    根据 the JLS

    15.8.2类文字

    类文本是由类、接口、数组或基元类型的名称后跟 . 令牌 class . 类文本的类型是 Class . 它计算为命名类型的类对象(或 void )由当前实例的类的定义类加载器定义。

        5
  •  5
  •   trashgod    15 年前

    一些常见的用法可以在 Class Literals as Runtime-Type Tokens .

        6
  •  3
  •   bertolami    15 年前

    文字本身是 MyClass . 如果你写 MyClass.class 您得到了对类对象的引用。如果你写 new MyClass() ,它使用文本为您获取的类对象的实例 我的班级 . 通过调用 myClassInstance.getClass() .

    我不是100%确定,但文字本身不能分配给任何变量。您可以做的是将类的名称作为字符串获取,并使用反射框架创建实例。

        7
  •  2
  •   PeterMmm    15 年前

    在例子中是这样的:

    Class myClass = MyClass.class
    

    MyClass.class.getResourceAsStream("config.properties");
    
        8
  •  1
  •   AppTime    10 年前

    要理解这一点,你必须理解 String 是一个 instance (object) superclass (parent class) Object .

    class String 实例(对象) 的价值是 String literal (例如) "I am a string." ):

    class   |  instance (object) |  literal
    ------------------------------------------------
    String  |  instance_name  =  |  "I am a string."
    

    反之 class Object 实例(对象) 的价值是 Class literal (例如) Hashtable.class )指的是 class Hashtable 实例(对象)

    class      |  instance (object) |  literal
    ------------------------------------------------
    Hashtable  |  instance_name     |  Hashtable.
    
        9
  •  0
  •   Emmanuel Osimosu    6 年前

    当JVM加载应用程序类时,它将它们存储为 java.class.Class 物体。

    因此,通常有几种类型的实例 Class 在表示类的内存中。所以你可以这样做:

    Class<Bicycle> bicycleClass = Bicycle.class; // returns the object storing your Bicycle class
    bicycleClass.getName();  // returns your class name
    bicycleClass.getDeclaredMethods();  // returns your (declared) class methods