1.为什么java是半编译半解释性的语言,java如何实现跨平台
java的编译器先将其编译为class文件,也就是字节码;然后将字节码交由jvm(java虚拟机)解释执行, 所以很多地方都说“java是一种半编译、半解释执行”的语言
JAVA字节码通过虚拟机翻译(解释)给不同的平台,这个过程就叫做跨平台。JAVA字节码文件只有一个,但针对不同的平台会有不同的虚拟机,究其原因,实现跨平台最根本的东西是虚拟机
2.简述加强for循环有哪些使用限制
加强for不支持在遍历时修改集合元素
使用加强for时需要对所遍历的集合进行nul判断,否则会引发空指针异常
3.简述String、StringBuffer、StringBuilder的区别
String 类时不可变类,一旦一个String对象创建后,就不能修改知道销毁。
StringBufffer 则是一个字符序列可变的字符串 可以通过其提供的方法对该字符串进行各种操作 生成最终想要的字符串时,可以通过toString方法,将其转换成String类。
StringBuilder与StringBuffer基本相同 但区别是StringBuilder不需要安全检查,效率更高。
4.abstract class和interface有什么区别
Abstrcat 类是抽象类 interface 是接口 两者本质不同。
抽象类中可以有构造方法而接口中不能。
抽象类中可以包含普通或者抽象方法而接口中必须都是未实现的方法。
接口与接口之间可以多继承,而抽象类与类之间只能单继承。
一个类可以实现多个接口,而类与抽象类的继承只能为单继承
接口中的方法不加访问修饰符是 public abstract,而抽象类中不加访问修饰符是 默认的
5.简述Java类成员的访问控制权限
同类 同包 非同包子类 非同包非子类
Private √
Default √ √
Protected √ √ √
Public √ √ √ √
6.简述final的作用
可用于修饰变量 表示常量
可用于修饰类 表示最终类 即无子类
可用于修饰方法 表示最终方法 即不嗯你被重写或覆盖
7.简述overload和override的区别
Overload:重载
重载的方法名必须相同 但参数列表不同 构成重载的条件与返回值类型无关。
Override:重写
重写的方法名 方法列表必须完全相同,返回值类型如果是基本类型,则必须相同,如果是类类型,则应是其父类的返回值类型或子类。
8.简述Java的GC机制,finallize方法的作用
gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存。java语言并不要求jvm有gc,也没有规定gc如何工作。不过常用的jvm都有gc,齟大多数gc都使用类似的算法管理内存和执行收集操作。
Finallize表示一个Objec类的方法,在垃圾回收机制中执行的时候,它最主要的用途是回收特殊渠道申请的内存。
9.JDK8中如何声明默认方法?默认方法的价值在什么地方?
Default 被用来声明默认方法
在接口的命名前加默认 匿名类无需实现该方法
10.简述Collections和Collection的区别
Collection是一个接口,用于定义集合操作的标准。
Collections是一个工具类,可以操作任意的的集合对象。
11.什么是函数式接口?@Functional的的作用是什么?
函数式接口:在接口中有且只有一个未实现的方法。
@Functional 可用于限制该接口必须是函数式接口,否则会报错。
12.简述三种循环的区别
for循环的循环迭代语句并没有与循环体放在一起,不管是否使continue语句来结束本次循环,循环迭代语句一样会获得执行。
while循环先先判断是否符合条件在执行,可能一次都不执行。
do-while循环一定会先执行一次循环体内容,在根据循环条件决定是否继续执行。
13.简述方法返回值类型和return的关系
return语句返回的类型必须与函数的返回值类型相同。有返回值,就一定有return。
14.简述Java中this和super关键字的作用
this:本类成员 super:父类成员
This():本类构造 super():父类构造
15.final、finally、finallize的区别是什么
final: 表示最终的,用于修饰常量,类,方法。
finally:是一种异常处理机制,是对异常处理模式的补充。无论一异常是否发生,finally中的代码总会被执行。
finallize是一个方法名,用于垃圾回收机制时将对象从内存清除出去之前。
16.简述面向对象的三个主要特征
封装、继承、多态
17.List、Set、Map的区别有哪些
List:实现Collection接口的子接口,允许元素的重复,有序,允许任意数量的空值。
Set:实现Collection接口的子接口,不要允许元素的重复,若重复则只显示一个,无序,最多之允许一个空值的出现。
Map:是另一个集合接口,与Collection平级,以键值对的形式对元素进行储存,不允许重复键,但允许值重复。无序,之允许出现一个空键,但可以出现多个空值。
18.java8个基本类型,包括占用字节数和取值范围(浮点型不需要写取值范围)
int: 4个字节 -231 ~ 231-1
char: 2个字节 ‘\u0000’ ~’\uFFFF’
double: 8个字节
float: 4个字节
boolean: true/false
byte: 1个字节 -27 ~ 27-1
short: 2个字节 -215 ~ 215-1
long: 8个字节 -263~263-1
19.break和continue的区别
break:结束循环
continue:忽略本次循环
20.类的初始化块在何时执行?
在每一次实例化时
21.简述ArrayList、LinkedList和Vector的区别
实现方式:LinkedList:双向链表; ArrayList,Vector:数组
线程安全性:Vector:线程安全; ArrayList、LinkedList:非线程安全
线程同步:Vector:支持线程的同步;ArrayList、LinkedList:不支持线程的同步
22.简述jvm,jdk,jre的关系
JVM:java虚拟机,作用:保证java语言跨平台
JRE:java运行环境 jre=java虚拟机+核心类库。作用:java程序的运行环境。
JDK :java开发工具集。JDK=jre+java开发工具。作用:java程序的开发环境。
使用jdk开发完成的java程序,交给JRE去运行,由JVM来保证跨平台
23.&&和&的区别
&按位与/&&逻辑与。
&,双目运算符:将两个表达式的值按二进制位展开,对应的位(bit)按值进行“与”运算,结果保留在该位上
&&:双目运算符,计算两个表达式同时成立的“真值”(同时成立真值为真否则为假)
24.简述Java中的三种注释
// 单行注释
/…/ 多行注释
/**…*/ 对文档或类注释
25.String str=”hello”;几次分配空间,请简述分配过程?
两次分配空间 现在栈区开辟一个空间存str,之后在堆区开辟空间存hello
26.简述HashMap和HashTable的区别
Hashtable 线程安全,不允许键值对为空
HashMap线程不安全,效率更高,允许键值为空
27.对比匿名内部类和Lambda它们有什么异同?
【Lambda表达式与匿名内部类的 区别】
1.匿名内部类可以为任意接口创建实例——不管有多少个抽象方法,只要匿名内部类实现了所有方法即可。
但是Lambda表达式只能为函数式接口创建实例。
2.匿名内部类可以为抽象类甚至普通类创创建实例,
但lambda表达式只能为函数式接口创建实例。
3.匿名内部类实现的抽象方法体允许调用接口中的默认方法,
但Lambda表达式的代码块不允许调用接口中的默认方法。
【Lambda表达式与匿名内部类的 相同点】
1.Lambda表达式和匿名内部类一样,都可以直接访问"effectively
final"的局部变量,以及外部类的成员变量(包括实力变量和类变量)
2.Lambda表达式创建的对象和匿名内部类创建的对象一样,都可以直接调用从接口中继承的默认方法。
28.简述如何实现对ArrayList集合进行排序(不是冒泡)
Sort()方法
29.在java内存中有几个区域?(答出>=3个)
静态存储区 堆区 栈区 常量区
30.什么编译期类型、什么是运行期类型、什么是静态绑定、什么是动态绑定
编译时类型由声明该变量时使用的类型决定 此时时动态绑定
运行时类型由实际赋给该变量的对象决定 此时时静态绑定
31.方法是动态绑定还是静态绑定,为什么?
方法是动态绑定
32.在java中浮点类型会精度缺失,用什么类解决精度缺失问题
通过使用BigDecimel进行转换后再计算。
33.Java中的八大包装类有哪8个?
Integer Double Byte Float Boolean Long Short Character
33.在jdk1.8中接口定义时,包括的成员有哪些?(>=3种)
变量 为实现方法 已实现方法 静态方法
34.构成方法重写时,重写时的三个注意规则,规则是哪三个?
1. 重写的方法名 方法列表必须完全相同,返回值类型如果是基本类型,则必须相同,如果是类类型,则应是其父类的返回值类型或子类。
2.子类抛出的异常不能超过父类相应方法抛出的异常。
3.子类方法饿访问级别不能低于父类方法的访问级别
35.对于基本类型与引用类型判断相等时的区别?引用类型如何判断值相等。
对于基本类型判断是是比较值是否相等,对引用类型判断是是比较堆中的地址是否相同。引用类型判断值相等应采用.equals()
36.String str=”hello”与String str1=new String(“hello”); strstr1?是否相等?为什么?
不相等
str=“hello”;这种方法创建的字符串,如果内存已经为“hello“字符串分配了内存,那么str就指向“hello”内存对象的地址
String str=new String(“hello”);这种方法创建的字符串,不管内存有没有为“hello”字符串分配内存,都会在内存中重新分配一个内存区域存放“hello”,然后用str指向它,相当于内存中有两个“hello”只是存放的地址不一样。
37.Integer a1=125;Integer a2=245; a1a2?是否相等?为什么?
不相等 Integer的取值范围是-128 ~127 超出这个范围要用.equals
38.List与List接口的区别?
List是接口,ArrayList是List的一种实现,List是ArrayList的泛型,
39.什么是ArrayList 的扩容?
增加容量,以确保它至少能容纳由最小容量参数指定的元素数
40.ArrayList与HashMap的区别?
1.ArrayList :有序允许重复,按索引访问
HashMap:无序通过键值来访问存值
2. 底层实现:ArrayList:数组扩容
HashMap:链表+红黑树
41.如何防止一个类在外部进行实例化?如何防止一个类被继承?
私有构造防止类的被实例化
使用final可以防止该类被继承
42.请解释类与对象的关系?
类是对象的抽象,对象是类的实例化
43.请解释如下关键字用法:final,abstract,interface,class,new ,extends的作用和用法
final: 可用于修饰变量 表示常量
可用于修饰类 表示最终类 即无子类
可用于修饰方法 表示最终方法 即不嗯你被重写或覆盖
abstract:可用于修饰类 表示抽象类
可用于修饰方法 表示抽象方法 抽象方法必须在抽象类中 不能被实例化
interface:接口 支持多继承 可以类被实现 不能被类继承
class:声明类
new:实例化对象时使用,即创建新对象时。
extends:表示继承
44.继承与实现的区别?
继承是子类继承父类 即类之间的关系为继承
实现是类与接口的关系 通常为类实现接口
Java只支持单继承,但可以多实现