Java基础知识

1. 面向对象和面向过程的区别

面向过程

优点:性能比面想想对象高,因为类调用时需要实例化,开销较大,比较消耗资源,所以当性能是最重要的考量因素时,比如单片机、嵌入式开发、Linux/Unix等一般面向过程开发
缺点:不易维护,不易复用,不易拓展

面向对象

优点:易维护、易复用、易拓展,具有封装、继承、多态等特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低


2. Java语言有哪些特点?

  1. 简单易学
  2. 面向对象(封装、继承、多态)
  3. 平台无关性(Java虚拟机实现平台无关性)
  4. 可靠性
  5. 安全性
  6. 支持多线程
  7. 支持网络编程并且很方便
  8. 编译与解释并存

3. JVM/JDK/JRE的解释

JVM
Java虚拟机(JVM)是运行Java字节码的虚拟机。JVM针对不同系统有不同的实现,目的是使用相同的字节码,它们都会给出相同的结果。
字节码
JVM可以理解的代码就是“字节码”,即拓展为“.class”的文件,它不面向任何特定的处理器,只面向虚拟机。Java语音通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。
JDK
Java Development Kit(Java开发工具包),是功能齐全的Java SDK,包含JRE,还有编译器(javac) 和工具(如java doc 和 jdb)。能够创建和编译程序。
JRE
Java Runtime Environment(Java运行环境),可以运行已编译的Java程序,但不能用于创建新程序。


4. 重载和重写的区别

重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。
重写:发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private,则子类就不能重写该方法。


5. 面向对象的三大特性

封装
把一个对象的属性私有化,提供一些可以被外界访问的属性的方法
继承
使用已存在的类的定义作为基础,建立新类的技术,新类可以增加新的属性或方法
a. 子类拥有父类非private的属性和方法;
b. 子类可以拥有自己的属性和方法,即子类可以对父类进行拓展;
c. 子类可以用自己的方式实现父类的方法
多态
两种方式实现多态:继承(多个子类对统一方法的重写)和接口(实现接口并覆盖接口中统一方法)


6. String Buffer和String Builder的区别

  1. 都继承自AbstractStringBuilder类,构造方法都是调用AbstractStringBuilder实现的
  2. StringBuffer对方法加了同步锁(或对调用的方法加了同步锁),因此是线程安全的;StringBuilder没有对方法加同步锁,因此是非线程安全的。
  3. StringBuilder比StringBuffer有10-15%的性能提升

总结

  1. 操作少量的数据:String
  2. 单线程操作字符串:StringBuilder
  3. 多线程操作字符串:StringBuffer

7. 接口和抽象类的区别

  1. 接口的方法默认是public,所有方法在接口中不能有默认实现(Java8以后可以了),而抽象类可以有非抽象的方法;
  2. 接口中的实例变量默认是final,抽象类中不一定;
  3. 一个类可以实现多个接口,但最多只能实现一个抽象类;
  4. 一个类实现接口的话要实现接口的所有方法,但抽象类不一定;
  5. 借口不能用new实例化,但可以声明,且必须引用一个实现该接口的对象。

你可能感兴趣的:(Java面试,Java,Java面试大全,java,面试,宝典,大全,基础)