首先java的跨平台不是指java语言本身具有跨平台特性,而是不同平台上都有可以让java运行环境,这个运行环境就是jre。JRE由JVM和其目录下类库组成,JVM 是 Java 平台的基础,是整个java实现跨平台的最核心的部分,所有的Java程序首先会编译成.class类文件字节码,字节码不能直接与操作系统交互,在运行时JVM通过类加载器加载字节码,以解释或者编译的方式将字节码转换成目标机器码交给本地系统去执行,从而屏蔽了操作系统和硬件的细节,也就实现了“一次编译到处运行“的效果。
final、finally、finalize有什么不同
- final可以用来修饰类、方法、变量,final修饰类时表示该类不可以被继承,修饰方法是表示该方法不可被重写,修饰变量时表示该变量不可修改,另外,在并发编程中对final变量的访问是安全的,不需要额外的同步开销。
- finally是java保证重点代码一定被执行的一种机制,通常用在try-finally、try-catch-finall中来做一些类似JDBC的关闭、io流的关闭以及解锁等操作。
- finalize是Object类的一个方法,作用是保证对象在被GC垃圾收集前完成特定资源的回收,这个方法已经不推荐使用,因为finalize方法的执行时机无法保证、会阻碍垃圾的快速回收,使用不当会影响性能,容易导致程序死锁、挂起等。
封装、继承、多态
封装
- 封装是指利用抽象数据类型将数据和基于数据的操作封装在一起,隐藏内部实现细节,只保留一些对外接口使之与外部发生联系。良好的封装能够减少耦合。
继承 - 继承是使用已存在的类作为基础建立新类,新类可以扩展父类,通过继承,可以方便的复用以前的代码,提高开发效率。
- 继承破坏了封装,对父类而已,其实现细节对子类来说是透明的,继承是一种强耦合关系,父类变,子类也跟着变。
多态 - 多态是指一个变量, 一个方法或者一个对象可以有不同的形式;也可以理解为在运行期间才决定一个引用变量指向的真实对象,以及该引用变量发出的方法调用是由哪个类所实现。
- 方法重载
- 指一个类里有两个或者多个名字相同参数类型列表不同的函数
- 编译时多态,编译时根据参数变量的类型判断应该调用哪个方法,严格来讲,重载是一种语言特性,与多态无关。
- 重写
- 子类重写父类方法,重写发送在子类中(重写方法与被重写方法只有函数体不同,另外,声明为final或static的方法已经父类的构造方法不能被重写)
- 运行时多态,在运行的时候,根据引用变量所指向的实际对象的类型来调用方法
Java实现多态有三个必要条件:继承、重写、向上转型(父类引用指向子类对象)
继承链调用优先级
在继承链中对象方法的调用存在一个优先级:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。
抽象类
- 抽象类是对类的抽象,体现了数据抽象的思想,是实现多态的一种机制。
- 为其子类提供一个公共的类型,封装子类中重复的内容(成员变量和方法),子类虽然有不同的实现,但是定义是一致的。
接口 - 接口是对行为的抽象,是一些方法特征的集合
抽象类与接口的区别
- 抽象类可以有构造方法 接口不行
- 抽象类可以有普通成员变量 接口只能声明为 final static
- 抽象类可以有非抽象的方法 接口必须全部抽象
- 抽象类可有有多种访问类型 接口只能是 public abstract
- 一个类可以实现多个接口 但只能继承一个抽象类