Подтвердить что ты не робот

Что такое литерал класса в Java?

Из учебника по Java:

Наконец, также есть специальный тип литерала, называемый литералом класса, образованный путем ввода имени типа и добавления ".class"; например, String.class. Это относится к объекту (типа Class), который представляет сам тип.

К какому типу переменной может быть назначен этот литерал?

Пожалуйста, приведите небольшой пример, если это возможно.

4b9b3361

Ответ 1

Class<String> c = String.class;

Просмотрите Javadoc для java.lang.Class, чтобы узнать, что вы можете сделать с одним из этих маленьких ребят - в основном, связанных с отражением

Ответ 2

Чтобы понять это, вы должны понимать, что Строка - это экземпляр (объект) класса Класс. Строковый литерал (например, "Я - строка" ) - это обозначение, которое представляет экземпляр (объект) класса String, тогда как литерал класса (например, Hashtable.class) является обозначением, которое представляет экземпляр класса Класс.

Ответ 3

Благодаря другим хорошим ответам здесь вы знаете, что это такое, но здесь типичный пример использования, который также может уточнить:

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

Как показывает код, это строка, в которой мы инициализируем структуру ведения журнала (в этом примере я использую пакет org.apache.log4j, но этот принцип распространяется на другие структуры). Для метода getLogger() требуется литерал класса, чтобы он знал, что он регистрирует (т.е. Текущий класс объекта).

Ответ 4

Согласно JLS

15.8.2 Литералы классов

Литерал класса - это выражение, состоящее из имени класса, интерфейса, массива или примитивного типа, за которым следует . и токен class. Тип литерала класса class. Он оценивает объект Class для именованного типа (или для void), как определено определяющим загрузчиком класса для класса текущего экземпляра.

Ответ 6

Сам литерал MyClass. Если вы пишете MyClass.class, вы получаете ссылку на объект класса. Если вы пишете new MyClass(), он использует литерал, чтобы получить экземпляр объекта класса, который вы получаете с помощью MyClass.class. Из экземпляра вы получаете один и тот же объект класса, вызывая myClassInstance.getClass().

Я не уверен на 100%, но сам литерал не может быть привязан к какой-либо переменной. Что вы можете сделать, так это получить имя класса как строку и использовать фреймворк reflection для создания экземпляра.

Ответ 7

В примерах это примерно так:

Class myClass = MyClass.class

или

MyClass.class.getResourceAsStream("config.properties");

Ответ 8

Чтобы понять это, вы должны понимать, что String является instance (object) его superclass (parent class) Object.

Значение

class String instance (object) равно String literal (например, "I am a string."):

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

тогда как значение class Object instance (object) равно Class literal - (например, Hashtable.class), которое относится к class Hashtable instance (object)

class      |  instance (object) |  literal
------------------------------------------------
Hashtable  |  instance_name     |  Hashtable.

Ответ 9

Когда 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

Ответ 10

package training;

import java.lang.reflect.Method;

public class Training {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Class<Training> myclass = Training.class;
        Method[] myclassarr = myclass.getDeclaredMethods();
        System.out.println(myclass);
        System.out.println(myclass.getName());
        for (int i = 0; i < myclassarr.length; i++) {
            System.out.println(myclassarr[i]);
        }
        System.out.println();
        Class<String> strobj = String.class;
        System.out.println(strobj);
        System.out.println(strobj.getName());
        Method[] strobjarr = strobj.getDeclaredMethods();
        for (int j = 0; j < strobjarr.length; j++) {
            System.out.println(strobjarr[j]);
        }
    }

    public void MethodA() {

    }

    public static void MethodB() {

    }
}

Выход:

class training.Training
training.Training
public static void training.Training.main(java.lang.String[])
public void training.Training.MethodA()
public static void training.Training.MethodB()

class java.lang.String
java.lang.String
public boolean java.lang.String.equals(java.lang.Object)
public java.lang.String java.lang.String.toString()
public int java.lang.String.hashCode()
public int java.lang.String.compareTo(java.lang.String)
public int java.lang.String.compareTo(java.lang.Object)
public int java.lang.String.indexOf(java.lang.String,int)
public int java.lang.String.indexOf(java.lang.String)
public int java.lang.String.indexOf(int,int)
public int java.lang.String.indexOf(int)
static int java.lang.String.indexOf(char[],int,int,char[],int,int,int)
static int java.lang.String.indexOf(char[],int,int,java.lang.String,int)
public static java.lang.String java.lang.String.valueOf(int)
public static java.lang.String java.lang.String.valueOf(long)
public static java.lang.String java.lang.String.valueOf(float)
public static java.lang.String java.lang.String.valueOf(boolean)
public static java.lang.String java.lang.String.valueOf(char[])
public static java.lang.String java.lang.String.valueOf(char[],int,int)
public static java.lang.String java.lang.String.valueOf(java.lang.Object)
public static java.lang.String java.lang.String.valueOf(char)
public static java.lang.String java.lang.String.valueOf(double)
public char java.lang.String.charAt(int)
private static void java.lang.String.checkBounds(byte[],int,int)
public int java.lang.String.codePointAt(int)
public int java.lang.String.codePointBefore(int)
public int java.lang.String.codePointCount(int,int)
public int java.lang.String.compareToIgnoreCase(java.lang.String)
public java.lang.String java.lang.String.concat(java.lang.String)
public boolean java.lang.String.contains(java.lang.CharSequence)
public boolean java.lang.String.contentEquals(java.lang.CharSequence)
public boolean java.lang.String.contentEquals(java.lang.StringBuffer)
public static java.lang.String java.lang.String.copyValueOf(char[])
public static java.lang.String java.lang.String.copyValueOf(char[],int,int)
public boolean java.lang.String.endsWith(java.lang.String)
public boolean java.lang.String.equalsIgnoreCase(java.lang.String)
public static java.lang.String java.lang.String.format(java.util.Locale,java.lang.String,java.lang.Object[])
public static java.lang.String java.lang.String.format(java.lang.String,java.lang.Object[])
public void java.lang.String.getBytes(int,int,byte[],int)
public byte[] java.lang.String.getBytes(java.nio.charset.Charset)
public byte[] java.lang.String.getBytes(java.lang.String) throws java.io.UnsupportedEncodingException
public byte[] java.lang.String.getBytes()
public void java.lang.String.getChars(int,int,char[],int)
void java.lang.String.getChars(char[],int)
private int java.lang.String.indexOfSupplementary(int,int)
public native java.lang.String java.lang.String.intern()
public boolean java.lang.String.isEmpty()
public static java.lang.String java.lang.String.join(java.lang.CharSequence,java.lang.CharSequence[])
public static java.lang.String java.lang.String.join(java.lang.CharSequence,java.lang.Iterable)
public int java.lang.String.lastIndexOf(int)
public int java.lang.String.lastIndexOf(java.lang.String)
static int java.lang.String.lastIndexOf(char[],int,int,java.lang.String,int)
public int java.lang.String.lastIndexOf(java.lang.String,int)
public int java.lang.String.lastIndexOf(int,int)
static int java.lang.String.lastIndexOf(char[],int,int,char[],int,int,int)
private int java.lang.String.lastIndexOfSupplementary(int,int)
public int java.lang.String.length()
public boolean java.lang.String.matches(java.lang.String)
private boolean java.lang.String.nonSyncContentEquals(java.lang.AbstractStringBuilder)
public int java.lang.String.offsetByCodePoints(int,int)
public boolean java.lang.String.regionMatches(int,java.lang.String,int,int)
public boolean java.lang.String.regionMatches(boolean,int,java.lang.String,int,int)
public java.lang.String java.lang.String.replace(char,char)
public java.lang.String java.lang.String.replace(java.lang.CharSequence,java.lang.CharSequence)
public java.lang.String java.lang.String.replaceAll(java.lang.String,java.lang.String)
public java.lang.String java.lang.String.replaceFirst(java.lang.String,java.lang.String)
public java.lang.String[] java.lang.String.split(java.lang.String)
public java.lang.String[] java.lang.String.split(java.lang.String,int)
public boolean java.lang.String.startsWith(java.lang.String,int)
public boolean java.lang.String.startsWith(java.lang.String)
public java.lang.CharSequence java.lang.String.subSequence(int,int)
public java.lang.String java.lang.String.substring(int)
public java.lang.String java.lang.String.substring(int,int)
public char[] java.lang.String.toCharArray()
public java.lang.String java.lang.String.toLowerCase(java.util.Locale)
public java.lang.String java.lang.String.toLowerCase()
public java.lang.String java.lang.String.toUpperCase()
public java.lang.String java.lang.String.toUpperCase(java.util.Locale)
public java.lang.String java.lang.String.trim()