Skip to content

Commit ad4ed37

Browse files
authored
Chapter 1: additional explanations about statics
1 parent 3385262 commit ad4ed37

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

tutorial/01_Hello_World.adoc

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,37 @@ public class SomeClass {
139139

140140
Статические поля и методы являются общими для всего класса. Для обращения к таким полям и для вызова таких методов экземпляр класса не требуется.
141141

142-
Нестатические поля и методы специфичны для экземпляра класса. Для обращения к таким полям и для вызова таких методов у вас должен быть экземпляр класса. Нестатический метод может прочитать нестатическое поле (потому что экземпляр класса у него уже есть) или вызвать нестатический метод -- по той же причине. Статический метод, однако, экземпляра класса не имеет и поэтому не может читать нестатические поля и вызывать нестатические методы.
142+
Нестатические поля и методы специфичны для экземпляра класса. Для обращения к таким полям и для вызова таких методов у вас должен быть экземпляр класса. Нестатический метод может прочитать нестатическое поле (потому что экземпляр класса у него уже есть) или вызвать нестатический метод -- по той же причине. Статический метод, однако, экземпляра класса не имеет и поэтому не может читать нестатические поля и вызывать нестатические методы без явного указания экземпляра класса.
143143

144144
Попробуйте сами определить, может ли нестатический метод прочитать статическое поле.
145145

146+
_Примерно то же самое можно объяснить и другими словами. Любой *нестатический* метод имеет дополнительный параметр, не указанный явно в списке -- так называемый *получатель* (receiver). Получатель -- всегда ссылка на экземпляр класса, в котором описан данный метод; для её обозначения можно использовать ключевое слово `this`. *Статический* метод такого дополнительного параметра не имеет. Для вызова *нестатического* метода или обращения к *нестатическому* полю всегда требуется получатель правильного типа, указанный явго или неявно. Для вызова *статического* метода или обращения к *статическому* полю этого не требуется._
147+
148+
[source,java]
149+
----
150+
public class SomeClass {
151+
public int x = 1;
152+
static public final y = 2;
153+
public void foo() {
154+
bar(); // Ok (implicit receiver)
155+
this.bar(); // Also Ok (explicit receiver)
156+
System.out.println(this.x); // Ok (explicit receiver)
157+
System.out.println(y); // Ok (no receiver required)
158+
}
159+
160+
public void bar() {
161+
baz(); // Ok (no receiver required)
162+
}
163+
164+
static public void baz() {
165+
System.out.println(y); // Ok (no receiver required)
166+
System.out.println(x); // ERROR (receiver required!)
167+
SomeClass sc = new SomeClass();
168+
System.out.println(sc.x); // Ok (explicit receiver)
169+
}
170+
}
171+
----
172+
146173
=== Типы
147174

148175
Язык Java имеет статическую типизацию. Это значит, что тип любой переменной, параметра, поля, результата функции известен на момент компиляции программы либо выводится во время компиляции программы. Типы бывают разные и делятся на две большие группы:

0 commit comments

Comments
 (0)