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只是为了用于初始化而设计的吗? 展开
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只是为了用于初始化而设计的吗? 展开
展开全部
你不妨如下修改下:
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可以继续放在构造函数中尝试!
希望以上对你有帮助。
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可以继续放在构造函数中尝试!
希望以上对你有帮助。
展开全部
static是静态的意思
如果在方法或字段前面加static
那么调用的地方也必须是静态的,不然无法直接访问,如果想访问必须使用
new 关键字 实例化该类 然后再用对象点出来。
例如 DBHelper db=new DBHelper();
db.方法名 或 db.字段名
前面声明为static主要是因为方便调用。不需要用关键字new 来实例化
就可以直接用点的形式使用。
例如
DBHelper.方法名 或 DBHelper.字段名
如果在方法或字段前面加static
那么调用的地方也必须是静态的,不然无法直接访问,如果想访问必须使用
new 关键字 实例化该类 然后再用对象点出来。
例如 DBHelper db=new DBHelper();
db.方法名 或 db.字段名
前面声明为static主要是因为方便调用。不需要用关键字new 来实例化
就可以直接用点的形式使用。
例如
DBHelper.方法名 或 DBHelper.字段名
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一,因为你的int i是在静态代码块中定义的,它的作用域只在静态代码块中有效.而你在mian方法中直接用类名.i调用,这样是找不到它的.
在第二个,你在类中把i定义成了一个静态变量,我想关于静态变量的定义你应该知道吧,这时再用类名.i,就可以直接调用它了.
在第二个,你在类中把i定义成了一个静态变量,我想关于静态变量的定义你应该知道吧,这时再用类名.i,就可以直接调用它了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一次见这样的问题, 关注下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询