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

Dziwny problem z najprostrzym package JAVA

Aruba Cloud - Virtual Private Server VPS
0 głosów
158 wizyt
pytanie zadane 28 czerwca 2024 w Java przez Wojo772233 Początkujący (480 p.)

Witam. Czemu moja struktura katalogów dla takiego kodu:
 

package mypack;

public class Balance {
    String name;
    double bal;

    Balance(String n, double b){
        bal = b; 
        name = n;
    }

    void show()
    {
        if(bal < 0)
            System.out.println("-->> ");

        System.out.println(name + ": " + bal + " zł");
    }
}
package mypack;

public class AccountBalance {
    public static void main(String[] args) {
        Balance[] current = new Balance[3];
        current[0] = new Balance("fielding", 123.23);
        current[1] = new Balance("Wilhelm Tell", 157.02);
        current[2] = new Balance("Tom Jackson", -12.23);

        for(int i = 0; i < 3; i++){
            current[i].show();
        }
    }
}

musi wyglądać tak że pliki Balance i AccountBalance muszą być w katalogu o ścieżce:
"C:\Users\wojo4\OneDrive\Pulpit\Kompendium\projekt\mypack\mypack\Balance.java"

oraz

"C:\Users\wojo4\OneDrive\Pulpit\Kompendium\projekt\mypack\mypack\AccountBalance.java"
 

a kolejny plik pakietu "mypack.xd" nie musi mieć podwójnego folderu:
"C:\Users\wojo4\OneDrive\Pulpit\Kompendium\projekt\mypack\mypack\xd\test.java"
oto jego kod jakby ktos byl ciekawy:
 

package mypack.xd;

class test {
    static int wiek = 1;
    static void testuj(){
        System.out.println("wiek = " + wiek);
    }    

    public static void main(String[] args) {
        testuj();
    }
}

 

1 odpowiedź

0 głosów
odpowiedź 28 czerwca 2024 przez Wiciorny Ekspert (280,450 p.)

Nie wiem czemu tak być musi, bo generalnie tak być nie musi. Nie wiem kto tego wymaga.

Jest istotna różnica między tymi dwoma pakietami, mianowicie W Javie, klasa u Ciebie test   jest bez modyfikatora dostępu (czyli bez słowa kluczowego public, protected lub private) ma domyślny poziom dostępu, zwany również poziomem dostępu pakietowego (ang. package-private).
Więc ta klasa nie jest widoczna poza pakietem mypack.xd

Klasy pozostałe są publiczne, dostępne wszędzie, nie muszą być w tym samym pakiecie, są widoczne również w pakiecie mypack.xd

class Balance
 -> jej instancja, obiekt jest wykorzystywany przez klasę  class AountBalance z racji, że obie klasy są publiczne, nawet jak nie będą w tym samym pakiecie, to spokojnie możesz wykonać te linię 

  Balance[] current = new Balance[3];

natomiast spróbuj dodać teraz do jednej z twoich klas w pakiecie mypackage klasę test 
 

test myTest = new Test(); // tego nie da sie zrobic po za pakietem wiec bedzie blad

chociaż z tego co napisałeś, twoja klasa test i tak znajduje się w dodatkowym pakiecie xd, który znajduje się w pakiecie mypackage
\projekt\mypack\mypack\xd\   ->mypack\mypack jest to pakiet mypack w którym jest pakiet mypack i potem jeszcze pakiet xd. 

Podobne pytania

0 głosów
0 odpowiedzi 373 wizyt
pytanie zadane 6 kwietnia 2023 w Systemy operacyjne, programy przez MacieKap Bywalec (2,400 p.)
0 głosów
1 odpowiedź 203 wizyt
pytanie zadane 18 czerwca 2021 w PHP przez Renzov Obywatel (1,220 p.)
0 głosów
0 odpowiedzi 209 wizyt
pytanie zadane 17 czerwca 2021 w PHP przez Renzov Obywatel (1,220 p.)

93,335 zapytań

142,330 odpowiedzi

322,409 komentarzy

62,670 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...