Java面试题,至少保证每天一题

  1. 什么是Java虚拟机?为什么Java被称为是“平台无关的编程语言”?
    Java虚拟机是一个可以执行Java字节码的可执行进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或重新编译。Java虚拟机让这个称为可能,因为它知道底层硬件平台的指令长度和其他特性。
    
  2. JDK、JRE、JVM关系是什么?
    JDK(Java Development Kit)即为Java开发工具包,包含编写Java程序所必须的斌阿姨、运行等开发工具以及JRE。开发工具如:用于编译Java程序的javac命令、用于启动JVM运行java程序的java命令、用于生成文档的javadoc命令以及用于打包的jar命令等等。
    JRE(Java Runtime Environment)即为Java运行环境,提供了运行Java应用程序所必须的软件环境,包含有Java虚拟机(JVM)和丰富的系统类库。系统类库即为java提前封装好的功能类,拿来直接使用即可,可以大大提高开发效率。
    JVM(Java Virtual Machine)即为Java虚拟机,提供了字节码文件(.class)的运行环境支持。简单说,就是JDK包含JRE包含JVM。
    
  3. Java支持的数据类型有哪些?什么是自动拆装箱?
    基本数据类型:
    整数类型:byte、short、int、long
    字符型:char
    浮点类型:float、double
    布尔型:boolean
    整数默认int型,小数默认double型。float和long类型的必须加后缀。
    首先知道String是引用类型不是基本类型,引用类型声明的变量是指该变量在内存中实际存储的是一个引用地址,实体在堆中。引用类型包括类、接口、数组等。
    String类还是final修饰的。
    而包装类就属于引用类型,自动装箱和拆箱就是基本类型和引用类型之间的转换。基本类型转换为引用类型后,就可以new对象,从而调用包装类中封装好的方法进行基本类型之间的转换或者toString,还有就是如果集合想存放基本类型,泛型的限定类型只能是对应的包装类型。
    
  4. 面向对象是什么?
    面向对象是一种思想,世间万物都可以看做是一个对象,这里只讨论面向对象编程(OOP),Java是一个支持并发、基于类和面向对象的计算机编程语言,面向对象软件开发优点:
    代码开发模块化,更易维护和修改;
    代码复用性强;
    增强代码可靠性和灵活性;
    增加代码可读性;
    面向对象的四大基本特性:抽象、封装、继承和多态。
    面向对象的七大设计原则:
    单一职责原则、开放关闭原则、里氏替换原则、接口隔离原则、依赖倒置原则和迪米特法则、组合优于继承原则。
    24中设计模式:
    创建型(简单工厂模式、工厂模式、抽象工厂模式、单例模式、原型模式)
    创建者(结构型模式、组合模式、装饰者模式、外观模式、适配器模式、代理模式、享元模式、桥接模式)
    行为型(观察者模式、策略模式、状态模式、中介模式、模板方法、命令模式、备忘录模式、访问者模式、解释器模式、迭代器模式、职责链模式)