摘要:先看下C#中的: C#中覆盖 隐藏 重写这三种有不同的意义,而Java中不同。 1. java中没有new ,使用new会报错,编译不通过。 2. java中重写和覆盖应该是一个意思 3. 关于Override关键词是可写可不写,区别是写了的话编译器在编译时会帮忙检查一下。
阅读全文
摘要:以下内容来自周志明的《深入理解Java虚拟机》。 前一篇说了静态分派和重载有关,现在的动态分派就和覆盖Override有关了。 先看代码: 结果输出: 这里不再根据静态类型来决定,因为静态类型同样都是Human的两个变量man和woman在调用sayHello()方法时执行了不同的行为,因为这两个变
阅读全文
摘要:以下内容来自周志明的《深入理解Java虚拟机》。 静态分派和重载有关。 先看代码: //输出 父类父类子类 上面SuperClass称为静态类型,后面的SubClass叫做实际类型,静态类型和实际类型在程序中都可以发生一些变化,区别是静态类型的变化仅仅在使用时发生,变量本身的静态类型不会被改变,并且
阅读全文
摘要:以下内容来自周志明的《深入理解Java虚拟机》。 学习JEE规范,去看JBoss源码;学习类加载器,就去看OSGI源码。 OSGI,即Open Service Gateway Initiative,是一个基于Java语言的动态模块化规范。 一个模块只有Export过的package才能由外接访问。
阅读全文
摘要:以下内容大多来自周志明的《深入理解Java虚拟机》。 类加载器是java的一项创新,也是java流行的重要原因之一,它最初是为了满足java applet的需求而开发出来。 什么是applet? 作为新手,都不知道applet是什么鬼,看看百度百科的解释,应该就明白了: JavaApplet就是用J
阅读全文
摘要:以下内容来自周志明的《深入理解java虚拟机》: 类初始化阶段是类加载过程的最后一步,前面的类加载过程中,除了在加载阶段用户应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导和控制。 到了初始化阶段,才真正开始执行类中定义的Java程序代码(或者说是字节码)。 在准备阶段,变量已经赋过
阅读全文
摘要:以下内容摘自周志明的《深入理解Java虚拟机》中的7.2章节。 明白主动引用和被动引用的区别,可以让java程序员了解什么情况下类是会被初始化的,什么情况下是不会被初始化的。 7.2 类加载的时机 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(V
阅读全文