这个java程序编译时会显示i没有初始化呢?

java_zrq 2018-03-26 08:52:51
public class TestC {
public static void main(String[] args) {
int i;
for(int j=0; j<3; j++) {
i=1;
}
System.out.println(i);
}
}
运行的时候会出现可能尚未未初始化变量i。

如果是自变量的作用域问题,可是我的 i 是定义在for外面啊,所以请问下到底是什么原因呢,谢谢
...全文
850 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
September_Lhi 2018-04-16
  • 打赏
  • 举报
回复
楼上正解,编译器考虑的东西死板,如果j不再循环范围内,直接输出i就是没有初始化使用
Coli薇 2018-04-15
  • 打赏
  • 举报
回复
因为这个i是定义在方法里的,属于局部变量,必须显示初始化,你可以定义在类中,这样就不用初始化了,有默认值
一夕djx 2018-04-13
  • 打赏
  • 举报
回复
for循环中的变量都要有初始化值的,因为for循环不是一个绝对的条件,java会认为也可能进不去循环,这时候i没法赋值,就会导致编译出错,这算是语法错误吧。写多了就习惯默认赋值了
Surrin1999 2018-04-12
  • 打赏
  • 举报
回复
若i是成员变量还有个初始值0 你这个已经在方法里就没有初始值了
  • 打赏
  • 举报
回复
在你运行前,程序是不会知道你到底有没有进到循环里面的,虽然你肉眼看到了j<3一定会进循环,但机器是不会这么看的。
  • 打赏
  • 举报
回复
你给i赋值的语句是在for循环体里面的,循环体跟你最后输出i是不同的作用域,所以最后的输出语句在编译阶段是感知不到你给i赋值了的。
Chakyrd 2018-04-11
  • 打赏
  • 举报
回复
我一般会在定义时给一个不影响结果的值,避免报错
thifern 2018-04-11
  • 打赏
  • 举报
回复
想起老师举着课本跟我们吼,一定要注意格式规范!
醉-风尘Oo 2018-04-04
  • 打赏
  • 举报
回复
因为遍历有可能一次都没执行到你的赋值操作
maradona1984 2018-03-27
  • 打赏
  • 举报
回复
引用 3 楼 java_zrq 的回复:
可是我已经在for循环语句里初始化了为什么不行呢
编译器又不知道for循环的代码会执行
du1122335588 2018-03-27
  • 打赏
  • 举报
回复
因为机器不如人脑,Java自己会觉得j有可能小于3也有可能大于3,当大于3的话就进不了for循环了,那样的话i就没附初值直接输出,所以报错
java_zrq 2018-03-27
  • 打赏
  • 举报
回复
好的谢谢各位了
捏造的信仰 2018-03-27
  • 打赏
  • 举报
回复
楼主要学会贴代码
public class Demo {
    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("no args.");
        }
    }
}
像楼主的代码层级多,又没有排版,没法看。
java_zrq 2018-03-26
  • 打赏
  • 举报
回复
可是我已经在for循环语句里初始化了为什么不行呢
  • 打赏
  • 举报
回复
同上!初始化i,给其赋值。
考拉一枚 2018-03-26
  • 打赏
  • 举报
回复
就是你的i未初始化啊,java要求变量在使用前需要先chu初始化 即你可以定义 int i = 2;

62,614

社区成员

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

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