public class example {
int a = 0;
public void m() {
int b = this.a;
}
public static void main(String[] args) {
int c = this.a;
}
}
我是java的新手。为什么我不能在main方法中使用“this”?
答案 0 :(得分:13)
this
指的是当前对象。但是,main
方法是静态的,这意味着它附加到类,而不是对象实例,因此main()
内没有当前对象。
为了使用this
,您需要创建类的实例(实际上,在此示例中,您不使用this
,因为您有一个单独的对象引用。但您可以使用this
方法中的m()
,例如,因为m()
是一个存在于对象上下文中的实例方法):
public static void main(String[] args){
example e = new example();
int c=e.a;
}
顺便说一句:你应该熟悉Java命名约定 - 类名通常以大写字母开头。
答案 1 :(得分:2)
您必须创建示例
的实例example e = new example()
e.m()
答案 2 :(得分:1)
Becasue main是static
。要访问a
,您还应将其声明为static
。静态变量不存在任何类的实例。仅当存在实例时,才存在非静态变量,并且每个实例都有自己的名为a
的属性。
答案 3 :(得分:1)
public class Example {
int a = 0;
// This is a non-static method, so it is attached with an instance
// of class Example and allows use of "this".
public void m() {
int b = this.a;
}
// This is a static method, so it is attached with the class - Example
// (not instance) and so it does not allow use of "this".
public static void main(String[] args) {
int c = this.a; // Cannot use "this" in a static context.
}
}
答案 4 :(得分:0)
除了Andreas的评论
如果您想使用'a'。然后,您将必须实例化新示例[更好地将示例类名称作为大写Eaxmple]。
像
这样的东西public static void main(String[] args) {
Example e = new Example();
int c = e.a;
}
HTH
答案 5 :(得分:0)
main
方法是静态的,这意味着可以在不实例化example
类的情况下调用它(静态方法也可以称为类方法)。这意味着在main
的上下文中,变量a
可能不存在(因为example
不是实例化对象)。同样,如果没有首先实例化m
,则无法从main
致电example
:
public class example {
int a=0;
public void m(){
// Do stuff
}
public static void main(String[] args){
example x = new example();
x.m(); // This works
m(); // This doesn't work
}
}
答案 6 :(得分:0)
追加Andreas Fester回答:
z-index