• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Typy zmiennych referencyjnych [JAVA]

0 głosów
1,271 wizyt
pytanie zadane 8 listopada 2016 w Java przez itcloud Gaduła (3,380 p.)

Im dłużej siedze w teorii (czytanie książke) tym mam większą niechęc do tego języka :/ Wczoraj chciałem poczytac sobie o typach generycznych i dzisiaj mam wielki mętlik w głowie. Niby znam podstawy, ale przez zero praktyki dopiero teraz sobie uświadomiłem, że wszystkie zmienne w javie to tzw. zmienne referencyjne (wskazują na jakiś tam obszar w pamięci, są referencją..). Wcześniej nie używałem takich pojęć: po prostu mówiłem "zmienna" danego typu "równa się" tworzony obiekt (operator new ... i zazwyczaj tutaj pojawia się po "new" nazwa konstruktora). Dobrze myslę ?

A teraz do sedna. Nie mam pojęcia, skąd autorzy piszący kod w książce od razu wiedzą, jakiego typu użyć, albo czasem tworzą własne typy. Zaznaczę to w kodzie. Prosiłbym o wytłumaczenie. Wiem co to jest typ, wiem co to typy podstawowe.

Fragment kodu:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ProstyGUI1c implements ActionListener {
JFrame ramka;  //co to oznacza? że powinienem przejrzeć klasę wbudowaną ActionListener i tam zobaczę typ JFrame? Typ czy metodę zwracającą taki typ???

public static void main(String[] args){
  prostyGUI1c apGUI = new ProstyGUI1c();   //tu typem jest nazwa klasy, czyli co, nie ma tu typu JFrame bo tworzymy dopiero typ w tej naszej klasie będącej podklasą klasy z której implementujemy?
  apGUI.doDziela();
}

public void doDziela(){
  ramka = new JFrame();    //aha, dlatego wcześniej zmienna ramka była typu JFrame bo chcemy móc korzystać z tej nadklasy która ma tę metodę JFrame ?
  
  JButton przycisk = new JButton("zmiana koloru");


....

 

komentarz 8 listopada 2016 przez Avernis Nałogowiec (27,400 p.)
ramka to obiekt klasy Jframe, tak jak ty masz klasę ProstyGUI1
komentarz 8 listopada 2016 przez itcloud Gaduła (3,380 p.)

Tak, to niby oczywista oczywistość, ale jak widać nie dla mnie, człowieka który kila lat programował strukturalnie w php4.

prostyGUI1c apGUI = new ProstyGUI1c(); 
  apGUI.doDziela();

Tu wyżej tworząc obiekt, którego "uchwyt" jest przypisywany do zmiennej referencyjnej, tak naprawdę uruchamiam co? przypisujac wartosć po znaku = wiem że przypisuję zmiennej jakąś wartosć. A tutaj rozumiem, że uruchamiam miejsce w pamięci na skłądowe i metody tego "wyzwolonego" właśnie obiektu? Czyli w powyższym przykładzie robie to tylko po to, żeby za moment uruchomić metodę doDziela? Akurat ten przykład prościej byłoby zrobić strukturalnie, ale tak często w książkach bywa, że podane przykłady są niepraktyczne ?

komentarz 8 listopada 2016 przez Avernis Nałogowiec (27,400 p.)

W sensie po co ci to

 new ProstyGuic();

?

To po prostu tworzysz obiekt. Jeśli w javie dopiero zaczynasz to nie musisz się tym za bardzo przejmować, ale jeśli chcesz wiedzieć o co chodzi to oglądnij sobie odcinek pana Mirosława o wskaźnikach

komentarz 8 listopada 2016 przez itcloud Gaduła (3,380 p.)
edycja 8 listopada 2016 przez itcloud
wskaźniki, wskaźniki na wskaźnik (np. stosowane przy tablicach wielowymiarowych), referencje w c++ znam bardzo dobrze i rozumiem. W Javie też wiem, że referencja to wskazanie na dany obszar pamięci, ale nie jest to do końca to samo co referencja w c++ (tam to też po prostu inna nazwa zmiennej no i w c++ nie ma wirtualnej maszyny, która w javie ma wiele plusów, ale minus to wlasnie ten ze nie mozna korzystac z dobrodziejstw wskaźników tych znanych z c++ i bezp. wskazywać na obszar w pamięci i go modyfikować), no a odpowiednika wskaźnika z c++ w javie nie ma i nie było. Piszę to, żeby nie było że nie mam kompletnie pojęcia o tym o czym piszę. Niestety, za długo siedzę w teorii a nie mam praktyki, stąd moje pytania.
1
komentarz 8 listopada 2016 przez criss Mędrzec (172,640 p.)

Nie pisze w Javie, ale wydaje mi sie, że tym "Javowym referncjom" jest bliżej do wskaźników. Także pisząc

prostyGUI1c apGUI = new ProstyGUI1c();

tworzysz obiekt, przypisujesz go do pierwotnie pustego wskaźnika/referencji/choleraWieJakToNazwać i uruchamiasz konstruktor.

Tyle, że jeśli to rozumiesz, to nie bardzo wiem czego nie rozumiesz.

1 odpowiedź

+1 głos
odpowiedź 8 listopada 2016 przez mbabane Szeryf (79,260 p.)
edycja 8 listopada 2016 przez mbabane

Miałem podobne problemy, kiedy uczylem sie Javy, po programowaniu w Pascalu, C. Po programowalem troche w Javce i przeszlo. Co do typow generycznych jesli nie masz solidnie przepracownych podstaw tzn. tworzenie klas ich uzycie, dziedziczenie, to rzeczywiscie moze być ciezko.

Przede wszystkim zacznij od tego czym jest samo podejscie obiektowe. Dopiero pozniej przejdz do konkretnego jezyka. Byc moze pomocne bedzie ogladniecie kilku pierwszych filmikow z serii Obiektowy C++  z kanalu Pasja informatyki:

https://www.youtube.com/playlist?list=PLOYHgt8dIdozvOVheSRb_qPVU-4ZJA7uB

I przede wszystkim zacznij robic przyklady, nawet przepisywać z ksiazki na poczatek. 

Czy mozna wiedziec z jakiej korzystasz ksiazki?

komentarz 8 listopada 2016 przez itcloud Gaduła (3,380 p.)
Podstawy wydaje mi się, że mam przerobione, ew. pozapominałem dużo rzeczy. Klasy, dziedziczenie, polimorfizm - to wszystko rozumiem. Typy generyczne kojarzą mi się właśnie z polimorfizmem. Na takiej zasadzie że np. jak mam jakiś typ i potem podtypy (czyli obiekty podklasy w stosunku do nadklasy) to wiadomo, że mogę rzutować z podtypu na nadklasę (? nie pomyliłem?) - czyli ew. pozbywam się pewnych funkcjonalności, metod, które były "dodane" w tej podklasie. No i jeśli mam np. tablicę która została przypisana do zmiennej referencyjnej tego typu z nadklasy, to wewnatrz tablicy mogę mieć typy podklas, prawda? I iterując tablicę mogę od razu dostać się do tych obiektów w tablicy. No i typy generyczne trochę mi się z tym kojarzą, tzn coś kojarzę o listach (czyli jest to lepsze niż tablica, bo mogę łatwiej dotrzeć do konkretnego elementu tej listy, łatwiej się dodaje nowe elementy?) i o zapisie list<tutaj_typ>.... i po znaku równości np. ArrayList< ... >()  ale to tyle, co wiem na chwilę obecną. Jakbyś mógł trochę mi podpowiedzieć w tym temacie będę wdzięczny - na ytb chcę obejrzeć podcasty DevCastZone bo mają mnóstwo o typach generycznych, ale po odpaleniu 5 minut pierwszego filmiku nie wszystko rozumiałem, o czym koleś mówi.

Uczyłem się z książki Java Podstawy wydanie IX, nawet fajna, ale momentami trudna. Potem spróbowałem prostrzej "Java dla opornych" czy jakoś tak, ale ta z kolei jest wg mnie zbyt banalna i za dużo obrazków, nudna.
komentarz 8 listopada 2016 przez mbabane Szeryf (79,260 p.)
edycja 8 listopada 2016 przez mbabane

Przyznam, ze procz uzywania kolekcji nie korzystalem nigdy z typow generycznych, no procz prostych przykladow zeby zobaczyc o co w tym chodzi.

Chyba dobrze Ci sie kojarza typy generyczne, poniewaz ich glownym celem bylo wyeliminowanie niepotrzebnych rzutowan do klasy Object, do ktorej mozna zrzutowac dowolny obiekt, co moze powodowac pewne bledy, (musze przyznac, ze dawno nie odswiezalem sobie informacji na temat typow generycznych i tyle pamietam - dziekuje Ci ze mi o tym przypomniales)

Uzywana przez Ciebie ksiazka jest bardzo dobra (jednak ma pewien, wedlug mnie, blad, poniewaz wyjatki sa opisane troche pozno i polecam Ci po przerobieniu pierwszych 6 dzialow przejsc wlasnie do nich. Wyjątki sa wedlug mnie duzo wazniejsze niz biblioteka Swing). Sprawdz jeszcze Java - rusz glowa - jednak tam tez moze byc zbyt duzo banalnosci i lopatologii, ale sprawdzic dema w helionie na pewno nie zaszkodzi.

Przypadek z tablica jest poruszany w tej ksiazce (znaczy sie w Podstawach IX) na stronie 208.

Podobne pytania

0 głosów
1 odpowiedź 735 wizyt
pytanie zadane 7 września 2017 w C i C++ przez qlucha Obywatel (1,790 p.)
0 głosów
1 odpowiedź 223 wizyt
pytanie zadane 23 maja 2018 w C i C++ przez Agnes Użytkownik (990 p.)
0 głosów
1 odpowiedź 247 wizyt
pytanie zadane 29 kwietnia 2018 w C# przez DODO Bywalec (2,950 p.)

89,689 zapytań

138,291 odpowiedzi

309,236 komentarzy

59,620 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...