Będąc nowym w Javie, jestem zdezorientowany między koncepcjami klasy i typu . Na przykład, czy obiekt powinien "Hello World!"należeć do typuString czy klasyString ? A może jedno i drugie?
Ostatnio wydaje się, że istnieje skłonność do odrzucania wszelkich pytań w stylu „początkujących”, czy są dobre, czy nie. To co najmniej denerwujące.
nico_c
9
Również aby odrzucić każde pytanie, którego wyborca nie rozumie ...
Markiz Lorne
4
Zgadzam się, że to trochę niegrzeczne, aby głosować przeciw, gdy mówisz pytania dla początkujących, ale niezależnie od tego, czy jest to dobre, czy złe, wszystkie pytania dla początkujących można znaleźć po prostu przeszukując sieć. Problem i powód, dla którego ludzie przegrywają, jest taki, że prowadzi to do przepełnienia stosu :)
Marko Lazić
13
To świetne pytanie - a 3 głosy do zamknięcia są powodem, dla którego musimy mieć możliwość głosowania, aby pozostać otwartym . Wciąż pamiętam, kiedy uczyłem się języka Java, że żargon OO był największą przeszkodą.
Lawrence Dol
4
@nickecarlo W FAQ był kiedyś punkt, który wydaje się być usunięty w ciągu ostatniego roku - „pytanie wskazuje na poważny brak badań i nie wykazuje oznak wysiłku włożonego w rozwiązanie go przed zadaniem pytania ”. Uważam za irytujące, że jest mnóstwo bzdurnych pytań, które Google może rozwiązać, a nie ludzie tutaj, którzy tracą czas na wyjaśnianie innym „programowania 101”.
TC1
Odpowiedzi:
123
Klasa to typ. Interfejs to typ. Prymityw to typ. Tablica to typ.
Dlatego każdy typ jest również klasą (w tym stałą wyliczenia), interfejsem, elementem pierwotnym lub tablicą.
Istnieją dwie różne kategorie typów: typy pierwotne i typy referencyjne:
Zmienna typu pierwotnego zawsze zawiera wartość pierwotną tego samego typu. Taka wartość może zostać zmieniona tylko przez operacje przypisania tej zmiennej.
Zmienna typu referencyjnego zawsze zawiera wartość referencji do obiektu. Wszystkie obiekty, w tym tablice, obsługują metody klasy Object. Typy odwołań to typy klas (w tym typy wyliczeniowe), typy interfejsów i typy tablic.
Każdy element danych ma typ, który definiuje jego strukturę, a mianowicie, ile pamięci zajmuje, w jaki sposób jest rozplanowany, a co ważniejsze, w jaki sposób można z nim współdziałać.
Nie uczyni edycję siebie, bo nie jestem pewien, że to, co masz na myśli pisać, ale może lepiej powiedzieć, że zajęcia są „rodzajem typu” zamiast „rodzajem typu”.
CVn
@ MichaelKjörling Tak, to lepszy sposób wyrażenia tego. Zaktualizuję to.
Brandon
3
Zapomniałeś typu null (patrz JLS 4.1).
user1803551
1
@AndyDong Klasa abstrakcyjna nadal jest klasą.
Brandon,
6
TLDR - klasa jest jednym z typów w Javie.
Uwaga - aby w pełni zrozumieć odpowiedź, musisz mieć trochę pojęcia o rodzajach generycznych w Javie.
Aby zrozumieć różnicę, najpierw zrozumiemy, czym jest typ w Javie.
Istnieją dwa rodzaje typów w języku programowania Java:
typy pierwotne ( §4.2 ) oraz typy referencyjne (§4.3).
Co to jest typ pierwotny?
a) Typy całkowite to bajt, short, int i long , których wartości to odpowiednio 8-bitowe, 16-bitowe, 32-bitowe i 64-bitowe liczby całkowite uzupełnione do dwóch ze znakiem oraz char, których wartości są 16-bitowe liczby całkowite bez znaku reprezentujące jednostki kodu UTF-16 (§3.1).
b) Typy zmiennoprzecinkowe to zmiennoprzecinkowe , których wartości obejmują 32-bitowe liczby zmiennoprzecinkowe IEEE 754 i double , których wartości obejmują 64-bitowe liczby zmiennoprzecinkowe IEEE 754.
c) Typ boolowski ma dokładnie dwie wartości: prawda i fałsz.
Przejdźmy teraz do tego, czym jest typ referencyjny?
Istnieją cztery rodzaje typów odwołań: typy klas ( pkt 8.1 ), typy interfejsów ( pkt 9.1 ), zmienne typu ( pkt 4.4 ) i typy tablicowe (pkt 10.1 ).
Omówmy jeden po drugim.
Jeśli widzisz, jak w JLS, klasa jest zdefiniowana w następujący sposób:
Deklaracja klasy określa nowy typ o nazwie odniesienia.
Istnieją dwa rodzaje deklaracji klas: normalne deklaracje klas i deklaracje wyliczeń .
Widzisz [TypeParameters], to pokazuje, że typ klasy obejmuje również te klasy ogólne.
classExample<T>{}
Zostanie wywołany typ klasy Example
Krótko mówiąc, typ klasy obejmuje nasze wyliczenia, nasze zwykłe (nieogólne) klasy, takie jak String itp., A także nasze klasy ogólne.
Podobnie, mam nadzieję, że interfejs i typy tablic są również jasne. Według rodzaju tablicy mamy na myśli int[], String[]itd.
Przejdźmy do ostatniej części - Zmienne typu. Czym oni są ?
Zmienna typu to niekwalifikowany identyfikator używany jako typ w treściach klasy, interfejsu, metody i konstruktora.
Rozumiemy na przykładzie w JLS poniżej.
classTest{<T extends C & I>void test(T t){
t.mI();// OK
t.mCPublic();// OK
t.mCProtected();// OK
t.mCPackage();// OK}}
Widzisz, że twój obiekt w parametrze metody jest typu T. Tak, to Tjest zmienna typu i może służyć jako odniesienie. Tak to jest. (Nie mogłem zrozumieć tego dziwnego przykładu - Dowiedz się, co to jest metoda ogólna w Javie)
„Typ” to kategoria bardziej obejmująca. Zmienne w Javie mogą mieć trzy rodzaje typów: 8 typów „pierwotnych”, takich jak int i float, interfejsy i klasy. Wartości (w przeciwieństwie do zmiennych) mogą być prymitywami lub instancjami klas.
Na przykład: „hello world” to String -> „hello world” to typ String (String nie jest danymi wstępnymi w przeciwieństwie do int .. więc możemy powiedzieć, że „hello world” to typ typu string)
Odpowiedzi:
Klasa to typ. Interfejs to typ. Prymityw to typ. Tablica to typ.
Dlatego każdy typ jest również klasą (w tym stałą wyliczenia), interfejsem, elementem pierwotnym lub tablicą.
Istnieją dwie różne kategorie typów: typy pierwotne i typy referencyjne:
Object
. Typy odwołań to typy klas (w tym typy wyliczeniowe), typy interfejsów i typy tablic.Każdy element danych ma typ, który definiuje jego strukturę, a mianowicie, ile pamięci zajmuje, w jaki sposób jest rozplanowany, a co ważniejsze, w jaki sposób można z nim współdziałać.
Przykłady typów pierwotnych:
int
float
char
boolean
Przykłady typów klas:
String
Integer
Boolean
ArrayList
StringBuilder
Przykłady typów interfejsów:
Collection
List
Map
Serializable
Przykłady typów tablic:
int[]
String[]
Integer[][][]
Zasadniczo wszystko, do czego można się odnieść jako do zmiennej, ma typ, a klasy są rodzajem typu.
Więcej informacji tutaj: http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html
źródło
TLDR - klasa jest jednym z typów w Javie.
Uwaga - aby w pełni zrozumieć odpowiedź, musisz mieć trochę pojęcia o rodzajach generycznych w Javie.
Aby zrozumieć różnicę, najpierw zrozumiemy, czym jest typ w Javie.
Według JLS SE 10 ,
Co to jest typ pierwotny?
Przejdźmy teraz do tego, czym jest typ referencyjny?
Omówmy jeden po drugim.
Jeśli widzisz, jak w JLS, klasa jest zdefiniowana w następujący sposób:
Widzisz
[TypeParameters]
, to pokazuje, że typ klasy obejmuje również te klasy ogólne.Zostanie wywołany typ klasy
Example
Krótko mówiąc, typ klasy obejmuje nasze wyliczenia, nasze zwykłe (nieogólne) klasy, takie jak
String
itp., A także nasze klasy ogólne.Podobnie, mam nadzieję, że interfejs i typy tablic są również jasne. Według rodzaju tablicy mamy na myśli
int[]
,String[]
itd.Przejdźmy do ostatniej części - Zmienne typu. Czym oni są ?
Rozumiemy na przykładzie w JLS poniżej.
Widzisz, że twój obiekt w parametrze metody jest typu
T
. Tak, toT
jest zmienna typu i może służyć jako odniesienie. Tak to jest. (Nie mogłem zrozumieć tego dziwnego przykładu - Dowiedz się, co to jest metoda ogólna w Javie)To kończy odpowiedź.
źródło
„Typ” to kategoria bardziej obejmująca. Zmienne w Javie mogą mieć trzy rodzaje typów: 8 typów „pierwotnych”, takich jak int i float, interfejsy i klasy. Wartości (w przeciwieństwie do zmiennych) mogą być prymitywami lub instancjami klas.
źródło
„Typ” określa „jaki to typ danych”
Na przykład: „hello world” to String -> „hello world” to typ String (String nie jest danymi wstępnymi w przeciwieństwie do int .. więc możemy powiedzieć, że „hello world” to typ typu string)
10 to liczba całkowita -> 10 to liczba całkowita.
źródło