如何调用静态代码块中的变量???

Yudean_Read 2011-09-09 02:20:59


public class test {

public static int a;
static{
int a=1;
}

public static void mian (String [] args){

System.out.println(a);

}

这样的结果a不会输出1;是0,怎么让它输出1???
...全文
1275 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yudean_Read 2011-09-09
  • 打赏
  • 举报
回复
好像我想要的不可能实现的。同一个变量被我修改掉了
Yudean_Read 2011-09-09
  • 打赏
  • 举报
回复
还是不对,

public class fortest {
public static int aa;
static{
aa=1;
}
public void getaa(){aa=0;
}
}

public class testB {
public static void main(String [] args){
fortest fo =new fortest();
fo.getaa();
System.out.println(fo.aa);
}
}
得出的结果还是0;怎么修改让它变成1呢?
daijope 2011-09-09
  • 打赏
  • 举报
回复
对象初始化是从上到下依次执行的,不过你这两个a不是同一个变量啊,,,
Yudean_Read 2011-09-09
  • 打赏
  • 举报
回复
用静态的也是可以的。结贴!
Yudean_Read 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 liuyuanshijie 的回复:]

恩, 全局和局部问题.
[/Quote]
想要实现这样的功能是不可行的吗?
Yudean_Read 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 justforjoy 的回复:]

楼主再研究下变量的作用范围哈。。
[/Quote]
class A{
public static int a;
static {
a =1;
}
}
class B{
A newa =new A();
System.out.println(A.a);
}

输出结果为静态代码块里面的a=1。
代码不正确,但是这个是我要表达 的意思。正确的应该怎么写?
孤独剑客 2011-09-09
  • 打赏
  • 举报
回复
恩, 全局和局部问题.
love_gzhj 2011-09-09
  • 打赏
  • 举报
回复
不靠谱的事吗
justforjoy 2011-09-09
  • 打赏
  • 举报
回复
楼主再研究下变量的作用范围哈。。
Yudean_Read 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xufei616758169 的回复:]

貌似静态代码块就是用来初始化一些变量,尽然在里面定义,这是很不靠谱的,是不是?
[/Quote]静态代码块初始化变量,因为要在其他的类中调用这个变量,那么要再定义一个成员变量,等于静态代码块中的变量。实现起来好像有问题
漫步枫 2011-09-09
  • 打赏
  • 举报
回复
貌似静态代码块就是用来初始化一些变量,尽然在里面定义,这是很不靠谱的,是不是?
Yudean_Read 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zyc13701469860 的回复:]

引用 1 楼 fly_m 的回复:

static{
int a=1;
}
替换成
static{
a=1;
}

这样就可以了


+1
[/Quote]
如果上面public static int a ;去掉static的话,就不是了,静态代码块里面就必须要重新定义a;我在其他的类里面要调用a,希望这个a=1,好像就有问题了。

漫步枫 2011-09-09
  • 打赏
  • 举报
回复
就算不加static a的值不也是会变的吗
Mourinho 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fly_m 的回复:]

static{
int a=1;
}
替换成
static{
a=1;
}

这样就可以了
[/Quote]

+1
Yudean_Read 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ajun_studio 的回复:]

超出作用域 给你外面的a复制为1 就可以了
[/Quote]
哥,不是这样直接赋值就可以的啊,这个是简化的程序,真实的代码里面a=1里面就超级复杂的各种调用,而之前是用来初始化的一次。初始化了之后可以随意的调用多少次,例如a++;自增,如果在外面赋值的话,一直是a=1了。
飓风zj 2011-09-09
  • 打赏
  • 举报
回复
超出作用域 给你外面的a复制为1 就可以了
Yudean_Read 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fly_m 的回复:]

static{
int a=1;
}
替换成
static{
a=1;
}

这样就可以了
[/Quote]
如果变量不是static的呢?该怎么办?
CoffeeBean 2011-09-09
  • 打赏
  • 举报
回复
第二个变量的作用域仅仅是在静态代码块中吧,个人认为访问不到...
Yudean_Read 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fly_m 的回复:]

static{
int a=1;
}
替换成
static{
a=1;
}

这样就可以了
[/Quote]
发完贴我也在想是不是因为定义了两次的原因,哈哈,果然!谢啦
Fly_m 2011-09-09
  • 打赏
  • 举报
回复
static{
int a=1;
}
替换成
static{
a=1;
}

这样就可以了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧