黑马程序员技术交流社区
标题:
java static 问题
[打印本页]
作者:
王丽
时间:
2011-7-28 11:04
标题:
java static 问题
我刚才在方法里定义了一个static变量,可是不成,我想问一下为什么?
作者:
黑马-胡占朝
时间:
2011-7-28 11:20
标题:
回复 楼主 的帖子
static方法就是没有this的方法。在static方法的内部不能调用非静态的方法,反过来是可以的。
可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法------static方法的主要用途。
static方法很想C里面的全局变量,但是在类中置入static方法就可以使用他static方法和static作用域。
[
本帖最后由 黑马-胡占朝 于 2011-07-28 15:08 编辑
]
作者:
匿名
时间:
2011-7-28 11:24
你的这个方法是静态的话,成员变量也可以是静态的,但是,方法却不可以!
方法是非静态的,成员变量也可以静态的,方法也可以是静态的!
作者:
匿名
时间:
2011-7-28 12:11
非静态成员(即实例成员),是与实例共存的,而静态成员是与类共存的.
有类不一定就有实例. 在没有实例的情况下,我们就不能调用非静态成员。
就是不能调用你写的方法,而方法中的变量却是静态的,说明可以调用这个变量。
但是这显然是不可能的(方法不能调用,而方法中的变量能调用)。
public void staticTest(){
static int a=0;
}
MyEclipse中的提示:
Multiple markers at this line
- Illegal modifier for parameter a; only final is permitted
非法的参数a,只有用final是合法的。
作者:
匿名
时间:
2011-7-28 12:43
静态方法中可以存在静态成员,也可以有非静态成员,但是非静态的方法中就不能有静态成员啦
作者:
匿名
时间:
2011-7-28 14:34
标题:
回复 楼主 的帖子
楼主童鞋,声明为static的变量实质上就是全局变量,
换句话说,生命力比较顽强,能活到程序运行结束,但你要放到某个非static的方法中,可就不一定能活那么久了?
这样的情况是对系统资源的浪费,尤其是内存,程序是不允许的。说的难听点,叫尸位素餐。
作者:
朱玲均
时间:
2011-7-28 16:22
//请看以下代码
public class Person {
public void run1(){
int a = 11;
System.out.println("a="+a+" from run1()");
}
public void run2(){
int a = 22;
System.out.println("a="+a+" from run2()");
}
public static void main(String[] args){
Person p = new Person();
p.run1();
p.run2();
}
}
复制代码
输出结果:
a=11 from run1()
a=22 from run2()
复制代码
由此,可以看出,run1()中定义的变量a和run2()中定义的变量a没有一毛钱关系,他们的作用域取决于各自所在的方法,当方法被调用执行的时候,对应所在的变量被创建,当方法调用结束,对应所创建的变量就会随之消失。
静态变量的本意是为了让所有对象共享这个变量,要是试图在方法中定义静态变量的话,就会发生逻辑错误。就是,调用方法已经结束,而在这个方法里面定义的变量却还存在!
[
本帖最后由 朱玲均 于 2011-07-28 16:28 编辑
]
作者:
匿名
时间:
2011-7-28 18:08
lz能否具体点。呵呵~有点抽象。楼主是不是这个意思:[code]public class StaticTest
{ static int a=1;
public static void main(String[] args)
{
//static int a=1;//这不行
System.out.println("main()中的a是"+a);
new StaticTest().f();
f1();
}
public void f()
{
//static int a=1;//这也不行
System.out.println("f中的a是"+ ++a);
}
public static void f1()
{
//static int a=1;//这也不行
int a=3; //这里替换了全局变量a
System.out.println("f1中的a是"+ ++a);
}
}[/code]因为static变量是在类加载的时候载入内存的,属于类变量,放在方法中使用的是非静态的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2