java中关于static和static块的一个问题

classE20Class{static{inti;System.out.println("staticloading");}E20Class(){System.out.... class E20Class {
static {
int i;
System.out.println("static loading");
}
E20Class() {
System.out.println("E20Class creating");
}
}
public class E20ClassLoad {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("begin");
System.out.println(E20Class.i);
}
}
这个程序中,提示System.out.println(E20Class.i);有错。
当我把E20Class这个类改成
class E20Class {
public static int i;
static {
// int i;
System.out.println("static loading");
}
E20Class() {
System.out.println("E20Class creating");
}
}
就没有错误,这是因为什么呢?
谢谢你的回答hnxpmm。但是我还有一点不明白,static所定义的不应该是共用的么,为什么用static块之后,其他的类就不能访问了呢?还有我也创建了E20Class的对象,在static块中的i还是没有办法调用。
那么static和static块的实现的功能有什么不同呢? 难道static只是为了用于初始化而设计的吗?
展开
 我来答
SecretPurple
2009-08-10 · 超过12用户采纳过TA的回答
知道答主
回答量:82
采纳率:0%
帮助的人:30.8万
展开全部
你不妨如下修改下:

class E20Class {
public static int i=2;
static {
int i=1;
System.out.println("static loading");
}
E20Class() {
System.out.println("E20Class creating");
}
}
输出结果如下:
begin
static loading
2

static块中的i为局部变量,static块在类初始化的时候就执行,但是里面的i相当于类函数中的局部变量。即使类实例化了,也无法直接调用这种局部变量。

LZ可以尝试把static块中的i定义为static型,会报错,同样的你在一个非静态函数中也不能定义static的局部变量。

然后LZ可以如下尝试,再次修改:
class E20Class {
public static int j=2;
static {
int i=1;
j = i;
System.out.println("static loading");
}
E20Class() {
System.out.println("E20Class creating");
}
}

然后E20ClassLoad输出E20Class.j;
结果如下:
begin
static loading
1

然后LZ可以继续放在构造函数中尝试!

希望以上对你有帮助。
haoluogaga
2009-08-10 · TA获得超过2378个赞
知道小有建树答主
回答量:1265
采纳率:0%
帮助的人:1011万
展开全部
static是静态的意思
如果在方法或字段前面加static
那么调用的地方也必须是静态的,不然无法直接访问,如果想访问必须使用
new 关键字 实例化该类 然后再用对象点出来。
例如 DBHelper db=new DBHelper();
db.方法名 或 db.字段名

前面声明为static主要是因为方便调用。不需要用关键字new 来实例化
就可以直接用点的形式使用。
例如
DBHelper.方法名 或 DBHelper.字段名
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友388688327
2009-08-10 · TA获得超过1053个赞
知道小有建树答主
回答量:1297
采纳率:0%
帮助的人:959万
展开全部
第一,因为你的int i是在静态代码块中定义的,它的作用域只在静态代码块中有效.而你在mian方法中直接用类名.i调用,这样是找不到它的.

在第二个,你在类中把i定义成了一个静态变量,我想关于静态变量的定义你应该知道吧,这时再用类名.i,就可以直接调用它了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9b2daed5f
2009-08-10 · 超过10用户采纳过TA的回答
知道答主
回答量:79
采纳率:0%
帮助的人:32.5万
展开全部
第一次见这样的问题, 关注下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式