Co robi.klasa średnia w Javie?

Co oznacza .class w Javie? Na przykład, jeśli utworzyłem klasę o nazwie Print. Co zwraca Print.class?

Author: Nabin, 2013-02-26

7 answers

Kiedy piszesz .class po nazwie klasy, odwołuje się ona do klasy literalnie - java.lang.Class obiekt, który reprezentuje informację o podanej klasie.

Na przykład, jeśli twoja klasa to Print, to Print.class jest obiektem reprezentującym klasę Print w trybie runtime. Jest to ten sam obiekt, który jest zwracany przez metodę getClass() dowolnej (bezpośredniej) instancji Print.

Print myPrint = new Print();
System.out.println(Print.class.getName());
System.out.println(myPrint.getClass().getName());
 110
Author: Javier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-26 22:48:13

.klasa jest używana, gdy nie ma dostępnej instancji klasy.
.getClass() jest używane, gdy dostępna jest instancja klasy.

Obiekt.getClass () zwraca klasę danego obiektu. Na przykład:

String string = "hello";
System.out.println(string.getClass().toString());

To wyświetli

class java.lang.String

To jest klasa obiektu string:)

 43
Author: christopher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-26 00:19:41

Jeśli instancja obiektu jest dostępna, to najprostszym sposobem uzyskania jej klasy jest wywołanie Object.getClass()

Składnia .class

Jeśli typ jest dostępny, ale nie ma instancji, to można uzyskać klasę przez dodanie .class do nazwy typu. Jest to również najprostszy sposób na uzyskanie klasy dla prymitywnego typu.

boolean b;
Class c = b.getClass();   // compile-time error

Class c = boolean.class;  // correct

Zobacz: docs.oracle.com o klasie

 5
Author: Andrew Xie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-04 10:12:50

Tak dla jasności, to".metoda class nie odnosi się do pliku bajtowego, który widzisz po skompilowaniu kodu Javy, ani do pomyłki pomiędzy pojęciami klasy A obiektu w teorii OOP.

To".metoda class ' jest używana w Javie do odbicia kodu. Ogólnie można zbierać metadane dla klasy, takie jak pełna nazwa klasy, lista stałych, lista pól publicznych, itd.

Sprawdź te linki (już wymienione powyżej), aby uzyskać wszystkie details:
https://docs.oracle.com/javase/tutorial/reflect/class/classNew.html
https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html

Zwykle nie planujesz używać Reflection od razu, gdy zaczynasz budować swój projekt. Jest to coś, czego potrzebujesz po próbie zarządzania już działającym kodem. Wiele razy potrzebujesz go do zarządzania wieloma instancjami programu. Może chcesz zidentyfikować każdy konkretny "klon", aby ustalić, czy coś jest już zdefiniowane, policz liczbę funkcji lub po prostu zaloguj szczegóły konkretnej instancji klasy.

 4
Author: Salvador Valencia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-20 19:18:22

Jeśli nie ma dostępnej instancji, to składnia .class jest używana do uzyskania odpowiedniego obiektu klasy dla klasy, w przeciwnym razie możesz użyć metody getClass() do uzyskania obiektu klasy. Ponieważ nie ma instancji prymitywnego typu danych, musimy użyć składni .class dla prymitywnych typów danych.

    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());
       }
    }
 2
Author: Ranjeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-03 11:31:26

Myślę, że kluczem jest zrozumienie różnicy między klasą A obiektem. Obiekt jest instancją klasy. Jednak w języku w pełni obiektowym klasa jest również obiektem . Wywołanie .class otrzymuje odniesienie do obiektu Klasy tej klasy, który może być następnie manipulowany.

 1
Author: Xerxes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-04 21:47:46

Literał klasy jest wyrażeniem składającym się z nazwy klasy, interfejsu, tablicy lub typu prymitywnego, lub pseudo-typu void, po którym następuje '. i klasy tokena. Jedną ze zmian w JDK 5.0 jest to, że Klasa java.lang.Klasa jest ogólna, java.lang.Class Class<T>, zatem:

Class<Print> p = Print.class;

Bibliografia tutaj:

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

 0
Author: PbxMan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-13 09:02:53