Я действительно немного смущен. Обычная подпись для вызова метода или переменной доступного класса (класс/объект). (Метод/переменная). Тогда как мы даем System.out.println()? Поскольку System.out дает только тип возвращаемого значения, но не относится к одному классу. Также в сервлетах this.getServletConfig() getInitParameter ("defaultUser") не имеет для меня смысла, поскольку getServletConfig() и getInitParameter являются функциями-членами одного и того же класса, поэтому подпись становится чем-то вроде class.method1().method2(), где method1 и method2 являются функциями-членами одного класса. Может кто-то объяснить, пожалуйста.
Пример:
Class CascMethodClassB()
{
public CascMethodClassA methodTest()
{
CascMethodClassA obj1 = new CascMethodClassA();
return obj1;
}
} /*Class CascMethodClassB ends*/
Class CascMethodClassA()
{
public int varTest;
public CascMethodClassA()
{
varTest = 7;
}
} /*Class CascMethodClassA ends*/
Class CascMethodClassC()
{
CascMethodClassB obj2 = new CascMethodClassB();
int varTestC = obj2.methodTest().varTest
public static void main(String[] args)
{
System.out.println("varTest in CascMethodClassA is: "+ varTestC);
} /*Class CascMethodClassC ends*/
}
Благодарю, Фрагги.
Оба варианта - разные.
В первом случае out
является открытым статическим членом в классе System
. Член out
имеет тип PrintStream
, поэтому вызов
System.out.println()
вызовет метод println()
из объекта PrintStream
(out
).
Второй случай - это то, что называется цепочкой методов. Случается, что class.method1()
вернет экземпляр объекта, в соответствии с документами Java он вернет объект ServetConfig
. Таким образом, вы можете снова вызвать метод из этого возвращенного объекта. Другой способ увидеть этот вызов (скобки являются избыточными, просто там, чтобы вы могли визуализировать порядок вызовов):
(ClassName.someMethod1()).someMethod2();
System.out
- это публичная переменная класса типа PrintStream
, а не метод. Поэтому вы можете вызвать на нем метод println
, который возвращает void
.this.getServletConfig().getInitParameter("defaultUser")
имеет смысл, если вы понимаете вызовы метода цепочки. В этом случае вы: Servlet
ServletConfig
getInitParameter
либо значения String
возвращается getInitParameter
метода getInitParameter
объекта ServletConfig
obj1.methodA().etc...
obj1.methodA(whateverCommaSeparatedArguments).etc...
obj1.methodA().etc...
либо obj1.methodA(whateverCommaSeparatedArguments).etc...
, либо obj1.variableA.etc...
Каждый не-void метод возвращает тип, который может быть другим типом для класса объявления, поэтому в цепоченном методе/поле будут указаны методы возвращаемого типа (а не класс, из которого он вызвал, или класс, определяемый первым методом в).
Например, чтобы разбить System.out.printkln()
:
System.out // out is a public field of type PrintStream
.println() // println() is a method of PrintStream, not System