黑马程序员技术交流社区

标题: 学习异常的时候,讲到return与finally的回退机制 [打印本页]

作者: 张镓仁1    时间: 2016-10-17 13:33
标题: 学习异常的时候,讲到return与finally的回退机制
说return会先执行但不会退,把返回值传入给一个返回通道里面,然后执行完finally后再返回值。试问内存中会有通道么?数据的返回通道是指执行指令流水的过程么?我觉得内存中都是存储的二进制,应该不许要什么路径吧,直接改变电流重写对应的内存的二进制不就行了么?真的有通道么?有运行轨迹么?

作者: gyy    时间: 2016-10-17 13:40
不太明白你的意思,内存中存储的的的确确是二进制的,而不同的类型的数据占用不同的长度,或者相同的数据长度。他这里的返回路径可能指的是一个返回的地址吧
作者: 张镓仁1    时间: 2016-10-17 13:43
public static void main(String[] args) {
                try {
                        System.out.println(10/1);
                } catch (Exception e) {
                        System.out.println("除数为零了");
                        //System.exit(0);                                                                //退出jvm虚拟机
                        return;
                } finally {
                        System.out.println("看看我执行了吗");
                }
        }
作者: 张镓仁1    时间: 2016-10-17 13:45
gyy 发表于 2016-10-17 13:40
不太明白你的意思,内存中存储的的的确确是二进制的,而不同的类型的数据占用不同的长度,或者相同的数据长 ...

上面这个代码,指令流水应该是cpu的,和这个没太多关系。但是老师说会产生一个返回路径,我就好奇内存中如何创建一条路径啊?return不就是跳出这个函数么?也许这些都是Java虚拟机运行机制的东西,老师是不会细说的。
作者: gyy    时间: 2016-10-17 13:47
张镓仁1 发表于 2016-10-17 13:43
public static void main(String[] args) {
                try {
                        System.out.println(10/1);

恩,我明白了你想问什么,我现在画一个大致的流程图给你看看执行的过程
作者: gyy    时间: 2016-10-17 13:48
张镓仁1 发表于 2016-10-17 13:45
上面这个代码,指令流水应该是cpu的,和这个没太多关系。但是老师说会产生一个返回路径,我就好奇内存中 ...

是运行机制,我画一个图给你看看你就知道
作者: 张镓仁1    时间: 2016-10-17 13:49
gyy 发表于 2016-10-17 13:48
是运行机制,我画一个图给你看看你就知道

恩,在线等,我们这儿下午停电,正好下午不上课了
作者: gyy    时间: 2016-10-17 13:57
我去,这个论坛竟然不能支持传图片。。
作者: gyy    时间: 2016-10-17 14:00
张镓仁1 发表于 2016-10-17 13:43
public static void main(String[] args) {
                try {
                        System.out.println(10/1);

你可以这么想,jvm在解释try代码块的时候,会执意的去检查一下是否有finally代码块。如果有的话,那么在中间遇到return的时候,不会立即返回,只有等到finally代码块结束以后在返回。如果没有的话,就返回了。除非你强制的让虚拟机进程挂掉
作者: 张镓仁1    时间: 2016-10-17 18:38
gyy 发表于 2016-10-17 13:57
我去,这个论坛竟然不能支持传图片。。

3103510352,哥么这我球球,彼此多交流
作者: 张镓仁1    时间: 2016-10-17 18:41
gyy 发表于 2016-10-17 14:00
你可以这么想,jvm在解释try代码块的时候,会执意的去检查一下是否有finally代码块。如果有的话,那么在 ...

哥么。我就是想问一下jvm的走路流程啊,这个老师不讲,所以来提问的啊
作者: 张镓仁1    时间: 2016-10-17 18:41
gyy 发表于 2016-10-17 14:00
你可以这么想,jvm在解释try代码块的时候,会执意的去检查一下是否有finally代码块。如果有的话,那么在 ...

哥么。我就是想问一下jvm的走路流程啊,这个老师不讲,所以来提问的啊 长个知识的啊
作者: 张镓仁1    时间: 2016-10-17 18:44
gyy 发表于 2016-10-17 14:00
你可以这么想,jvm在解释try代码块的时候,会执意的去检查一下是否有finally代码块。如果有的话,那么在 ...

哥么。我就是想问一下jvm的走路流程啊,这个老师不讲,所以来提问的啊 长个知识的啊
作者: gyy    时间: 2016-10-18 01:08
张镓仁1 发表于 2016-10-17 18:38
3103510352,哥么这我球球,彼此多交流

上班白天很忙,也没多少时间来解答,回答的不及时的话,别见怪
作者: gyy    时间: 2016-10-18 01:10
张镓仁1 发表于 2016-10-17 18:44
哥么。我就是想问一下jvm的走路流程啊,这个老师不讲,所以来提问的啊 长个知识的啊 ...

具体的流程还涉及到文法、句法之类的编译器的解析过程,并不是那么容易讲清楚的,你可以就这么理解




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2