- class Demo6
- {
- int x;//此处x属于成员变量(定义在类内),具有默认值0,可以直接使用,相当于int x=0;
- public static void main(String[] args)
- {
- int y;//此处y属于局部变量(定义在方法内),虽然我并未给它赋值,但是如果我并没有使用它,那么编译就不会报错
- for(int z=0;1<5;z++)
- {
- y=4;
- //此句代码在编译之前,系统会先编译y=z,因为这两句在一个作用域里面,所以赋值了,编译不出错
- System.out.println(y);
- break;
- }
- /*报错,编译时是找语法错误,而之上的for语句需要被执行,才会有赋值,但是编译时是不会去执行代码的,所以虽然for循环的条件100%永久成立,但是在相同的作用域下,只有个for循环,并没有赋值语句。所以y没有被赋值,因此这句话会报错.如果在第6行时给y赋值2,那么此句不会报错,但是输出的结果是4,这是因为执行时,for循环中又重新赋值了*/
- System.out.println(y);
- }//楼主,思考代码会不会报错,要站在编译器的角度思考,不要站在执行者的角度思考
- }
复制代码 |