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

Pomoc-Java-Trudne Początki ;-)

Object Storage Arubacloud
0 głosów
1,734 wizyt
pytanie zadane 26 marca 2018 w Java przez blofeld Użytkownik (700 p.)

Elo.

Mam prośbę. Zaczynam przygodę z javą i mam problem z jednym kodem, chodzi o początki programowania obiektowego. Stworzyłem dwa pliki jako java. Kod pierwszego :

public class Punkt {

    int wspX;
    int wspY;

}

Kod drugiego:

public class UstawPunkt {

    public static void main(String[] args){

        Punkt punkt =new Punkt();
        punkt.wspX=10;
        punkt.wspY=20;
        System.out.println("Współrzędne punktu to("+punkt.wspX+"),("+punkt.wspY+")");


    }
}

Wedle kursu który robię po skompilowaniu przez javac powinna się wyświetlić komenda. Zaznaczam że poprawnie wpisuję nazwę pliku, a ta jest taka sama jak klasy.

W odpowiedzi otrzymuję :

C:\Users\Ernst Stavro Blofeld\IdeaProjects\Taktyka\src\com\company>javac UstawPunkt.java
UstawPunkt.java:7: error: cannot find symbol
        Punkt punkt =new Punkt();
        ^
  symbol:   class Punkt
  location: class UstawPunkt
UstawPunkt.java:7: error: cannot find symbol
        Punkt punkt =new Punkt();
                         ^
  symbol:   class Punkt
  location: class UstawPunkt
2 errors

C:\Users\Ernst Stavro Blofeld\IdeaProjects\Taktyka\src\com\company>

Widzi ktoś może jakiś błąd ?

 

komentarz 26 marca 2018 przez Tomasz Rogalski Bywalec (2,800 p.)
Podaj ścieżki do obu plików .java

4 odpowiedzi

0 głosów
odpowiedź 26 marca 2018 przez Marcin Siniarski Gaduła (4,420 p.)

Z powodu że Java w pełni opiera się na podejściu obiektowym i jeden Jar może składać się z tysięcy plików, trzeba jakoś zorganizować ten cały bałagan. Więc wynaleziono sposób, paczki. Spokojnie, nie ma się co obawiać bo to po prostu foldery w systemie operacyjnym.
Jest kilka zasad co do paczek:

  • W paczce domyślnej (brak folderów) nie można importować żadnych klas poza java.* i javax.* itd.
  • Klasy w tej samej paczce nie muszą być importowane.
  • Klasa na samym początku powinna posiadać linię  package <"ścieżka" paczek>;
  • Powinno się śledzić  zasady nazywania paczek.

W twoim wypadku w obydwu klasach brakuje linii:

package com.company;

A jeśli klasa 'Punkt' znajduje się w podfolderze to musisz ją zaimportować;

import com.company.<podpaczki>.Punkt;

 

komentarz 27 marca 2018 przez Javowiec Pasjonat (21,560 p.)

Java nie opiera się w pełni na podejściu obiektowym, ani nie jest w pełni językiem obiektowym.

Po pierwsze nie wszystko w Javie jest obiektem (patrz typy proste: int, long, char, itd.).

Po drugie posiada statyczne metody, które nie potrzebują obiektu do ich wywołania.

Taka ciekawostka.

https://www.geeksforgeeks.org/java-not-purely-object-oriented-language/

0 głosów
odpowiedź 27 marca 2018 przez Javowiec Pasjonat (21,560 p.)
edycja 27 marca 2018 przez Javowiec

Jak kompilujesz, kompiluj wszystko, nie tylko klasę z metodą main.

vs:

Polecenie javac *.java skompiluje wszystkie pliki z rozszerzeniem .java znajdujące się w pakiecie. Znak * oznacza każdą możliwą nazwę.

Oczywiście, każdy plik .java w tym pakiecie musi mieć deklarację pakietu:

package com.company;

Potem, z poziomu folderu src uruchamiasz program:

komentarz 27 marca 2018 przez blofeld Użytkownik (700 p.)
Ok ale w którym z plików zrobić class a w którym public class ?
komentarz 27 marca 2018 przez Javowiec Pasjonat (21,560 p.)

Po prostu kod z Twojego pierwszego posta + dodana deklaracja package. Jak klasy siedzą w tym samym pakiecie to nie ma różnicy.

public - klasa jest widoczna dla wszystkich klas (bez różnicy, z jakich pakietów)

bez public - klasa jest widoczna tylko dla klas w pakiecie (klasy w innych pakietach jej nie widzą)

W Twoim przypadku różnica jest bardziej widoczna, gdyby obydwie klasy były w tym samym pliku .java (a nie są). W jednym pliku może być tylko jedna klasa publiczna, więc druga musiałaby być bez słowa kluczowego public.

komentarz 27 marca 2018 przez Javowiec Pasjonat (21,560 p.)
edycja 27 marca 2018 przez Javowiec
package com.company;

public class Punkt {

    int wspX;
    int wspY;

}
package com.company;

public class UstawPunkt {

    public static void main(String[] args){

        Punkt punkt =new Punkt();
        punkt.wspX=10;
        punkt.wspY=20;
        System.out.println("Współrzędne punktu to("+punkt.wspX+"),("+punkt.wspY+")");

    }

}
komentarz 27 marca 2018 przez blofeld Użytkownik (700 p.)
Czyli w obydwu mogą być publiczne i nie robi to różnicy ? :-)
komentarz 27 marca 2018 przez blofeld Użytkownik (700 p.)
ok już widzę :-)

a zapytam jeszcze bo jak startuję z tym jako z nowym projektem domyślnie tworzy mi się klasa main. Ona musi być w folderze i częścią składową ?
komentarz 27 marca 2018 przez Javowiec Pasjonat (21,560 p.)

Chyba chodzi Ci o metodę main. Metoda ta, to punkt startowy każdego programu konsolowego Javy. Przy pomocy polecenia java pakiet.Klasa uruchamiasz tę metodę main, dzięki czemu Twój program może się wykonać. Wystarczy, że będziesz miał jedną klasę z tą metodą. Klasa może znajdować się w dowolnym pakiecie, ale gdy korzysta ona z klas znajdujących się w innych pakietach, będzie trzeba je importować słowem kluczowym import.

0 głosów
odpowiedź 22 lipca 2018 przez hiimRealgjm Początkujący (360 p.)
Brak importu klasy Punkt.

 

Od samego początku naucz się korzystać z IDE do Javy, które wykorzystuje się komercyjnie tj. InteliJ IDEA Community do Desktop/Javy konsolowej/ogólnie Javy takiej "vanilla", Android Studio do Androida, InteliJ IDEA Ultimate to rzeczy webowych w Javie typu Spring, JavaEE, Struts, JSF.

 

Pozdrawiam, gjm
–1 głos
odpowiedź 26 marca 2018 przez Wiciorny Ekspert (270,190 p.)

Klasa publiczna to klasa która powinna posiadać metodę  Main stąd jako 1 proces powinna być uruchamiana tylko 1 klasa DOMYŚLNIE PUBLICZNA 

public class UstawPunkt {

    public static void main(String[] args){

        Punkt punkt =new Punkt();
        punkt.wspX=10;
        punkt.wspY=20;
        System.out.println("Współrzędne punktu to("+punkt.wspX+"),("+punkt.wspY+")");


    }
}

sory ze w cytat. Klasa która uruchamiasz nie widzi klasy... Punkt, nie wie o jaką klase chodzie.

Albo problem leży w kompilacji - ścieżce albo umieść klase punkt w klasie uruchomieniowej tzn 

 

 

public class UstawPunkt {

    public static void main(String[] args){

        Punkt punkt =new Punkt();
        punkt.wspX=10;
        punkt.wspY=20;
        System.out.println("Współrzędne punktu to("+punkt.wspX+"),("+punkt.wspY+")");


    }
}

class Punkt {

    int wspX;
    int wspY;

}

// zamień druga na niepubliczną i umieść w 1 pliku wtedy kompilacja 

javac UstawPunkt.java 

zadziała i odpalenie java UstawPunkt 

 

Lub umieść 2 klasy w 1 katalogu i wykonaj 

javac twojkatalog/*.java

komentarz 26 marca 2018 przez blofeld Użytkownik (700 p.)

Zrobiłem tak jak Panowie polecili i nie pomogło hehe. Spróbowałem w jednej zmienić z public class na class a w drugiej pozostawić pełną nawzę i na odwrót. Kompilowałem i nie pomogło. Nie wiem czy problemem nie będzie to, że znajdują się w jednym folderze z wieloma innymi plikami jakie kompilator mi tworzy podczas nauki ? Pełne okna wyglądają tak

package com.company;

    public class Punkt {

    int wspX;
    int wspY;

}

i

package com.company;

    public class UstawPunkt {

    public static void main(String[] args){

        Punkt punkt =new Punkt();
        punkt.wspX=10;
        punkt.wspY=20;
        System.out.println("Współrzędne punktu to("+punkt.wspX+"),("+punkt.wspY+")");


    }
}

Pomocy laugh

 

1
komentarz 22 lipca 2018 przez hiimRealgjm Początkujący (360 p.)

@Wiciorny, "Klasa publiczna to klasa która powinna posiadać metodę  Main" CO K*RWA?! Klasa publiczna to klasa, która jest widoczna nie tylko w jednym pakiecie w którym została zdefiniowana tylko również w innych. Jedynym "narzutem" co do klas publicznych jest to, że w jednym pliku musi być tylko jedna klasa publiczna, o nazwie zgodnej z nazwą pliku (jedna, bo plik może mieć tylko jedną nazwę).

 

Pozdrawiam, gjm

komentarz 22 lipca 2018 przez Wiciorny Ekspert (270,190 p.)
yyy zanim się bzdurnie wypowiesz, ogarnij czym jest Pakietyzacja- to co piszę to  odnosi się do Pakietu :) ... poczytaj czym jest pakiet javowy i dlaczego Publiczna klasa wtedy musi byc  tylko jedna.

Nie korzystaj z ide, spróbuj odpalić pakiet class- z kilkoma publicznymi :)  za pomocą  cmd
komentarz 22 lipca 2018 przez RafalS VIP (122,820 p.)
Jak to odpalic pakiet class? Masz na mysli pojedynczy plik class? Wtedy mowimy o pojedynczej klasie, a pisales ze ze odnosisz sie do pakietu (package).
komentarz 22 lipca 2018 przez RafalS VIP (122,820 p.)
W pakiecie moze byc tylko jedna klasa publiczna? Pytam bo chyba nie do konca zrozumialem wypowiedz.
komentarz 23 lipca 2018 przez hiimRealgjm Początkujący (360 p.)

@Wiciorny, proszę Ciebie, czytaj ze zrozumieniem xD

 

Nigdzie nie napisałem, że musi być jedna publiczna klasa na pakiet, tylko na plik -_-

Podobne pytania

0 głosów
3 odpowiedzi 1,833 wizyt
pytanie zadane 22 sierpnia 2018 w Java przez asxz Nowicjusz (140 p.)
0 głosów
4 odpowiedzi 817 wizyt
pytanie zadane 15 lipca 2017 w Rozwój zawodowy, nauka, praca przez goldzik Nowicjusz (200 p.)
0 głosów
0 odpowiedzi 144 wizyt
pytanie zadane 21 marca 2020 w Java przez Stararara Początkujący (300 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...