java基础求解答

DSFFGDFGFDGDFG 2015-02-09 05:15:14
public class Test {
static {
x = 5;// 不报错
System.out.println(x);// 编译报错
}
static int x, y;

求解答 为什么x=5不报错,System.out.println(x)报错
...全文
412 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinranchris 2015-02-11
  • 打赏
  • 举报
回复
4L 正解
日知己所无 2015-02-11
  • 打赏
  • 举报
回复
原来程序的错误是:非法的向前引用 解决办法 1)把static int x, y;提到static {}的前面【先定义后使用】 2)System.out.println(Test .x);【明确使用类变量】 3)System.out.println(x=5);【坏坏的idea】 结果都能按照预期打出5来 最好能下载一个反编译class文件为源代码的工具来看看javac到底把源代码编译成什么了…… 3)的反编译结果如下: import java.io.PrintStream; public class SystemOutPrintlnTest { static int x = 5; static int y; public static void main(String[] args) {} static { System.out.println(SystemOutPrintlnTest.x = 5); } }
anythingforyou 2015-02-11
  • 打赏
  • 举报
回复
我是来围观的
  • 打赏
  • 举报
回复
10L 正解
龙四 2015-02-10
  • 打赏
  • 举报
回复
谁说static块里不能不能放sysout的。。。
lasthope 2015-02-10
  • 打赏
  • 举报
回复
4楼正解 !
七脉 2015-02-10
  • 打赏
  • 举报
回复
4楼
yatesChiang 2015-02-10
  • 打赏
  • 举报
回复
我加个函数就不报错了 static void say(){ x = 5;// 不报错 System.out.println(x);// 编译报错 } static int x, y;
开心汉堡包 2015-02-10
  • 打赏
  • 举报
回复
你这个要去查查System.out.print是在什么时候执行的,像这种东西都是生命周期的问题
简易人 2015-02-09
  • 打赏
  • 举报
回复
楼主你好,static 是用来声明静态变量的,不是方法体,system。。。 是需要放在方法体弄进行执行的语句
skyhitnow 2015-02-09
  • 打赏
  • 举报
回复
向前引用只能是变量处于表达式左端。
fanlvlgh 2015-02-09
  • 打赏
  • 举报
回复
能不能解释的详细点?菜鸟一只 不理解这个逻辑
尼坤神 2015-02-09
  • 打赏
  • 举报
回复
静态属性和静态代码块是按顺序加载的,所以是那个写在上面的那个先加载

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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