W każdym języku - istnieją dwa etapy tworzenia ostatecznego kodu binarnego - kompilacja i łączenie (oczywiście jest ładowanie, ale tutaj nie ma to większego wpływu). Podczas kompilacji wystarczy umieścić haki (specyfikację funkcji, które zostaną wywołane) w odpowiednim miejscu. Linker faktycznie dołącza do nich, gdy dostępny jest zarówno prawdziwy kod. Jak dotąd nie ma różnicy między C ++ a Javą.
Konieczne jest jednak oddzielenie deklaracji i definicji w C ++. Jeśli trzymasz implementację w nagłówku i jeśli plik nagłówka się zmienia, kod, który jest z nim połączony, musi zostać ponownie skompilowany. Jeśli definicja znajduje się w osobnym pliku, kod wymaga jedynie ponownego połączenia.
Zrozum, że C ++ ma opcję statycznego łączenia, co oznacza, że kod obiektu jest ustalony wraz z aplikacją wywołującą. Pamiętaj, że zarówno w C, jak i C ++, programowanie w pliku nagłówkowym, a nawet #include, nie jest niepoprawne. oznacza to tylko, że musisz niepokoić się, w jaki sposób odbywa się łączenie z tymi plikami obiektowymi.
Sytuacja w Javie jest zupełnie inna. Każdy plik klasy jest kompilowany z plikiem .class. Rzeczywiście, potrzeba kompilacji funkcji klasy wywołującej, która jest obsługiwana jako sekcja nagłówka w pliku .class. Jednak w Javie końcowe łączenie odbywa się tylko w środowisku wykonawczym (maszynie wirtualnej) tylko z podaną specyfikacją kodu bajtowego pliku klasy.
Zobacz to i to