• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java.lang.class - jak działa konstrukcja .class?

Object Storage Arubacloud
+4 głosów
294 wizyt
pytanie zadane 6 września 2018 w Java przez allenkun Początkujący (400 p.)
zmienione kategorie 6 września 2018 przez allenkun

Witam, natknąłem się dzisiaj podczas programowania w greenfoocie (platformie do tworzenia gier w Javie) na konstrukcje:

NazwaKlasy.class

Postanowiłem trochę pogrzebać w dokumentacji i dowiedziałem się że istnieje klasa Class, której instancje opisują wszystkie klasy dla przykładu, gdy utworzymy sobie klasę o nazwie Apple, to:

Apple.class

będzie odnosiło się do instacncji klasy Class o nazwie Apple, w której zamieszczone są informacje na temat klasy Apple. Jest to dosyć skomplikowane tym bardziej że zacząłem programować obiektowo kilka dni temu, nie daje mi jednak spokoju sam zapis powyższego wyrażenia. Jak dokładnie kompilator interpretuje to sformułowanie? Nie posiadam zbyt dużej wiedzy na temat "notacji kropkowej" (dot notation, nie wiem jak to przetłumaczyć poprawnie) jednak z przykładów których używałem wynika, że w tym przypadku powinniśmy odnosić się do pola "class" instancji o nazwie "Apple" klasy "Class". Czy oznacza to, że w zmiennej tej przechowywane są informacje o naszej klasie, czy działa notacja ".class" to jakiś szczególny przypadek i funkcjonuje w inny sposób? Wybaczcie za tak niedoprecyzowane pytanie, ale staram się zrozumieć jak kompilator rozumuje kod zapisany w Javie w tym przypadku, co znacznie ułatwiłoby mi pisanie własnego kodu

2 odpowiedzi

0 głosów
odpowiedź 7 września 2018 przez Patrycjerz Mędrzec (192,320 p.)
wybrane 7 września 2018 przez allenkun
 
Najlepsza

Warto przeczytać:

https://docs.oracle.com/javase/specs/jls/se10/html/jls-15.html#jls-15.8.2

https://docs.oracle.com/javase/10/docs/api/java/lang/Class.html

W skrócie `class` to specjalne wyrażenie ewaluowane na odpowiedni obiekt klasy `Class<T>`. Nie należy tego uogólniać do pola klasy itp.

–1 głos
odpowiedź 7 września 2018 przez Wiciorny Ekspert (269,790 p.)
Przecież to na tym opiera się cały Język JAVA... to że jest on jeżykiem opartym o JVM - wirtualną maszynę która, właśnie kompiluje  kod źródłowy na odpowiednie pliki class - które zawierają nie tylko informacje o szablonie, samego jakby " modelu abstrakcji' ale szereg innych właściwości, operacji metod, bajtów...

Cały CLASS Loader javy jest o to oparty - pliki są zapisywane w postaci BYTE-CODU który jest potem przekształcany na kod maszynowy i odpalany na  czymś co obsługuje JVM

 

słuchaj: tu jest dobry arttykuł https://codecouple.pl/2018/06/15/co-kryje-plik-class/

on Ci w skrócie ujawni CO I JAK WIELE kryje w sobie plik class ;] Pozdrawiam
1
komentarz 7 września 2018 przez mbabane Szeryf (79,280 p.)

 pliki są zapisywane w postaci BYTE-CODU który jest potem przekształcany na kod maszynowy i odpalany na  czymś co obsługuje JVM

To bytecode jest odpalany na JVM, a to interpretuje na kod maszynowy - to jest własnie teoretycznie siła Javy, że ten sam bytecode można odpalić na odpowiednio dostosowanej JVM do platformy (przynajmniej teoretycznie). Jest to tańsze niż projektowanie i implementowanie osobnych kompilatorów np. dla C czy Cpp (a przynajmniej takie miało być z założenia).

komentarz 7 września 2018 przez Wiciorny Ekspert (269,790 p.)

kod źródłowy -> JVM -> KOD MASZYNOWY. Programista nie pisze kodu maszynowego, tylko źródłowy :), może źle to zrozumiałeś nie mówiłęm ze to JVM jest kompilatorem broń boże Wirtualna maszyna javy (JVM)

2
komentarz 7 września 2018 przez Patrycjerz Mędrzec (192,320 p.)
Wiciorny, kolega ma rację. Nieco pokręciłeś kolejność procesów. W komentarzu napisałeś dobrze, w cytowanym przez mbabane fragmencie jest błąd. Wynika z niego, że JVM obsługuje kod maszynowy, a nie bajtowy.

Podobne pytania

0 głosów
0 odpowiedzi 499 wizyt
pytanie zadane 19 marca 2018 w Java przez misiek90 Użytkownik (730 p.)
–5 głosów
2 odpowiedzi 858 wizyt
–1 głos
1 odpowiedź 198 wizyt
pytanie zadane 18 lipca 2018 w Java przez pionas0407 Gaduła (4,620 p.)

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

61,954 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...