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??
- 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