1.什么是 Java 虚拟机(JVM)?为什么 Java 被称作是“平台无关的编程语言”?
先从JAVA程序的执行过程说起,先将java源文件编译(*.java)编译为字节码文件(.class),然后用解释器运行该字节码,JVM就是允许该字节码文件的解释器。
举个例子:要求将同一个笔盖套在2个不同粗细的笔上,为2只笔分别陪一个转接器就能实现。转接器向上的一头接口适应笔盖,向下的接口适应笔就可以了。字节码文件相当于是笔盖,JVM相当于例子中的转接器,不同的平台相当于是不同粗细的笔。总之JVM做到向java的字节码文件提供相同的接口,向不同平台提供不同的接口。不同平台有各自不同的版本的JVM。站在字节码文件的角度来看,确实实现了在各个平台上都能执行的效果,实现了跨平台。(引用疯狂JAVA第3版P7)
JDK、JRE、JVM 分别是什么关系?
JDK >JRE>JVM
JDK:java开发的工具包,提供了java程序编译和运行所需要的各种工具和资源,包括了编译器,JRE和常用的类库。
JRE:java运行时环境,包括JVM,字节码检验和类加载器等。
3. Java 支持的数据类型有哪些?
引用数据类型:String,数组,类,接口,null
基本数据类型:byte(1),short(2),int(4),long(8),float(4),double(8)
char(1),
boolean的长度有争议,《Java虚拟机规范》中说过单个出现时以int类型来存放占4字节,以数组出现占1字节。还有说占1bit
4. 什么是自动拆装箱?
基本数据类型和它对应的包装类的转换,JAVA中除了基本数据类型外都是类,将基本数据类型封装成包装类后可以提供更多的方法,做更多的操作比如数字型字符串转化为int。JDK1.5后实现了自动拆装箱。
Interger包装类:https://www.jianshu.com/p/024193d5ba00
Character包装类:https://www.jianshu.com/p/f0a0be7eb957
5. 什么是面向对象?
面向对象一种将现实生活延伸到计算机世界中的思想,方便解决问题,一切客观存在的事物都可以看作对象。面向过程主张按功能来分析需求,最小的单位是函数,面向对象中最小的单位是类。贴近现实世界,代码复用性强。(来自疯狂javaP27)
- 面向对象的三大基本特性?
封装:通过访问修饰符对类中的属性和方法做访问限制,公开需要公开的,隐藏需要隐藏的部分。(来自疯狂JAVAP130)。
访问修饰符
继承:对现有类的一种复用机制。一个类如果继承现有的类,则这个类将拥有被继承类的所有非私有特性(属性和操作)。这里指的继承包含:类的继承和接口的实现。(详情https://www.jianshu.com/p/dd9dbf82b026)
多态:不同时刻呈现不同状态,继承,方法重写,父类引用变量指向子类是多态的前提。时间可以分为运行时态和编译时,多态只针对非静态成员方法,属性和构造方法没有多态
7 什么是值传递和引用传递?
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。
引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象本身。一般认为,Java 内的传递都是值传递,Java 中实例对象的传递是引用传递。
8. Java 中,什么是构造方法?什么是构造方法重载?什么是复制构造方法?
构造方法是指类中显式返回该类的对象的方法,创建对象时在调用构造方法前就已经隐式创建好了对象,此时对象中的方法只能被this调用。构造方法可以对被创建对象进行初始化。
多个不同参数列表的构造方法称之为构造方法的重载
它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象
9单例模式
https://www.jianshu.com/p/110ec6e3315a
final:https://www.jianshu.com/p/5a01709c7c0b
10 工厂模式
https://www.jianshu.com/p/8ce955121bff
11. String和StringBuilder、StringBuffer的区别?
String 中存放的是内容和长度都不可变的字符序列
StringBuffer StringBuilder中存放内容和长度都可以变化的字符序列
StringBuffer是同步的,数据安全,但效率低
StringBuilder 是不同步的,效率高,数据不安全,但实际中基本都是单线程,所有常用StringBuilder
12 Java 集合框架有哪些?说出一些集合框架的优点?
[List子类及其特点]
ArrayList
底层数据结构是数组,查询快,增删慢
数据非安全(不同步),效率高
Vector
底层数据结构是数组,查询快,增删慢
数据安全(同步),效率低。因为是安全的所以查询也慢了,后面有新的替代,现在基本不用。
LinkedList
底层数据结构是链表,查询慢,增删快
数据非安全(不同步),效率高
【根据不同的需求使】
查询的操作多:ArrayList
增删的操作多:LinkedList
(图片来自于https://blog.csdn.net/zhangqunshuai/article/details/80660974)