public class Test { static { s1 = "s1"; // s1正常 } static{ s2 = s1 +"s2"; // 提示s1不能在变量定义前引用。 } static String s1; static String s2; }
static { s1 = "s1"; //s1定义了,把“s1”的引用赋给s1 } s1="other";//重新赋值 s1最终结果是other; s1="other";//如果在前面,申明,把“other”的引用赋给s1, 静态代码块重新赋值, s1最终是“s1”, 错的来了 static { s2 = s1 + "s2"; // 提示s1不能在变量定义前引用。 } s2有,从没初始化过,,现在不是访问,没问题。再去找s1,s1没有申明过,不知道什么东西,通过class找静态变量,s1找到了,但它没被初始化过,那编译器认为你怎么能操作未初始化的数据呢。应该够详细了吧
还是不一样的 这个是在赋值, 是在write s1 static { s1 = "s1"; // s1正常 } 这个是在取值, 是在read s1 static{ s2 = s1 +"s2"; // 提示s1不能在变量定义前引用。 }
楼上说的对,在声明前可以writ,不可以read
62,614
社区成员
307,327
社区内容
加载中
试试用AI创作助手写篇文章吧