Co to jest format pliku CLASS?
Plik .class zawiera skompilowany kod źródłowy napisany w języku programowania Java. Pliki .class są generowane przez kompilator Java z plików źródłowych .java, które definiują jedną lub więcej klas. Każdy plik .class jest wynikiem pomyślnej kompilacji i zawiera kod bajtowy - binarną reprezentację klasy, która jest wykonywana przez Maszynę Wirtualną Java (JVM).
Pliki .class są generowane automatycznie podczas kompilacji plików źródłowych .java. Ponieważ kod bajtowy jest niezależny od platformy, ten sam plik .class działa na dowolnym systemie operacyjnym, w którym zainstalowano kompatybilną JVM. Pojedynczy plik źródłowy .java może zawierać jedną lub więcej klas, a każda klasa otrzymuje własny plik .class podczas procesu kompilacji.
Kompilacja plików .java do plików .class odbywa się za pomocą polecenia javac dołączonego do zestawu Java Development Kit (JDK). Większość środowisk programistycznych Java - w tym IDE, takie jak IntelliJ IDEA i Eclipse - kompiluje pliki .class automatycznie podczas pisania kodu przez programistów.
Środowisko Java Runtime Environment (JRE) obsługuje wykonywanie plików .class za pomocą polecenia java, ale nie pozwala na kompilację, ponieważ JRE nie zawiera kompilatora javac.
Każdy plik .class zaczyna się od 4-bajtowej magicznej liczby 0xCAFEBABE, po której następują pola wersji minor i major, identyfikujące wydanie Java użyte do jego kompilacji. Wiele plików .class jest powszechnie pakowanych razem w archiwum JAR w celu dystrybucji i wdrożenia.
Ponieważ JVM jest dostępna w wielu wersjach, należy pamiętać, że nie wszystkie pliki .class są kompatybilne ze wszystkimi wersjami środowiska uruchomieniowego. Plik skompilowany z myślą o nowszej wersji głównej Java nie może zostać załadowany przez starszą JVM.
Bezpieczeństwo
RYZYKO: MEDIUMPlik .class to skompilowany kod: jeśli uruchomisz go („java MyClass”) w JVM, zostanie wykonany z uprawnieniami Twojego użytkownika, więc nieznana klasa - podobnie jak nieznany plik JAR lub EXE - może zawierać złośliwe oprogramowanie. Traktuj pobraną skompilowaną Javę jako niezaufaną: uruchamiaj tylko klasy z zaufanych źródeł. Samo dekompilowanie lub deasemblowanie pliku .class (JD-GUI, javap) nie powoduje jego wykonania i jest bezpieczne. Pamiętaj, że kod bajtowy ujawnia logikę programu, więc wszystko, co skompilujesz, może zostać zdekompilowane przez innych, chyba że zostanie poddane obfuskacji.
Szczegóły formatu
w pigułceProgramy otwierające pliki CLASS
Szczegóły techniczne
specyfikacja| Typ formatu | Skompilowany kod bajtowy Java (binarny) |
| Typ MIME | application/java-vm |
| Magiczne bajty | 0xCAFEBABE (4 bajty przy przesunięciu 0) - obecne w każdym poprawnym pliku .class |
| Kodowanie wersji | Bajty 6-7 (wersja główna) identyfikują docelowe wydanie Java; np. 52 = Java 8, 61 = Java 17, 65 = Java 21 |
| Środowisko wykonawcze | Maszyna Wirtualna Java (JVM) za pomocą polecenia `java` |
| Narzędzie kompilacji | Kompilator `javac`, dołączony do Java Development Kit (JDK) |
| Niezależność od platformy | Kod bajtowy jest neutralny dla architektury procesora i działa na każdym systemie operacyjnym z kompatybilną JVM |
| Jedna klasa na plik | Każda klasa najwyższego poziomu lub statyczna klasa zagnieżdżona kompiluje się do własnego, oddzielnego pliku `.class` |
| Nazewnictwo klas wewnętrznych | Klasy wewnętrzne i anonimowe tworzą dodatkowe pliki ze znakiem `$` w nazwie (np. `Outer$Inner.class`) |
| Pula stałych | Każdy plik zawiera ustrukturyzowaną tabelę puli stałych, przechowującą literały ciągów znaków, nazwy klas oraz deskryptory pól i metod |
| Zestaw instrukcji | Używa zestawu instrukcji kodu bajtowego JVM (~200 kodów operacji), niezależnego od natywnego zestawu instrukcji procesora |
| Weryfikator kodu bajtowego | JVM weryfikuje strukturę pliku `.class` i bezpieczeństwo typów przed wykonaniem, odrzucając pliki uszkodzone lub zmodyfikowane |
| Dekompilacja | Może być zdeasemblowany za pomocą `javap -c` (wbudowane w JDK) lub zdekompilowany z powrotem do źródła Java za pomocą narzędzi takich jak JD-GUI lub CFR |
| Pakowanie | Zazwyczaj dystrybuowane wewnątrz archiwów `.jar` (kontenery oparte na ZIP, przechowujące wiele plików `.class` i manifest) |
| Niekompatybilność z Android | Android nie wykonuje bezpośrednio plików `.class`; narzędzie `d8` konwertuje je na kod bajtowy `.dex` dla środowiska Android Runtime (ART) |
| Wydano | 1995-1996 (Java 1.0) |
| Otwarty standard | Tak · bezpłatny (royalty-free) |
| Specyfikacja | docs.oracle.com |
Konwersje CLASS
Pytania i odpowiedzi społeczności
pytania użytkownikówBrak pytań - bądź pierwszą osobą, która zapyta o pliki CLASS.