Що .classозначає Java? Наприклад, якщо я створив клас з назвою Print. Що Print.classповертає?
.classсинтаксис, який пов'язаний лише випадково з .classрозширенням імені файлу.
Що .classозначає Java? Наприклад, якщо я створив клас з назвою Print. Що Print.classповертає?
.classсинтаксис, який пов'язаний лише випадково з .classрозширенням імені файлу.
Відповіді:
Коли ви пишете .classпісля імені класу, він посилається на клас literal -
java.lang.Classоб'єкт, який представляє інформацію про даний клас.
Наприклад, якщо ваш клас є Print, то Print.classце об'єкт, який представляє клас Printпід час виконання. Це той самий об'єкт, який повертається getClass()методом будь-якого (прямого) екземпляра Print.
Print myPrint = new Print();
System.out.println(Print.class.getName());
System.out.println(myPrint.getClass().getName());
Writer.class.getDeclaredField("writeBuffer").
Print.class?
new Intent(this, Activity.class? Чи спробує це з’ясувати, class Activityпорівнюючи кожен клас?
.class використовується, коли немає наявного примірника класу.
.getClass() використовується, коли є екземпляр класу.
object.getClass() повертає клас заданого об'єкта.
Наприклад:
String string = "hello";
System.out.println(string.getClass().toString());
Це виведе:
class java.lang.String
Це клас об'єкта рядка :)
getClass()корисний лише у тому випадку, якщо у вас є посилання, що вказує на об’єкт класу. ClassName.classможе використовуватися, навіть якщо у класу немає екземплярів. Наприклад, розглянемо Math.class. Кожен правильний для певних ситуацій.
.classі.getClass().
Якщо доступний примірник об'єкта, найпростіший спосіб отримати його Клас - це викликати Object.getClass()
.classсинтаксис
Якщо тип доступний, але примірника немає, то клас можна отримати, додавши .classім'я типу. Це також найпростіший спосіб отримати Клас для примітивного типу.
boolean b;
Class c = b.getClass(); // compile-time error
Class c = boolean.class; // correct
Дивіться: docs.oracle.com про клас
Для уточнення, цей метод.
Цей метод ".class" використовується в Java для відображення коду. Як правило, ви можете збирати метадані для свого класу, такі як повна назва класу, список констант, список публічних полів тощо, тощо.
Перевірте ці посилання (вже згадувалося вище), щоб отримати всі деталі:
https://docs.oracle.com/javase/tutorial/reflect/class/classNew.html
https://docs.oracle.com/javase/8/docs /api/java/lang/Class.html
Зазвичай ви не плануєте використовувати Reflection одразу, коли починаєте створювати проект. Це щось, що вам відомо, що вам потрібно, намагаючись керувати вже працюючим кодом. Багато разів вам це потрібно для управління кількома екземплярами вашої програми. Можливо, ви хочете ідентифікувати кожен конкретний "клон", щоб визначити, чи щось вже визначено, або порахувати кількість функцій, або просто записати дані конкретного примірника вашого класу.
Якщо немає примірника, .classсинтаксис використовується для отримання відповідного об'єкта Class для класу, інакше для використання об'єкта Class можна використовувати метод getClass (). Оскільки примірника примітивного типу даних немає, нам доводиться використовувати .classсинтаксис для примітивних типів даних.
package test;
public class Test {
public static void main(String[] args)
{
//there is no instance available for class Test, so use Test.class
System.out.println("Test.class.getName() ::: " + Test.class.getName());
// Now create an instance of class Test use getClass()
Test testObj = new Test();
System.out.println("testObj.getClass().getName() ::: " + testObj.getClass().getName());
//For primitive type
System.out.println("boolean.class.getName() ::: " + boolean.class.getName());
System.out.println("int.class.getName() ::: " + int.class.getName());
System.out.println("char.class.getName() ::: " + char.class.getName());
System.out.println("long.class.getName() ::: " + long.class.getName());
}
}
Я думаю, що ключовим тут є розуміння різниці між класом та об'єктом. Об'єкт - це примірник класу. Але повністю об'єктно-орієнтованою мовою Клас є також Об'єктом . Таким чином, виклик .classотримує посилання на об'єкт класу цього класу, з яким потім можна маніпулювати.
in a fully object-oriented language, a Class is also an Object? <цитування потрібне>
Буквене позначення класу - це вираз, що складається з імені класу, інтерфейсу, масиву або примітивного типу або пустоти псевдотипу, за якою слідує '.' і маркер класу. Однією із змін у JDK 5.0 є те, що клас java.lang.Class є загальним java.lang.Class Class<T>, отже:
Class<Print> p = Print.class;
Посилання тут:
https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html
http://docs.oracle.com/javase/tutorial/extra/generics/literals.html
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.8.2