2016-03-06 2 views
3

здесь:Является ли 'println()' функцией статического члена класса PrintStream или функции члена экземпляра?

System.out.println("Hi, this is frist program"); 

ли println() статическая функция-член класса PrintStream или член экземпляра функции?

Как сказал мой учитель: когда есть имя (.) после имени класса, то, безусловно, мы пытаемся получить доступ к статическому члену класса.

Как здесь находится статическая ссылочная переменная, и имеет ссылку на класс PrintStream. Итак, мой вопрос в том, что функция println() обязательно должна быть статической функцией-членом?

ответ

4

Нет, println - метод экземпляра класса PrintStream. Это out, который является статическим членом класса System.

System.out 
     ^--^ 
     static member of the class System, returns a PrintStream instance 

System.out.println(...) 
      ^------^ 
      instance method of PrintStream 

out объявлен

public static final PrintStream out 

в классе System, так что статический член, и вы к нему доступ с System.out (см to this question для модификатора final).

println() это метод экземпляра класса PrintStream объявлен как

public void println() 
+0

что это 'final' значит? – Infinity

+0

@Infinity Хороший вопрос, я связался с другим вопросом, который подробно рассказывает об этом. – Tunaki

+0

все в порядке, спасибо – Infinity

1

No, println - метод экземпляра PrintStream, как вы можете видеть в Javadoc PrintStream.

аннулируются java.io.PrintStream.println (String х)

System.out дает ссылку на PrintStream экземпляр, для которого println выполняется.

0

println() является не статическая функция (экземпляр) членом класса PrintStream.

out является статическим ссылка на объект типа PrintStream, внутри System класса.

out является ссылкой, out.prinln() относится к методу экземпляра out. В этом случае out также является статическим членом другого класса, но это не имеет никакого отношения к методу println()