java初学者遇到的小问题:无法从静态上下文中引用静态方法/变量(两种解决办法)...
2011-04-04 14:43
766 查看
java初学者经常会遇到的问题:无法从静态上下文中引用非静态变量
?non-static variable mainframe cannot be referenced from a static context
即在静态方法中不能引用非静态变量
为什么?
因为我们知道静态的方法可以在没有创建实例时使用,而申明为非静态的成员变量是一个对象属性,它只有在对象存在时引用,因此如果在对象未创建实例时我们在静态方法中调用了非静态成员方法自然是非法的,所以编译器会在这种时候给各错误.
简单说来,静态方法可以不用创建对象就调用,非静态方法必须有了对象的实例才能调用.因此想在静态方法中引用非静态方法是不可能的,因为它究竟引用的是哪个对象的非静态方法呢?编译器不可能给出答案,因为没有对象啊,所以要报错.
class HelloWorld
{
int a1 = 6;
public static void main(String[] args)
{
System.out.print(a1);
}
}
编译时报如下错:
[color=red]HelloWorld.java:7: 无法从静态上下文中引用非静态 变量 a1
System.out.print(a1);
^
1 错误[/color]
解决办法有两种,这是两种不同的思维方式,但结果却是一样的,殊途同归的道理:
[color=darkred]第一种:既然我们无法在静态上下文中引用非静态变量/方法,那么我们就顺着思路想,是不是在静态上下文中引用静态变量/方法就可以了(YES);[/color]
class HelloWorld
{
[color=darkblue]static[/color] int a1 = 6;
public static void main(String[] args)
{
System.out.print(abc.a1);
}
}
[color=darkred]第二种:一开始我们提到了,静态方法/变量可以在未创建实例时使用,而非静态成员变量/方法只能在创建了实例之后才可以使用[/color];
因为非静态的变量a1没有实例化,改为如下程序
class HelloWorld
{
int a1 = 6;
public static void main(String[] args)
{
[color=darkblue]HelloWorld abc=new HelloWorld();[/color]
System.out.print(abc.a1);
}
}
[color=red]
编译通过。 [/color]
?non-static variable mainframe cannot be referenced from a static context
即在静态方法中不能引用非静态变量
为什么?
因为我们知道静态的方法可以在没有创建实例时使用,而申明为非静态的成员变量是一个对象属性,它只有在对象存在时引用,因此如果在对象未创建实例时我们在静态方法中调用了非静态成员方法自然是非法的,所以编译器会在这种时候给各错误.
简单说来,静态方法可以不用创建对象就调用,非静态方法必须有了对象的实例才能调用.因此想在静态方法中引用非静态方法是不可能的,因为它究竟引用的是哪个对象的非静态方法呢?编译器不可能给出答案,因为没有对象啊,所以要报错.
class HelloWorld
{
int a1 = 6;
public static void main(String[] args)
{
System.out.print(a1);
}
}
编译时报如下错:
[color=red]HelloWorld.java:7: 无法从静态上下文中引用非静态 变量 a1
System.out.print(a1);
^
1 错误[/color]
解决办法有两种,这是两种不同的思维方式,但结果却是一样的,殊途同归的道理:
[color=darkred]第一种:既然我们无法在静态上下文中引用非静态变量/方法,那么我们就顺着思路想,是不是在静态上下文中引用静态变量/方法就可以了(YES);[/color]
class HelloWorld
{
[color=darkblue]static[/color] int a1 = 6;
public static void main(String[] args)
{
System.out.print(abc.a1);
}
}
[color=darkred]第二种:一开始我们提到了,静态方法/变量可以在未创建实例时使用,而非静态成员变量/方法只能在创建了实例之后才可以使用[/color];
因为非静态的变量a1没有实例化,改为如下程序
class HelloWorld
{
int a1 = 6;
public static void main(String[] args)
{
[color=darkblue]HelloWorld abc=new HelloWorld();[/color]
System.out.print(abc.a1);
}
}
[color=red]
编译通过。 [/color]
相关文章推荐
- java中调用本地动态链接库(*.DLL)的两种方式详解和not found library、打包成jar,war包dll无法加载等等问题解决办法
- ibatis初学者遇到的问题及解决办法
- android中画文字的换行 办法(对于遇到canvas.drawText(String s )无法实现换行问题的解决)
- Ubuntu root用户下java -version无法获取java环境变量解决办法
- java.lang.IllegalArgumentException: pointerIndex out of range 问题的两种解决办法
- 常见Java开发过程中遇到的问题及其解决办法
- java AES时遇到的问题和解决办法
- 详解关于Windows10 Java环境变量配置问题的解决办法
- (转)远程连接webservice遇到无法访问的问题解决办法
- 20140921遇到的问题-----JAVA----JS------jquery-1.11.1.min.js找不到的原因和解决办法
- 遇到无法引用res文件的解决办法2
- 无法从静态上下文中引用非静态 变量 this
- 细谈 Web Api 图片上传,在使用 Task.ContinueWith 变量无法赋值问题的解决办法!
- 使用一个框架遇到问题,搜索到的办法都尝试了,无法解决,该怎么办
- 关于Windows10 Java环境变量配置问题的解决办法
- 初学者学MvcMovie遇到的问题解决办法
- java.lang.IllegalArgumentException: pointerIndex out of range 问题的两种解决办法
- 连接Oracle11g数据库时遇到无监听,网络适配器无法建立等问题的一些解决办法
- java String类有关静态变量,常量池,引用对象的问题
- 报错!无法从静态上下文中引用非静态 变量