pol*_*nts 17
首先,技术性:" 方法也是静态的" 并非如此main.您可以main使用您选择的任何签名来定义非静态方法; 它不会是一个有效的Java应用程序入口点.
关于"静态方法应该只使用静态变量",这也是不正确的.这里的关键概念是静态方法和字段是特定于类的,而不是特定于实例的.如果您实际上没有该类的实例,则根本无法访问实例变量/方法; 这是一个编译错误.
所以准确地说,如果没有实例,则无法访问实例字段/方法.您可以在没有实例的情况下访问静态字段/方法.如果需要从静态方法访问实例字段/方法,则必须以这种或那种方式获取该类的实例,方法是简单地实例化它,或者从静态字段或方法参数获取对它的引用.
我们来看看这个简单的例子:
public static void main(String args[]) {
System.out.println(args.length);
}
Run Code Online (Sandbox Code Playgroud)
length是不是一个静态字段; 它是数组实例的实例字段,即args.静态方法main能够获取此实例(从而访问其实例方法和字段),因为它作为参数传入.
此外,println是NOT一个静态方法; 它是实例的实例方法PrintStream.静态方法main能够通过访问静态字段得到这个实例out的类System.
总结一下:
mainpublic和staticvoid并将String[]参数作为参数main不必是Java应用程序入口点
此外,
new实例static类的字段访问它static类方法的返回值ThrowableMih*_*ria 16
你的问题:声明"静态方法应该只使用静态变量"是否正确?
不.声明不正确.
正确的语句将是"静态方法只能使用那些定义为静态的实例变量"
看看下面的代码并阅读评论:
Class A{
int i;
static int j;
public static void methodA(){
i = 5; //cannot use since i is not static
j = 2; //can use.
int k = 3; //k is local variable and can be used no problem
**EDIT:**//if you want to access i
A a = new A();
//A.i = 5; //can use.
a.i = 5; // it should be non-capital "a" right?
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23582 次 |
| 最近记录: |