Sposób z książki

0

Poniżej screen z książki Java podstawy wydanie IX - Gary Cornell
http://obrazki.elektroda.pl/6730941600_1444935431.png

1.Chce pokazać jakim jeżykiem polskim jest pisana ta książka. Czytając tow ojczystym językiem czasami człowiek nie wiem co przeczytał, podobnych sformułowań jest wiele. Czy ktoś rozumie to zdanie podkreślone??

  1. Zaznaczyłem kółkiem pierwszy podpunkt. Też nie wiadomo o co w nim dokładnie chodzi. To jest chyba nieprawda co piszą, bo to mi sie nie zgadza z tym co wyczytałem wcześniej w tej książce, bo gdy wywołamy konstruktor bezparametrowy a on bedzie miał pusty blok a jakieś pole obiektu bedzie zainicjowane od razu w miejscu deklaracji pola czyli u nas zmienna name lub w bloku inicjującym czyli u nas zmienna id to ta wartość zostaje a pozostałe są inicjowane wartościami domyślnymi u nas zmienna salary. A wg tego zdania w pierwszym podpunkcie powinno przyjąć wartość domyślną.

Co wy na to??? Chyba że to dotyczy tylko tych pól które są tylko zdeklarowane, bez inicjacji??

Poniżej daje kod tego programu:

import java.util.*;
 
/**
* Ten program demonstruje techniki konstrukcji obiektów.
* @version 1.01 2004-02-19
* @author Cay Horstmann
*/
public class ConstructorTest
{
   public static void main(String[] args)
   {
      // Wstawienie do tablicy staff trzech obiektów klasy Employee.
      Employee[] staff = new Employee[3];
 
      staff[0] = new Employee("Harry", 40000);
      staff[1] = new Employee(60000);
      staff[2] = new Employee();
 
     // Wydruk informacji o wszystkich obiektach klasy Employee.
      for (Employee e : staff)
         System.out.println("name=" + e.getName() + ",id=" + e.getId() + ",salary="
               + e.getSalary());
   }
}
 
class Employee
{
   private static int nextId;
 
   private int id;
   private String name = "Test_Name"; // Inicjacja zmiennej składowej obiektu.
   private double salary;
 
   // Statyczny blok inicjujący.
   static
   {
      Random generator = new Random();
   // Ustawienie zmiennej nextId na losową liczbę całkowitą z przedziału 0 – 9999.
      nextId = generator.nextInt(10000);
   }
 
   // Blok inicjujący obiektów.
   {
      id = nextId;
      nextId++;
   }
 
   // Trzy konstruktory przeciążone.
   public Employee(String n, double s)
   {
      name = n;
      salary = s;
   }
 
   public Employee(double s)
   {
    // Wywołanie konstruktora Employee(String, double).
      this("Dupa" + nextId, s);                                             
   }
 
    // Konstruktor bezparametrowy (z domyślnymi wartościami).
   public Employee()
   {
       // Zmienna name zainicjowana wartością "Test_Name" — patrz wyżej.
       // Zmienna salary nie jest jawnie ustawiona — inicjacja wartością 0.
       // Zmienna id jest inicjowana w bloku inicjującym
   }
 
   public String getName()
   {
      return name;
   }
 
   public double getSalary()
   {
      return salary;
   }
 
   public int getId()
   {
      return id;
   }
}

Aby pokazać to co ja myslę o to wynik działania programu:

name=Harry,id=9234,salary=40000.0
name=Dupa,id=9235,salary=60000.0
name=Test_Name,id=9236,salary=0.0

0

nie wiem o co płaczesz. Raz, jest wersja angielska która ma mniej głupich błędów językowych. Dwa, wiesz co to errata? Trzy, dla wersji angielskiej też jest errata.

EDIT. tak sobie czytam twojego posta już 3 raz i też nie mogę zrozumieć o co ci chodzi w 2 punkcie :P ale może to brak skilla

0
  1. Ja rozumiem pierwsze zdanie, natomiast nie rozumiem jak można go nie rozumieć.
  2. Zdanie o inicjalizacji wartościami domyślnymi może być prawdziwe w takim sensie: przez chwilę wartości pól są wartościami domyślnymi, natomiast kiedy wykonuje się pierwsza instrukcja konstruktora bezparametrowego wartości pól są już nadane.
1

Ad. 1 Dłużej mi zajęło zrozumienie twojego drugiego punktu niż znaczenia tego stwierdzenia:)
Ad. 2 Przeczytaj podpunkt drugi a zrozumiesz. Przypisanie do zmiennej podczas jej deklaracji możesz czytać jako inicjator. Najpierw w ciele klasy parametry są domyślnie inicjializowane a dopiero potem są do nich przypisywane wartości przypisania, a potem dopiero wywoływany jest kod z konstruktora.

0

1.Pytałem sie o sens zdania innej osoby i też nie zbyt wiedziała dokładnie o co chodzi. Mam pewne swoje domysły ale po co tak pisać zawiłe zdanie, tam jest 3 zaprzeczenia nigdy, nie , niezbedny.
2. bogdans tam nie pisze jakiego dotyczy sie to konstruktora,
po drugie tak jak ty mówisz to miało by to sens gdyby pola w klasie nie były zainicjowane ale tylko zdeklarowane, wtedy by sie zgadzało.

Zauważ że mi chodzi o to, że niektóre pola w klasie są już zainicjowane, mają jakąś wartość i wg tego co pisze w tej książce wychodzi na to że wywołanie konstruktora wiąże się z zainicjowaniem wszystkich pół wartościami domyślnymi a wiec ze skasowaniem już wcześniej zainicjowanych pól a tak nie jest. (Coś tu pokręcili w tej książce zwłaszcza że wcześniej piszą inaczej)

0
  1. Zostaw na razie Javę, skup się na poznawaniu języka polskiego.
  2. Niczego nie pokręcili, a Ty jak zwykle niczego nie potrafisz zrozumieć. Dlaczego uważasz, że niektóre pola są już zainicjowane? Dlatego, że deklaracje pól są przed konstruktorem?
    Poniższa definicja klasy jest równoważna z Twoją (książkową):
class Employee
{
   private static int nextId;
 

 
   // Statyczny blok inicjujący.
   static
   {
      Random generator = new Random();
   // Ustawienie zmiennej nextId na losową liczbę całkowitą z przedziału 0 – 9999.
      nextId = generator.nextInt(10000);
   }
 
   // Blok inicjujący obiektów.
   {
      id = nextId;
      nextId++;
   }
 
   // Trzy konstruktory przeciążone.
   public Employee(String n, double s)
   {
      name = n;
      salary = s;
   }
 
   public Employee(double s)
   {
    // Wywołanie konstruktora Employee(String, double).
      this("Dupa" + nextId, s);                                             
   }
 
    // Konstruktor bezparametrowy (z domyślnymi wartościami).
   public Employee()
   {
       System.out.println(name);
       // Zmienna name zainicjowana wartością "Test_Name" — patrz wyżej.
       // Zmienna salary nie jest jawnie ustawiona — inicjacja wartością 0.
       // Zmienna id jest inicjowana w bloku inicjującym
   }
 
   public String getName()
   {
      return name;
   }
 
   public double getSalary()
   {
      return salary;
   }
 
   public int getId()
   {
      return id;
   }

   private int id;
   private String name = "Test_Name"; // Inicjacja zmiennej składowej obiektu.
   private double salary;   
}
0
  1. Nie mów że to jest prosto napisane, bo pytałem innych i musieli sie zastanowić nad tym, nikt od razu nie wiedział. A wiec nie jest to proste i nie wiem po co takie robić zawiłości. Takich podobnych zawiłosci jest wiecej w tej książce, pytam sie po co tak utrudniać, czasami przez takie dziwactwa rozmyślam o co autorowi chodziło i tracę czas nad rozmyślaniem zamiast iść dalej. Dopiero jak przemyśle to wiadomo o co chodzi. Gdyby autor pisał prostym językiem szybciej nauczył bym sie tej javy. A jak już rozumiem wtedy wydaje sie ta java prosta w danym punkcie nauki i od razu mam pomysł jak można to szybko i prosto wytłumaczyć bez zbędnego dziwactwa.

Wcale nie uważam że programowanie jest trudne, to zależy od nauczyciela / autora książki w jaki sposób tłumaczy i jakiego używa słownictwa.

2.Przecież drugi punkt tak mówi. Ze wszystko jest wykonywane w takiej kolejności jak są napisane w klasie.

Napisałem kolejnego posta po koledze Radomiej bo on mnie wyprzedził w wysłaniu wiadomości i nie widziałem jej wczesniej. Po jego wypowiedzi rozumiem to tak że po wywołaniu konstruktora wszystkie pola klasy (nawet statyczne) na chwilę są inicjowane wartościami domyślnymi a dopiero potem wkraczają inicjatory (które moga być użyte przy deklaracji zmiennej), bloki inicjujące i potem konstruktory.

DOBRZE ZROZUMIAŁEM ?????

0

Wybacz że to powiem, ale nie nadajesz się do programowania w zupełności. Życzę zdrowia i zmiany studiów/zainteresowań.

1

Mam dobry nastrój, więc zrobię korektę twojej wypowiedzi: „1.Chce pokazać jakim jeżykiem polskim jest pisana ta książka. Czytając tow ojczystym językiem czasami człowiek nie wiem co przeczytał, podobnych sformułowań jest wiele. Czy ktoś rozumie to zdanie podkreślone??”

Zgodnie z zasadami języka polskiego popełniłeś następujące błędy w dwóch krótkich zdaniach:

  1. Chce -> Chcę
  2. jeżykiem -> językiem
  3. jakim jeżykiem polskim jest pisana ta książka -> a ile jest jeżyków polskich?
  4. tow -> to w
  5. ojczystym językiem -> wtf?
  6. człowiek nie wiem -> człowiek nie wie
  7. , podobnych sformułowań... -> to powinno być nowe zdanie
  8. Czy ktoś rozumie to zdanie podkreślone -> Czy ktoś rozumie to podkreślone zdanie
  9. ?? -> ? (stosowanie więcej niż jednego znaku zapytania to oznaka fatalnego stylu i nie przystoi nikomu, kto zżyma się na styl innego tekstu)

PS. W oryginale są takie zdania: „This mechanism is never necessary and is not common.” oraz „All data fields are initialized to their default values (0, false, or null).” - chyba powinieneś napisać zażalenie do Horstmanna, że nie umie Javy...

0

Co niektórzy nie są zbyt pomocni i zamiast pokazać, prosto powiedzieć to wyjadą z czymś z kosmosu. Nie wiem może cwaniakowanie że sie dużo wie sprawia komuś przyjemność ale temu co sie uczy to bardzo przeszkadza. Gdybym rozumiał od razu wszystko co pisze w tej książce którą przerabiam to bym tutaj nie pytał. A jak czegos nie wiem to sie dopytauje, czasamy wystarczy potwierdzić czy dobrze mysle a innym razem wystarczy proste zdanie, nie oczekuje tutaj od Was jakis wykładów. Javy ucze się sam i oprócz książki i internetu nie mam nikogo aby bezpośrednio dopytać. A moje pytania są w dziale początkujący wiec nie ma sie co dziwic że pojawiają sie podstawowe pytania.
Mam prośbę jak ktos nie chce pomagać to niech lepiej nic nie pisze (opuści mój temat, jak czuje że chce pogadać z osoba na swoim poziomie to niech tam z nim dyskutuje) będzie lepiej dla mnie i niego a na do odpowiedzi na moje pytania zapraszam ludzi serdecznych i wyrozumiałych. Tak bedzie lepiej dla nas wszystkich.
Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1