public class Demo {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
public class Demo {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
public
reprezentuje viditelnost — metoda je veřejnávoid
reprezentuje návratový typ — nic nevracístatic
?main
, neboť žádný objekt dosud nemámeString name
) patří přímo jedné osobětoString
vrátí Person jméno této osoby
public class Person {
private String name; // name of this person
...
public String toString() {
return "Person " + name; // returns name of this person
}
}
static
.max
, která vrací maximální hodnotu dvou číselpublic class Calculate {
public static int max(int a, int b) {
if (a > b) return a;
return b;
}
}
static
.public class Calculate {
public int max(int a, int b) {
if (a > b) return a;
return b;
}
}
max
budu nyní potřebovat objekt třídy Calculate
Calculate c = new Calculate();
int max = c.max(1, 2); // method needs an object `c`
c
je tam úplně k ničemu,
s žádnými jeho atributy se nepracuje a ani žádné nemápublic class Calculate {
public static int max(int a, int b) {
if (a > b) return a;
return b;
}
}
...
int m = Calculate.max(1, 2);
Calculator.max
import static
dané metody*
, např.import static cz.muni.fi.pb162.Calculator.*;
...
int m = max(1, 2);
max
java.util.Arrays
Person
, která reprezentuje člověka, má každý člověk své (obvykle i odlišné) jménopublic class Person {
private String name;
private static int peopleCount = 0;
public Person(String name) {
this.name = name;
peopleCount++;
}
public static int howManyPeople() {
return peopleCount;
}
}
howManyPeople()
Person.howManyPeople(); // 0
Person jan = new Person("Jan");
Person.howManyPeople(); // 1
Person anna = new Person("Anna");
Person.howManyPeople(); // 2
Můžeme volat statickou metodu nad konkrétním objektem (instancí) dané třídy?
Person anna = new Person("Anna");
anna.howManyPeople();
Person
je to však správnější.Person.getName();
Person.getName()
vrátit? Nedává to smysl.Person
name
se nastaví až při zavolání konstruktorupublic class NonStaticTest {
private int count = 0;
public static void main(String args[]) {
count++; // compiler error
}
}
main
je statická — může používat pouze statické metody a proměnné.public class NonStaticTest {
private int count = 0;
public static void main(String args[]) {
NonStaticTest test = new NonStaticTest();
test.count++;
}
}
count
statický.static
není tak prosté, jak jsme dosud prezentovali :-)new
.getInstance()
.public class PersonCounter {
// here will be the singleton instance (object)
private static PersonCounter counter = null;
private int peopleCount = 0;
// "private" prevents creation of instance via new PersonCounter()
private PersonCounter() {}
// creates the singleton unless it exists
public static PersonCounter getInstance() {
if(counter == null) {
counter = new PersonCounter();
}
return counter;
}
public void addPerson() {
peopleCount++;
}
public int howManyPeople() {
return peopleCount;
}
}
import static java.lang.System.out;
public class HelloWorld {
public static void main(String[] args) {
out.println("Hello World!");
}
}
import static java.lang.System.out;
// developer is reading the code
out.println("Hello World!"); // what is out?
// few lines above:
PrintStream out;
// ahh ok, I thought it was System.out
/