当前位置: 首页 > news >正文

人才市场官方网站/品牌策划包括哪几个方面

人才市场官方网站,品牌策划包括哪几个方面,wordpress默认编辑器功能增强,网站建设电话销售类、字段、代码块、构造方法的执行顺序测试代码执行结果参考测试代码 有两个类 Father、Son,其中有实例变量、类变量、构造代码块、静态代码块、构造方法 class Father {public Integer test 100;public int i test();private static int j method();static {S…

类、字段、代码块、构造方法的执行顺序

    • 测试代码
    • 执行结果
    • 参考

测试代码

有两个类 FatherSon,其中有实例变量、类变量、构造代码块、静态代码块、构造方法

class Father {public Integer test = 100;public int i = test();private static int j = method();static {System.out.print("(1)");}Father() {System.out.print("(2)");}{System.out.print("(3)");}public int test() {System.out.print("(4)");return 1;}public static int method() {System.out.print("(5)");return 1;}
}public class Son extends Father {public Integer test = 200;public Father father = new Father();public int i = test();private static int j = method();static {System.out.print("(6)");}Son() {System.out.print("(7)");}{System.out.print("(8)");j = 100;}@Overridepublic int test() {System.out.print("(9)");return 2;}public static int method() {System.out.print("(10)");return 1;}
}public class Test {public static void main(String[] args) {Son s1 = new Son();System.out.println();Son s2 = new Son();System.out.println();System.out.println(s1.test);System.out.println(((Father)s1).test);System.out.println(s1.i);System.out.println(((Father)s1).i);System.out.println(s1.test());System.out.println(((Father)s1).test());}
}

执行结果

(5)(1)(10)(6)(9)(3)(2)(4)(3)(2)(9)(8)(7)
(9)(3)(2)(4)(3)(2)(9)(8)(7)
200
100
2
2
1
(9)2
(9)2

1、Son s1 = new Son();时需要加载类Son,又因为Son继承与Father,所以先加载父类Father按顺序执行Father中的静态代码,也就是以下的代码,由于方法method()是静态方法,静态方法不参与多态,所以执行Father.method(),执行结果:(5)(1)

class Father {// ①private static int j = method();// ②static {System.out.print("(1)");}public static int method() {System.out.print("(5)");return 1;}
}

2、加载完Father之后继续加载子类Son按顺序执行Son中的静态代码,执行结果:(10)(6)

public class Son extends Father {// ①private static int j = method();// ②static {System.out.print("(6)");}public static int method() {System.out.print("(10)");return 1;}
}

3、类加载完之后,开始创建对象,进行对象初始化,先执行父类初始化、再执行子类初始化,按顺序执行除构造方法以外的初始化代码,构造方法最后执行,执行结果:(9)(3)(2)(4)(3)(2)(9)(8)(7)

关于实例变量、构造代码块、构造方法的执行顺序可参考这一篇博客。

// 执行父类初始化
// 由于 ② test() 是普通方法,且被子类重写了,所以执行的是子类的 Son.test(),执行结果是 (9)(3)(2)
class Father {// ①public Integer test = 100;// ②public int i = test();// ④Father() {System.out.print("(2)");}// ③{System.out.print("(3)");}// Father.test()public int test() {System.out.print("(4)");return 1;}// Son.test()@Overridepublic int test() {System.out.print("(9)");return 2;}
}// 执行子类初始化,执行结果是 (4)(3)(2)(9)(8)(7)
public class Son extends Father {// ①public Integer test = 200;// ②,Father 类已经加载过来,此处只需执行 Father 类的初始化代码,也就是上面的 ①②③④// 但与上面不同的是这里是直接 new Father(),而不是 new Father 的子类,所以 ② 的 test() 执行的是 Father.test(),结果是 (4)(3)(2)public Father father = new Father();// ③public int i = test();// ⑤Son() {System.out.print("(7)");}// ④{System.out.print("(8)");j = 100;}@Overridepublic int test() {System.out.print("(9)");return 2;}
}

4、Son s2 = new Son();与上面的过程一样,只是省去了类加载的过程(步骤1、2),结果和步骤 3 一样:(9)(3)(2)(4)(3)(2)(9)(8)(7)
5、由于字段不参与多态,或者说字段的访问有其静态类型决定。所以 s1.test((Father)s1).test 分别打印了 200、100

以下摘自 《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)周志明》311 页
  正是因为 invokevirtual 指令执行的第一步就是在运行期确定接收者的实际类型,所以两次调用中的invokevirtual指令并不是把常量池中方法的符号引用解析到直接引用上就结束了,还会根据方法接收者的实际类型来选择方法版本,这个过程就是Java语言中方法重写的本质。我们把这种在运行期根据实际类型确定方法执行版本的分派过程称为动态分派。
  既然这种多态性的根源在于虚方法调用指令invokevirtual的执行逻辑,那自然我们得出的结论就只会对方法有效,对字段是无效的,因为字段不使用这条指令。事实上,在Java里面只有虚方法存在,字段永远不可能是虚的,换句话说,字段永远不参与多态,哪个类的方法访问某个名字的字段时,该名字指的就是这个类能看到的那个字段。当子类声明了与父类同名的字段时,虽然在子类的内存中两个字段都会存在,但是子类的字段会遮蔽父类的同名字段。为了加深理解,笔者又编撰了一份“劣质面试题式”的代码片段,请阅读代码清单8-10,思考运行后会输出什么结果。

6、 s1.i((Father)s1).i 都打印了 2,是因为 public int i = test();,这里的 test() 调用的都是子类的版本 Son.test()s1.father.i 打印 1 是意料之中的
7、上面说过的字段不参与多态,但是实例方法是参与多态的,所以 test() 方法是根据其接受者的实际类型确定的,其实际类型是 Son,所以调用了 Son.test(),打印 (9)2

参考

  • 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)周志明
http://www.jmfq.cn/news/5124961.html

相关文章:

  • 网站地址搜索/网络推广培训去哪里好
  • 做商品网站的教学视频/百度推广方法
  • 云南最新疫情数据今天/谷歌优化师
  • 网站中弹出广告怎么做/搜索引擎营销的过程
  • 广东创粤建设有限公司网站/seo深圳优化
  • 津南房地产网站建设/百度快快速排名
  • 网站开发公司模板/站长工具忘忧草
  • 做网站销售 优帮云/百度手机助手应用商店下载
  • 网站换域名seo/西安百度
  • aspnet网站开发模板/百度网站排名优化软件
  • 做网站需要什么内容/什么叫做网络营销
  • 医院内网网站建设/网页制作
  • qq人脸解冻自助网站/云南网站推广公司
  • 网站打开很慢怎么回事啊/青岛网站建设制作
  • 遵义做手机网站建设/关于华大18年专注seo服务网站制作应用开发
  • 做农业网站怎么赚钱/网络营销策划是什么
  • 济南网站开发建设/北京网站优化托管
  • wordpress字菜单/关键词优化步骤简短
  • 企业商用网站建设企划书/百度一下就知道官网
  • 旅游网站开发目的和目标/地推的方法和技巧
  • 莱州网站开发/成都网站制作关键词推广排名
  • 外贸wordpress/上海专业优化排名工具
  • 深圳网站建设哪个好/优化精灵
  • 进网站后台加什么原因/营销型企业网站建设的内容
  • 网站中的给我留言怎么做/电脑优化大师
  • 建设银行网站修改手机号/中国十大搜索引擎排名
  • word上下页边距怎么调/福建seo优化
  • 湖北网站推广技巧/最近的新闻有哪些
  • 淘宝客网站源码加各类插件/百度快照在哪里
  • 做一个网站成本是多少合适/沈阳seo网站关键词优化