开个新的系列,主要总结一下java面试会遇到的各种问题,从最基本的概念到进阶的机试,综合自己的学习、三年多的工作经验,以及网上查找的资料,总结一下。
一. 基础概念
1.面向对象
面向对象是一种对现实世界理解和抽象的方法。将世间万物抽象(抽取特征变为对象)。三大特点:封装、继承、多态。封装就是抽象成类,继承(private\default\protected\public),封装和继承是为了代码重用。多态(覆盖和重载)实现了接口复用。
2.java对比C++的优势
java和C++都是面向对象语言,具有封装、集成、多态三大特点。
先了解两个概念
多继承:
class D: public A, private B, protected C{
//类D新增加的成员
}
C++支持多继承,将多个基类用逗号隔开,在声明了类A、B、C的情况下,还可以声明派生类D,这时D就是一个多继承形式的派生类。派生类当然有他的方便之处,但是缺点也显而易见:类名称重复问题、代码逻辑复杂、思路容易混乱。
指针:内存地址,指针描述了数据在内存中的位置,标记了一个占据存储空间的实体。
java摒弃了多继承和指针这些复杂、难以理解和使用的概念,不使用指针来直接访问内存,也就意味着程序内存会更加安全,最方便的是java提供了自动内存管理机制(GC),再加上无可比拟的社区环境,功能强大且简单应用。作为面向对象编程语言的代表,极好地实现了面向对象理论。
3.JVM、JRE与JDK
jvm:java virtual machine,java虚拟机,java程序需要运行在虚拟机上,不同的平台都有虚拟机,这也是为什么java可以实现跨平台。
jre:jav runtime environment,java运行环境,运行环境的范围稍微大一些,里面包含了jvm,再加上一些其他程序运行必须要用的核心类库,主要是java.lang,比如基本数据类型、异常处理等。注意着是运行环境,也就是说如果你不开发,只需要运行一个打包后的java程序,那么你只需要jre即可,不需要安装jdk。
jdk:java development kit是给开发人员使用的,包含了开发工具,也包括jre。所以安装了jdk,也就不需要再单独安装jre了。
总的来说,这三个的关系如下:jre=jvm+核心类库;jdk=jre+开发相关工具;
4.java运行流程及相关概念
字节码:java源代码经过虚拟机编译器编译后产生的.class文件,不面向任何特定的处理器,只面向虚拟机。所以在不同的计算机上,只需要有java环境(JRE),即可执行程序。
编译器:编辑以将java源代码编译生成字节码,然后交由虚拟机。
解释器:虚拟机将字节码发送给解释器,解释器将其翻译成特定机器上的机器码,以此在特定机器上运行。
Java程序----->编译器----->字节码----->虚拟机----->解释器----->机器码----->运行
所以说,java的特点是编译与解释并存。
二.基础语法
1.数据类型
java是强类型语言,对于每一种数据都定义了明确的数据类型,在内存中分配了不同大小的空间。这里可以对比python,典型的弱类型语言。
基本数据类型
整数类型:byte(1字节),short(2字节),int(4字节),long(8字节)
浮点类型:float(4字节),double(8字节)
字符型:char(2字节)
布尔型:boolean(1字节)
引用数据类型
类:class
接口:interface
数组:array[]