Java中动态绑定与Try finally中有return的理解
来源:互联网 发布:python与量化投资 编辑:程序博客网 时间:2024/06/04 18:24
Java中动态绑定与Try finally中有return的理解
看代码:
/** * 类说明 * * <pre> * Modify Information: * Author Date Description * ============ =========== ============================ * DELL 2017年9月12日 Create this file * </pre> * */public class TestSupperClass { /** * * 类说明 * * <pre> * Modify Information: * Author Date Description * ============ =========== ============================ * DELL 2017年9月12日 Create this file * </pre> * * 动态绑定: 后期绑定:在运行时根据具体对象的类型进行绑定。 * 若一种语言实现了后期绑定,同时必须提供一些机制,可在运行期间判断对象的类型,并分别调用适当的方法 * 。也就是说,编译器此时依然不知道对象的类型,但方法调用机制能自己去调查 * ,找到正确的方法主体。不同的语言对后期绑定的实现方法是有所区别的。但我们至少可以这样认为:它们都要在对象中安插某些特殊类型的信息。 * 动态绑定的过程: 1.虚拟机提取对象的实际类型的方法表; 2.虚拟机搜索方法签名; 3.调用方法。 */ static class Father { protected String name = "父亲属性"; public String getName() { return name; } } static class Son extends Father { protected String name = "儿子属性"; public String getName() { return name; } // public static void main(String[] args) { // Father sample = new Son(); // System.out.println("调用的属性:" + sample.getName()); // } } static class A { public A(int v) { setValue(v); } protected int value; /** * @param v */ public void setValue(int v) { this.value = v; } public int getValue() { try { value++; return value; } finally { this.setValue(value); System.out.println(value); } } } static class B extends A { public B() { super(5); setValue(getValue() - 3); } public void setValue(int v) { super.setValue(2 * v); } } /** * @param args */ public static void main(String[] args) { // System.out.println(new B().getValue()); /* * 执行过程 super(5) setValue在子类B中有实现,其实实现的是子类的setValue()方法,此时 value = 10 * 然后setValue(getValue)先getValue 10+1 = 11 value = 11; 走finally * 里面再次走setValue()子类的setValue() 11*2 = 22 打印22 return 的是11 -3是8 * 再次setVale 子类的setValue 8*2= 16 再次getValue 16+1 = 17 17*2 = 34 打印 34 最后 * 上面return 的是17 因此最后的结果是 22 34 17 */ Father sample = new Son(); System.out.println("调用的属性:" + sample.getName()); // 这个有两个考察点1. 是动态绑定 2.是return 与finally执行顺序 // 如果子类实现了父类的方法,判断了 是属于哪个类之后,会调用改类对应方法 Father sample = new // Son();用的是子类的方法 // 但是 Father sample = new Father(); 那么调用 的是父类的方法 B中的setValue // 调用的就是B中自己的setValue方法 2*v // 对应 return finally 执行顺序,需要这样理解,程序先是把return 返回值放到 // 缓存中,然后再执行finally,finally修改不会影响该值 }}
阅读全文
0 0
- Java中动态绑定与Try finally中有return的理解
- java中try catch finally与return的执行顺序
- java 中try catch finally 与return位置的关系
- java中 有return 的情况,return以及try,finally代码块的执行顺序
- Java面试题-try...finally结构中try中有return那么finally中的语句的执行时间问题
- 【Java】try中有return,finally块执行问题
- 【Java学习】理解try{ return } finally {} 中执行顺序
- (总结)try{}catch{}中有return,finally{}的执行情况
- Java中try、finally语句中有return时的执行情况
- Java中try、finally语句中有return时的执行情况
- Java中try、finally语句中有return时的执行情况
- Java中try、finally语句中有return时的执行情况
- Java中try、finally语句中有return时的执行情况
- Java中try{return} finally中return 和finally的执行顺序
- java中try,finally和return
- Java中try-catch-finally中的return
- java中try 和 finally中的return
- try与finally块中return的问题
- java网络编程
- 编译原理与编译构造 课堂笔记2
- 2017中国人工智能产品经理大会即将于9月24日在上海召开
- Delphi学习笔记(二)之类型转换
- 二叉树的层序遍历
- Java中动态绑定与Try finally中有return的理解
- iOS 单例设计模式
- linux curses库下子窗口实现行选择的功能
- MVP设计模式浅析、实战
- Xcode 导入voiceConvert /lib/libopencore-amrnb.a(wrapper.o)' does not contain bitcode. You must rebuild
- C++类和对象知识点整理七----虚基类和虚继承
- java与json的互相转换以及json字符串
- C++之线程池的原理及创建
- 分享七天轻松拿到公众号原创+赞赏