Jestem nowy w Javie i na razie stworzyłem tablicę obiektów w Javie.
Mam na przykład klasę A -
A[] arr = new A[4];
Ale to tylko tworzenie wskaźników (referencji), A
a nie 4 obiektów. Czy to jest poprawne? Widzę, że kiedy próbuję uzyskać dostęp do funkcji / zmiennych w utworzonych obiektach, otrzymuję wyjątek wskaźnika zerowego. Aby móc manipulować / uzyskiwać dostęp do obiektów, musiałem to zrobić:
A[] arr = new A[4];
for (int i = 0; i < 4; i++) {
arr[i] = new A();
}
Czy to prawda, czy robię coś złego? Jeśli to prawda, to naprawdę dziwne.
EDYCJA: Uważam to za dziwne, ponieważ w C ++ po prostu mówisz nowy A[4]
i tworzy on cztery obiekty.
Odpowiedzi:
To jest poprawne.
... tworzy 4
A
referencje, podobne do robienia tego:Teraz nie można tego zrobić
a1.someMethod()
bez przydzielania wa1
ten sposób:Podobnie z tablicą musisz to zrobić:
... przed użyciem.
źródło
new
słowo kluczowe Java również wywołuje konstruktor i przydziela pamięć I. Sądzę, że w Javienew
tworzy się referencje, a nie rzeczywisty obiekt w porównaniu do C ++. Dziękuję za odpowiedź.new
tworzy obiekt tablicowy. Są to obiekty przydzielane dynamicznie („kupa”). Zatem analogiczny kod C ++ byłbyA **a = new A*[4]; for (int i = 0; i < 4; ++i) { a[i] = new A(); }
.To jest poprawne. Możesz także:
Tej składni można również użyć do utworzenia i zainicjowania tablicy w dowolnym miejscu, na przykład w argumencie metody:
źródło
Tak, tworzy tylko odwołania, dla których domyślna wartość to null. Dlatego otrzymujesz wyjątek NullPointerException Musisz utworzyć obiekty osobno i przypisać odwołanie. Istnieją 3 kroki, aby utworzyć tablice w Javie -
Tak więc, dopóki nie utworzymy instancji, referencje pozostają zerowe. Mam nadzieję, że moja odpowiedź pomogła ci ...! :)
Źródło - tablice w Javie
źródło
Oto wyraźny przykład tworzenia tablicy 10 obiektów pracowniczych z konstruktorem, który przyjmuje parametr:
źródło
Masz rację. Poza tym, jeśli chcemy stworzyć tablicę o określonym rozmiarze, wypełnioną elementami dostarczonymi przez jakąś „fabrykę”, ponieważ Java 8 (która wprowadza API streamu ) możemy użyć tego jednowierszowego:
Stream.generate(() -> new A())
jest jak fabryka dla oddzielnych elementów A utworzonych w sposób opisany przez lambda,() -> new A()
czyli implementacjęSupplier<A>
- opisuje, w jaki sposób należy tworzyć nowe instancje A.limit(4)
ustawia liczbę elementów, które wygeneruje strumieńtoArray(A[]::new)
(można również przepisać jakotoArray(size -> new A[size])
) - pozwala nam zdecydować / opisać typ tablicy, którą należy zwrócić.Dla niektórych prymitywnych typów można użyć
DoubleStream
,IntStream
,LongStream
które dodatkowo zapewniają generatorów jakrange
rangeClosed
i kilka innych.źródło
Tak, w Javie jest poprawne. Aby utworzyć tablicę obiektów, należy wykonać kilka kroków:
Deklarowanie, a następnie tworzenie instancji (Utwórz pamięć do przechowywania obiektów „4”):
Inicjalizacja obiektów (w tym przypadku możesz zainicjować 4 obiekty klasy A)
lub
Teraz możesz zacząć wywoływać istniejące metody z obiektów, które właśnie stworzyłeś itp.
Na przykład:
lub
źródło
W przypadku klasy ogólnej konieczne jest utworzenie klasy opakowania. Na przykład:
skutkuje: „Nie można utworzyć tablicy ogólnej”
Zamiast tego użyj:
źródło
Forma genarna do deklarowania nowej tablicy w Javie jest następująca:
type arrayName[] = new type[numberOfElements];
Gdzie typ jest pierwotnym typem lub obiektem.
numberOfElements
to liczba elementów, które będziesz przechowywać w tablicy i ta wartość nie może się zmienić, ponieważ Java nie obsługuje tablic dynamicznych (jeśli potrzebujesz elastycznej i dynamicznej struktury do przechowywania obiektów, możesz chcieć użyć niektórych kolekcji Java).Pozwala zainicjować tablicę do przechowywania wynagrodzeń wszystkich pracowników w małej firmie złożonej z 5 osób:
int salaries[] = new int[5];
Typ tablicy (w tym przypadku
int
) dotyczy wszystkich wartości w tablicy. Nie można mieszać typów w jednej tablicy.Po zainicjowaniu tablicy wynagrodzeń chcemy wprowadzić do niej pewne wartości. Możemy to zrobić podczas inicjalizacji w następujący sposób:
int salaries[] = {50000, 75340, 110500, 98270, 39400};
Lub zrobić to później:
Bardziej wizualny przykład tworzenia tablicy:
Aby dowiedzieć się więcej o tablicach, sprawdź przewodnik .
źródło