面试题(Java)


Java基础

一、面向对象和面向过程的区别

  • 面向过程
    • 性能比面向对象
    • 当性能最重要时,比如嵌入式开发、Linux/Unix等一般采用面向过程开发
  • 面向对象
    • 性能比面向过程
    • 易维护、易复用、易扩展
    • 特性:封装继承多态
    • 可以设计低耦合系统,使系统更加灵活、更加易于维护

参见 issue :面向过程 :面向过程性能比面向对象高??

这个并不是根本原因,面向过程也需要分配内存,计算内存偏移量,Java性能差的主要原因并不是因为它是面向对象语音,而是Java是半编译语言,最终的执行代码并不是可以直接被CPU执行的二进制机械吗。
而面向过程大多都是直接编译成机械码在电脑上执行,并且其他一些面向过程的脚本语言性能也并不一定比Java好。

二、Java语言有哪些特点

  • 简单易学
  • 面向对象(封装、继承、多态)
  • 平台无关性(Java虚拟机实现平台无关性)
  • 可靠性
  • 安全性
  • 支持多线程(C++语言没有内置的多线程机制,因为必须调用操作系统的多线程功能来进行多线程程序设计)
    C++11开始就引入了多线程库
  • 支持网络编程并且很方便
  • 编译与解释并存

三、JDK和JRE

1.JDK

  • JDKJava Development Kit的缩写,它是功能齐全的Java SDK。
  • 拥有JRE所拥有的一切
  • 有编译器javac
  • 允许创建和编译程序

2.JRE

  • JDKJava Runtime Environment的缩写,也就是Java运行时环境
  • 包含Java虚拟机(JVM),Java类库,Java命令等
  • 不允许创建新程序

3.用途

  • 如果只是想运行Java程序,只需要安装JRE
  • 如果需要进行Java编程方面工作,就需要安装JDK

四、Java和C++的区别?

  • 特点:都是面向对象语言,都支持封装继承多态
  • 安全Java不提供指针来直接访问内存,程序内存更加安全
  • 继承Java类是单继承的(接口可以多继承),C++支持多重继承
  • 内存Java有自动内存管理机制,不需要程序员手动释放无用内存
  • 结束符:C语言字符串或字符数组最后会有一个额外的字符’\0’表示结束,而Java语言没有结束符的概念。(具体参考这里)

五、部分简单总结

  • 构造器Constructor不能被重写(Override),但是可以被重载(Overload)
  • 重载(Overload)是方法名相同,参数类型不同的实现。重写(Override)是子类覆盖父类方法的实现。方法的重写要遵循“两同两小一大”
    • “两同”即方法名相同、形参列表相同;
    • “两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;
    • “一大”指的是子类方法的访问权限应比父类方法的访问权限更大或相等。

。。。


文章作者: GaryLee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 GaryLee !
  目录