首先java的跨平台不是指java语言自己具备跨平台特性,而是不一样平台上都有可让java运行环境,这个运行环境就是jre。JRE由JVM和其目录下类库组成,JVM 是 Java 平台的基础,是整个java实现跨平台的最核心的部分,全部的Java程序首先会编译成.class类文件字节码,字节码不能直接与操做系统交互,在运行时JVM经过类加载器加载字节码,以解释或者编译的方式将字节码转换成目标机器码交给本地系统去执行,从而屏蔽了操做系统和硬件的细节,也就实现了“一次编译处处运行“的效果。java
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)。函数
抽象类性能
- 抽象类是对类的抽象,体现了数据抽象的思想,是实现多态的一种机制。
- 为其子类提供一个公共的类型,封装子类中重复的内容(成员变量和方法),子类虽然有不一样的实现,可是定义是一致的。
接口
- 接口是对行为的抽象,是一些方法特征的集合
抽象类与接口的区别this
- 抽象类能够有构造方法 接口不行
- 抽象类能够有普通成员变量 接口只能声明为 final static
- 抽象类能够有非抽象的方法 接口必须所有抽象
- 抽象类可有有多种访问类型 接口只能是 public abstract
- 一个类能够实现多个接口 但只能继承一个抽象类