Czy "import" w Javie zachowuje się w taki sam sposób jak "#include" w C/C++? W szczególności, czy będzie zawierał całą bibliotekę, którą importuje, czy też będzie zawierał klasy i metody, które są wywoływane w kolejnym kodzie?"importuj" w Javie kontra "#include" w C/C++
Odpowiedz
Zależy od tego, co faktycznie importujesz. Najmniejszym importowalnym podmiotem jest klasa, największa to paczka.
Jeśli więc potrzebujesz pojedynczej klasy i importujesz kompletny pakiet, otrzymasz kompletny pakiet.
#include
nie wykonuje żadnej z nich, ani "importuje" bibliotek, ani klas ani modułów.
Dyrektywa #include
nakazuje preprocesorowi zawrzeć zawartość innego pliku tekstowego (źródła). To wszystko.
Wynik pliku przetwarzania wstępnego A #include
plik B jest przekazywany do kompilatora tak, jakby był jednym plikiem, z plikiem B wklejonym do pliku A w miejscu, w którym umieszczono dyrektywę #include
.
Aby to wyjaśnić, należy: To wszystko się zdarza przed do dowolnej kompilacji, generowanie kodu.
Jako efekt uboczny pre-procesor C/C++ może być użyty niezależnie od kompilatora do przetworzenia dowolnego rodzaju pliku tekstowego o numerze .
Można argumentować, że pre-procesorowe instrukcje, takie jak #include
"tak naprawdę nie są częścią języków C/C++", ponieważ nie są w zasadzie potrzebne do pisania jakichkolwiek programów w C/C++, ponieważ nigdy nie są przekazywane do kompilatora .
Wyrażenie import
nie jest używane w kontekście (standardowego) programowania C/C++, ponieważ nic nie ma być importowane.
C/C++ moduły są połączone albo na poziomie źródłowym przed kompilacją lub przez linker po kompilacji.
To dobre wytłumaczenie ogólnie +1. Kilka punktów jednak. Czy preprocesor nie kopiuje tylko plików nagłówkowych zawierających prototypy funkcji, a rzeczywiste pliki źródłowe są zawarte w czasie łącza? Powyższe sprawiają, że brzmi to jak rzeczywiste źródła są wklejane przez preprocesora, który moim zdaniem nie jest. Drugim punktem, o który pytam, jest to, co dokładnie dzieje się w przypadku, gdy import w java jest inny? czy kompilator wykonuje to samo dodanie pakietów? – fayyazkl
@fayyazkl: Linker zajmuje się kompilacją. Źródła (ani '* .c' ani' * .h') nie są już zaangażowane na tym etapie kompilacji. – alk
@fayyazkl: Jeśli chodzi o sposób importowania Java, możesz przeczytać tutaj: http://stackoverflow.com/questions/12620369/how-java-import-works – alk
W Javie, kiedy używasz import
, importować albo:
- pojedyncza klasa:
import foo.bar.Baz
- pełny pakiet:
import foo.bar.*
- pojedynczy statyczny członkiem klasy:
import static foo.bar.Baz.GRUT
- każdy statyczny element klasy:
import static foo.bar.Baz.*
C/C++ #include
Dyrektywa dzieje się w fazie wstępnego przetwarzania i zwykłym angielskim oznacza "w tym miejscu wklej cały plik nagłówkowy (lub dowolny plik tekstowy, jeśli chcesz), który jest podany jako parametr". Nowy standard C++ będzie miał moduły (ostatecznie) i może, ale nie musi, być podobny do importu Javy (w zależności od tego, jak będzie on wdrażany). Więcej informacji na temat tej propozycji C++: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3347.pdf
Java 8 ma również ulepszoną obsługę programowania modułowego.Zobacz: http://openjdk.java.net/projects/jigsaw/
'' include'ing nie wydarzyło się w czasie kompilacji, ale ** przed ** kompilacją. – alk
Nie chciałem do szczegółów, w jaki sposób kompilator C/C++ przetwarza źródło, które byłoby całkowicie nie na temat. Czy sie zgadzasz? Wciąż komentarz jest sprawiedliwy, więc +1. – DejanLekic
W kontekście znajdowania różnicy między "' '' '' '' '' '' '' '' '' '#'' (w pytaniu OP), nie sądzę, że nie jest to tematem zwracającym uwagę, że C/C++ preprocesor nie jest częścią żadnej kompilacji ani generowania kodu, ale jest to istotny fakt, o którym warto wspomnieć. – alk
myślę jeden aspekt, że inne odpowiedzi mogą nie ureguluje w sprawie C jest
obejmują wc tylko kopiuje plik nagłówka w fazie preprocesora który zawiera prototyp funkcji, nic więcej. Rzeczywista definicja funkcji nadal znajduje się w czasie łącza, po podstawowym kompilacji kodu .
Prostą weryfikację można wykonać, dołączając plik nagłówkowy, ale nie plik źródłowy i wywołując funkcję z kodu. Nie będzie błędu kompilacji i tylko w czasie połączenia będzie narzekać, że nie będzie w stanie zlokalizować definicji.
zawierają zwykle C, C++ lang, gdzie są językami zależnymi od platformy i muszą być skompilowane, połączone i załadowane bezpośrednio do zestawu instrukcji maszynowej architektury, ale gdzie, jak to się mówi, import odnosi się do języka java, niezależnej od platformy, gdzie może generować kod bajtowy, a następnie może zinterpretować format kodu binarnego.
Pytanie to nie było "C/C +" a "Java". – alk
#include<stdio.h>
środki skopiować zawartość stdio.h w tym pliku, podczas import java.util.ArrayList
znaczy jeśli cann't znaleźć klasę w tym pliku patrzeć w wyżej wymienionym miejscu importu. Importowanie Java nie zwiększa rozmiaru pliku, po prostu zapisuje kilka naciśnięć klawiszy.
Dzięki. Tego właśnie szukałem. – h8pathak
import (w Javie) jest podobny do używania (w C++) - Jak rozumiesz, nie są one dokładnie takie same, ale bardzo podobne.
import jest wskazaniem kompilatora, w którym może znaleźć klasę (lub pakiet podrzędny) używaną w bieżącej klasie.
obejmują - Sven wyjaśnił to lepiej tutaj - https://stackoverflow.com/a/3739563/135553
- 1. "Obiekt" kontra "Zmienna obiektu" w Javie?
- 2. forEach kontra forEachOrdered w Javie 8 Stream
- 3. Różnica między {% include '' %} i {{include ('')}} w Gałązka
- 4. Timer i TimerTask kontra wątek + sen w Javie
- 5. Dziedziczenie w Javie, pozorny typ kontra rzeczywisty typ
- 6. Równoważnik include() w HTML
- 7. Co oznacza CC? = W pliku Makefile?
- 8. Użyj vs Importuj vs Wymagaj kontra przedłużenie wymagań w schemacie kurczaków
- 9. Podstawianie makra w dyrektywie #include
- 10. Sposób użycia dyrektywy include w pliku Makefile dla określonego celu
- 11. mailto z wieloma adresami cc
- 12. Importuj nowy moduł Mavena w Eclipse automatycznie
- 13. Eksportuj/importuj zawartość internetową w liferay
- 14. Python: Importuj plik w katalogu dziadka
- 15. R: liczba całkowita kontra numeryczna
- 16. Wiosenna konfiguracja Java: importuj plik właściwości
- 17. PHP include wewnątrz include (innym katalogu)
- 18. Importuj błąd caffe
- 19. W plikach Makefiles, co oznaczają CC i LD?
- 20. w jaki sposób uczynić pip zgodnym ze zmienną środowiskową "CC"
- 21. wyślij e-mail do BCC i CC w Django
- 22. Importuj mysql.connector Python
- 23. Jakie jest znaczenie "@include" w plikach .css?
- 24. Używanie za dużo include() w php
- 25. Korzystanie z include() w ramach ob_start()
- 26. Różnica między INCLUDE i modułami w Fortranie
- 27. Mapowanie instrukcji #include w programie Biicode (biicode.conf)
- 28. atrybut layout_weight w tagu <include>
- 29. #define i #include zamówienie w C
- 30. niezdefiniowana zmienna błąd w PHP include file
Rzeczywiste źródło jest związana tylko na czas połączenia. Preprocesorowe pliki nagłówkowe zawierające tylko prototypy. Proszę zobaczyć moją odpowiedź też http://stackoverflow.com/a/19581919/986760 – fayyazkl