Jestem bardzo zdezorientowany między tymi dwoma terminami. Sprawdziłem na stackoverflow i jest podobne pytanie dla C ++, ale nie dla Java.
Czy ktoś może wyjaśnić różnicę między tymi dwoma terminami w języku Java?
Jestem bardzo zdezorientowany między tymi dwoma terminami. Sprawdziłem na stackoverflow i jest podobne pytanie dla C ++, ale nie dla Java.
Czy ktoś może wyjaśnić różnicę między tymi dwoma terminami w języku Java?
Odpowiedzi:
Różnica koncepcyjna jest prosta:
Deklaracja : Deklarujesz, że coś istnieje, na przykład klasa, funkcja lub zmienna. Nie mówisz nic o tym , jak wygląda ta klasa lub funkcja, po prostu mówisz, że istnieje.
Definicja : Definiujesz, w jaki sposób coś jest implementowane, na przykład klasa, funkcja lub zmienna, tj. Mówisz, czym właściwie jest.
W Javie jest między nimi niewielka różnica, a formalnie rzecz biorąc, deklaracja zawiera nie tylko identyfikator, ale także definicję. Oto, jak osobiście szczegółowo interpretuję te terminy:
Klasy : Java tak naprawdę nie oddziela deklaracji i definicji tak, jak robi to C / C ++ (w plikach nagłówkowych i cpp). Definiujesz je w momencie, w którym je deklarujesz.
Funkcje : kiedy piszesz interfejs (lub klasę abstrakcyjną), możesz powiedzieć, że deklarujesz funkcję, bez jej definiowania. Zwykłe funkcje są jednak zawsze definiowane dokładnie tam, gdzie są zadeklarowane. Jeśli chcesz, zobacz treść funkcji jako jej definicję.
Zmienne : deklaracja zmiennej może wyglądać następująco:
int x;
(deklarujesz, że zmienna xistnieje i ma typ int), jeśli jest to zmienna lokalna lub pole składowe. W Javie nie ma już informacji xdo zdefiniowania , poza możliwymi wartościami, które powinien posiadać, co jest określane przez przypisania do niego.
Oto ogólne podsumowanie tego, jak używam tych terminów:
abstract class SomeClass { // class decl.
// \
int x; // variable decl. |
// |
public abstract void someMethod(); // function decl. |
// |
public int someOtherMethod() { // function decl. |
// | class
if (Math.random() > .5) // \ | def.
return x; // | function definition |
else // | |
return -x; // / |
// |
} // |
} // /
javacdeklaracje klas wydają się być synonimami definicji klasy. Rozważmy na przykład public void visitClassDef(JCClassDecl tree).
Specyfikacja języka Java określa i używa w szerokim zakresie terminu „deklaracja”, ale nie używa „definicji”, z wyjątkiem zwykłego angielskiego słowa.
Z moich dowodów wynika, że termin „deklaracja” pojawia się kilka razy w spisie treści i indeksie JLS, ale słowo „definicja” nie pojawia się ani w żadnym.
Tak więc, gdy widzisz, że ktoś używa słowa „definicja” w kontekście Javy, albo używa go w nietechnicznym sensie, albo jest niedbały ze swoją terminologią.
W tym drugim przypadku mogą oznaczać to samo co termin techniczny „deklaracja” lub mogą oznaczać coś innego. A jeśli mają na myśli coś innego, musisz ich zapytać, co mają na myśli. Jeśli to zdefiniowali ... w porządku, ale nie jest to standardowa terminologia.
Odpowiedzi, które stwierdzają, że „definicja” odnosi się do punktu, w którym zmienna jest inicjowana, nie są szczególnie obsługiwane ... w kontekście języka Java. W Javie inicjalizacja zmiennej następuje w momencie deklaracji lub w późniejszym przypisaniu. W tym drugim przypadku nie jest używany żaden specjalny termin ... ani potrzebny ... poza przypisaniem i / lub inicjalizacją. Nie ma określonego punktu, w którym przydzielana jest pamięć dla zmiennej. Rzeczywiście, są szanse, że miejsce na samą zmienną zostanie przydzielone przed osiągnięciem deklaracji.
Powodem, dla którego termin „definicja” nie jest używany w Javie w specyfikacji JLS, jest to, że nie jest on potrzebny.
(Jedynym miejscem w Javie, w którym mogliby użyć deklaracji zamiast definicji, są metody abstrakcyjne. Z wyjątkiem tego, że gdyby to zrobili, musieliby odwołać się do zwykłej deklaracji metody jako definicji ... dla spójności ... i że byłoby mylące. Dlatego podprzykład „abstrakcyjny” nazywają po prostu deklaracją metody abstrakcyjnej).
C i C ++ obsłużyć te rzeczy inaczej, a więc nie trzeba wyraźną „deklarację” i „definicja” warunki w swoich opisach technicznych. Moje podejście do definicji „Sun Glossary” jest takie, że są one skoncentrowane na C / C ++.
Z definicji słownika Słońca :
deklaracja:
instrukcja, która ustanawia identyfikator i kojarzy z nim atrybuty, bez konieczności rezerwowania miejsca przechowywania (dla danych) lub zapewniania implementacji (dla metod).
definicja: Deklaracja, która rezerwuje przechowywanie (dla danych) lub zapewnia implementację (dla metod).
Sposób, w jaki czytałem glosariusz Słońca, wyglądałby następująco:
List i; // declaration - variable on the stack
i = new ArrayList(); // definition - gives variable a reference
1. deklaracja oznacza tworzenieprimitive or Object reference variable , ale bez przypisywania wartości lub obiektu r ..
na przykład:
int x; // declaration of x of type int
Cat myCat; // declaration of myCat an Object of type Cat
2. Definicja ma miejsce, gdy przypisujemy im wartości lub Object.
int x = 5;
Cat myCat = new Cat();
3. W przypadku Method jest tak ...
public abstract void go(); // Method Declaration (Abstract method)
public void go(){ // Method Defination
// Your code
}
Myślę, że mogę lepiej wyjaśnić to pytanie w następujący sposób:
Pomyśl o następującym scenariuszu:
W Twojej firmie jest wolne stanowisko Inżyniera oprogramowania. Oznacza to, że osoba, którą wybierzesz na to stanowisko, będzie inżynierem oprogramowania (nie możesz wybrać specjalisty od marketingu na ten post). Tworzenie tego posta jest więc podobne do deklaracji.
Teraz, kiedy określisz, co osoba z tym stanowiskiem może / nie może zrobić, jakie ma uprawnienia, jakie są jego ograniczenia, to nazywa się to definicją.
Tak mówiąc
SoftwareEngineer se;
oznacza Deklarację;
i
class SoftwareEngineer {
// define role and responsibilities
}
oznacza definicję. Mam nadzieję, że ci to pomoże.
Java język definiuje tylko termin deklaracja nie używać definicji.
Deklaracja:
class A{}// class declaration
String str;// variable declaration
deklaracja : instrukcja, która ustanawia identyfikator i kojarzy z nim atrybuty, bez konieczności rezerwowania miejsca przechowywania (dla danych) lub zapewniania implementacji (dla metod).
or
1. Declaration means creating a primitive or Object reference variable,
but with no assignment of value or object respectively..
definicja : Deklaracja, która rezerwuje przechowywanie (dla danych) lub zapewnia implementację (dla metod).
or
Defination is when we assign values or Object to them.
**Ex:**
List i; // declaration - variable on the stack
i = new ArrayList(); // definition - gives variable a reference