java中java throw returnn()的问题

一个关于c#中return返回值的问题_Java123社区微信号:java123msg |||[][]当前位置: &
& 一个关于c#中return返回值的问题namespace 实 { class test { } class Program { test bar = new test(); } static void Main(string[] args) { test Newbar = DO(); } } 问题1:运行时调用了DO()这个方法,DO()这个方法return了一个test的实例bar然后namespace 实{ &
class test &
class Program &
test bar = new test(); &
static void Main(string[] args) &
test Newbar = DO(); &
}}问题1:运行时调用了DO()这个方法,DO()这个方法return了一个test的实例bar然后赋值给Newbar,bar是局部变量再函数运行完以后就撤消了那为什么Newbar还能正常使用呢?问题2:还有return语句再执行以后函数不是已经完成了吗?那么它是赋值的 呢 return 的数据怎么存储的呢理解一下同楼上,你需要买本C#的基础书籍学习,这里基础问题来问,往往得不到很专业的回答。我们这些人都觉得很平常的知识,你却不懂,就好比有人问:“人为什么要吃饭睡觉啊”。太简单的问题,又如:“为什么1+1=2啊”。这些问题不是不会回答,而是没有专业的技巧来让那些理解有问题的人来理解。那你说说 好不好!!!1 楼我看了你的博客了& 我想问一个问题你说值类型都是在堆栈上分配内存那public class a& { &
static test DO() & // 再实例化a 以后 这个aa 是存储再那呢 ????}& 还有我问的 RUTURN 这个问题 是这个意思 函数调用 是压栈
那么最先弹出的时候 return 是吧 那么他返回的 那个变量是不是 再栈中临时开辟一块空间用来储存呢问题1:运行时调用了DO()这个方法,DO()这个方法return了一个test的实例bar然后赋值给Newbar,bar是局部变量再函数运行完以后就撤消了那为什么Newbar还能正常使用呢?----------------------------------------------------------------------bar所占的空间在DO方法返回时是会释放的,但实际内容是不释放的,Newbar 能正常实际用因为获取的是对应引用内的东西,就是实际内容。 &
} // 再实例化a 以后 这个aa 是存储再那呢 ????--------------因为bar是引用类型,DO那个方法返回的是bar 的引用,return返回的都是第一次寻址的结果,值类型的就返回实际值,而引用类型则返回引用地址。考虑到32位操作系统的引用地址只有32位整型长度,因此这个返回值很小。每次为这个返回值开辟新的内存空间存放也没任何关系,几乎感觉不到内存的使用。不知道你的分配空间A是指什么空间,如果是CPU堆栈空间,那么你的理解没问题,如果是内存空间,那么你的理解就有问题了。问题2:还有return语句再执行以后函数不是已经完成了吗?那么它是赋值的 呢 return 的数据怎么存储的呢---------------------当方法有返回值并且有变量接收的时候,会有压栈和出栈两个操作那样的话,连压栈动作也不会有,这2个动作必须是配对的,否则整个程序的后续操作都要出错。压栈指的记忆方法的返回值,出栈是将返回值赋给对应的变量aa 存在托管堆,值类型并不总是存在堆栈上的不需要考虑堆栈问题,考虑那个会把自己搞晕的。.NET中不需要考虑内存释放,都是自动管理的。只有非托管代码才需要考虑。值类型是直接存放在内存地址里,而引用类型是存放在2处,内存地址里先存放引用地址,然后定位到另一个地址的连续内存空间,那才是引用类型的实际内容。因此访问值类型例如int,就是直接一次寻址,而访问引用类型如chass a,那就是二次寻址。bar是局部变量再函数运行完以后就撤消,但是撤销的是bar的引用地址所占用的内存空间而已,第二级地址的内容还没撤销,因为又有新的对象Newbar指向了它,Newbar里存放了和bar一样的引用地址,2个变量虽然第一级地址不同,但是同时指向同一个引用地址。只有当某个引用地址不被任何对象引用,它才会被释放,这是.NET的潜规则。阿非: 如果没有变量接收呢?? 就不会有出栈操作了? PS:如果你一定要看堆栈,将代码编译后看IL语言,那个会显示详细的堆栈操作,但是你肯定会看晕。分别编译2个操作,一个接收,一个不接受,IL语言会显示2种,接收返回值的,有堆栈动作代码,而不接收返回值的,直接结束,无任何堆栈操作。...看了你们说的我说一下我的理解哈有返回值的时候 函数压栈 首先记忆这个返回值 并且给他分配好空间比如说空间A 运行RETURN 时 系统把返回值复制到 A 里...然后函数 结束 ...把A的值 通过= 赋值给 主调函数的变量 然后A 撤销....是不是 ?共2页顶一下(0)0%踩一下(0)0%------分隔线------上一篇: 下一篇: 栏目列表推荐内容使用webbrowser伪造referer的方法:webBrowser1.Navigate(url, "_self", null,...
说到override大家都知道,它是复写,子类去复写父类的方法与属...
标准控件 1 btn Button 2 chk CheckBox 3 ckl CheckedListBox 4 cmb ComboBox 5 dt...
1. 采用事件委托的方法 对象:主窗体:FrmMain 加载窗体:FrmLoadi...
最近突然感觉到个人的开发机各种慢,也是啊,从我上大学时起...
写在前面 知道AutoMapper很久了,但是一直没有用,最近刚好有个...java中关于return 的问题_百度知道
java中关于return 的问题
public static int method(int x){try {if (x&0)throw new Exception(&x&0&);return x++;}catch(Exception e){System.out.println(&wrong&);return -100;}finally{System.out.println(&Finally&);}}public static void main(sting arg[]){Systrm.out.println(method(-1));}问一下,执行到retrun-100时,其值返回到哪里?为什么先执行finally的语句后执行retrun?谢谢指教
提问者采纳
你调用method(-1)方法, 根据if (x&0)throw new Exception(&x&0&);那么他执行 catch(Exception e) { System.out.println(&wrong&); return -100;} 这时系统首先输出 wrong.接着 不管有无异常 都要执行 Finally 语句这时 输出F最后把 -100返回 执行你Main函数下的Systrm.out.println(method(-1)); 即输出-100
提问者评价
其他类似问题
return的相关知识
其他3条回答
finally是一定执行的,无论是否catch
不是像你那样说的 这个程序是 从负值到正值吧 每次执行后都会输出Finally的 当放回是-100时说明x!&0了
首先说明一下,Filnally表示总是执行,也就是说即使你try里return了finally也会在return之前执行的.再则if(x&0) 则 进入异常,相当于x只要小于0就会输出&wrong&,&Finally&,以及返回的负数
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁java中return的问题_百度知道
java中return的问题
int x = 5;long f = x;// long f(){return x;}他俩有关系和区别吗?
提问者采纳
没有关系long&f&=&x;&//&定义一个long型的变量f,并赋值&xlong&f(){&//&定义一个返回类型为long型的函数f。&&&&return&x;}f的值和f()的值是相同的
提问者评价
其他类似问题
按默认排序
其他2条回答
类型变了,序列化你就知道,用的字节长度不一样
有,类型不一样
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁经典的java中return和finally问题! -
- ITeye技术网站
博客分类:
main(String[]
System.out.print(tt());
System.out.println("yes");
catch(Exception
System.out.println("error
System.out.println("b&25
System.out.println("finally");
&&&&& 主要是用来测试return和finally语句到底哪个先执行.在try语句中,返回了b=88; 在finally语句中判断是否大于25,如果大的话就输出大..程序的结果是
b&25&&&&&&& :&&&&&&& 88
&&&&& 也就是说明finally语句在return语句执行完了以后才执行的.
&&&&& OK,那么问题来了,如果我把finally语句改成这样呢:
System.out.println("b&25
System.out.println("finally");
return 100;
也就是在finally中加入return 语句,返回不同的值. 那么,返回值到底是原来的b值(88),还是新的这个返回值呢? 废话不多,看结果:
b&25&&&&&&& :&&&&&&& 88
&&&&& 这样又说明了一个问题,finally语句块里面的return把原来的return给覆盖了!!变成了新的返回值了.
&&&&& OK,继续闷骚:我把代码改成这样:
try
System.out.println("yes");
catch(Exception
System.out.println("error
System.out.println("b&25
System.out.println("finally");
}
也就是把 try中的返回语句改成返回b值,然后在finally中改变b的值. 那么返回结果到底是原来的b值呢, 还是更改过的b值呢?结果如下:
b&25&&&&&&& :&&&&&&& 23
&&&&&& 说明了一个问题,如果finally语句中没有返回语句覆盖的话,那么原来的返回值就不会变,不管你是不是改变了要返回的那个变量.
&&&&&& 最后还是来说说一点点想法,这个机制是不是这样的呢?碰到try语句中的return,那么先把return的值放在某个池中(怎么我也说起池来了,明明根本还不懂的)?&&&&&& 然后执行finally里面的代码块,如果有返回值覆盖语句,就改变先前放在池中的那个值,如果没有,就把那个池中的东西取出来返回出去.
jinyanliang
浏览: 93898 次
来自: 河南开封
好不错哦。。
zjuttsw 写道zjuttsw 写道楼主最后两个例子很好。 ...
问题已解决。
楼主:按照你的方法做了,又出现了新的错误:[com.aliba ...
zjuttsw 写道楼主最后两个例子很好。学习了不过第三条好像 ...C#在try-catch中使用return返回问题_Java123社区微信号:java123msg |||[][]当前位置: &
& C#在try-catch中使用return返回问题在C#中的一个静态方法中 我使用了try-catch-finally 如 publicstaticstringtsReturn() { try { //数据库操作 return ... ; }catch(Exceptionex) { } finally { //其他操作 } } 问题来了为偶然凝视C#中还会执行在C#中&的一个&静态方法中我使用了try-catch-finally如&public&static&string&tsReturn(){&&try&&&&{&&&&&&//数据库&操作&&&&&&return&"...";&&&&}catch(Exception&ex)&&&&{&&&&&&return&&&&&}&&&&finally&&&&{&&&&&&&//其他操作&&&&}}问题来了&为偶然凝视&C#中&还会执行finally&代码块呢&是不是C#默认这样设置的呢很纠结啊看来是我对.net&&太无知了&微软&是&如何设计&try-catch-finally&的呢&看样子又点像&栈&啊&
共2页顶一下(0)0%踩一下(0)0%------分隔线------上一篇: 下一篇: 栏目列表推荐内容使用webbrowser伪造referer的方法:webBrowser1.Navigate(url, "_self", null,...
说到override大家都知道,它是复写,子类去复写父类的方法与属...
标准控件 1 btn Button 2 chk CheckBox 3 ckl CheckedListBox 4 cmb ComboBox 5 dt...
1. 采用事件委托的方法 对象:主窗体:FrmMain 加载窗体:FrmLoadi...
最近突然感觉到个人的开发机各种慢,也是啊,从我上大学时起...
写在前面 知道AutoMapper很久了,但是一直没有用,最近刚好有个...}

我要回帖

更多关于 java中return 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信