A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 jingyarufeng 于 2016-8-14 12:07 编辑

public static int abc() {
//for(;;) {}
while(true) {}
}

这样写为啥不会报错呢?难道这样有返回值?
但是如果里面随便放个有限循环或者什么的就会报错呢? 求大神解释...
可以参考下7楼...如果还有什么楼主理解不到位的问题,欢迎指正!

13 个回复

倒序浏览
只有break啊```````````````````
回复 使用道具 举报
java对无限循环的判定可以没有返回值
回复 使用道具 举报
你这样不会报错吗
回复 使用道具 举报
本帖最后由 jingyarufeng 于 2016-8-14 11:51 编辑

        public static int abc() {         // 这里需要一个int型的返回值
                // for(;;) {}                         //编译器认为你这里定义了无限循环,是要达到某种条件的时候才会跳出循环
                                                                //所以这时候你的return语句应该写在循环的里面 定义在外面就会报错(当然这个错是代码不可达的错误        )               
                //----------------------------------以下部分个人推断---------------------------------------
                                                                // 但是我无限循环里什么如果什么都不写编译器也不知道我无限循环到底什么时候停止
                                                                // 所以它也是没有办法知道我有没有返回..在哪返回(循环里还是外面?外面我更找不到).所以,你懂得...
                //-------------------------------------------------------------------------------------
                /*while (true) {                       
                        break;                                //这里用break不在外面加return的话也不行,如果循环结束了,方法体也结束了.还没有返回值,编译不能通过
                }
                return 1;*/                                //总的来说;方法定义了返回值类型,就一定要给返回值
                return 1;                                //定义了无限循环没加返回还不报错的原因是,这么写可以保证程序的正常运行,不会抛出异常,所以可以编译通过
//上面return是强迫症                                //相当于绕过了编译器的检查
        }       
以上是老师帮我解答以及加上自己的理解,
因为是周末,所以没好意思细问老师,不过我觉得老师讲解的已经非常到位了,如果我自己的理解里还有什么不对的话,那就可能是我太爱钻牛角尖了...感谢黑马和黑马的老师们在周末还抽出时间来帮学生解答问题...选择黑马,绝B没错!
回复 使用道具 举报
double_x 发表于 2016-8-14 11:05
你这样不会报错吗

不会唉!
回复 使用道具 举报
yuxing 发表于 2016-8-14 10:33
java对无限循环的判定可以没有返回值

这....要我怎么去理解呢?
回复 使用道具 举报
枫叶红 来自手机 中级黑马 2016-8-14 12:19:51
8#
jingyarufeng 发表于 2016-8-14 11:53
这....要我怎么去理解呢?

只有在循环结束时才会运行到返回值那里,无限循环更本到不了返回值那里,有没有有什么区别?
回复 使用道具 举报
无限循环,顾名思义就是说,程序陷入循环,走不下去了!
回复 使用道具 举报
确实很奇怪。。。。。。
回复 使用道具 举报
确实很奇怪
回复 使用道具 举报
因为检测到你是死循环,不可能有返回值
回复 使用道具 举报
无限循环就直接躲开编译器的检测了
回复 使用道具 举报
程序一直卡在循环那里,根本不会执行循环下面的代码,所以有没有break都可以.java对无限循环的判定可以没有返回值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马