Java1.5之后出现的
1)泛型
2)迭代器
3)包装类(自动装箱拆箱)
4)新的锁对象Lock
5)Java内置开始支持线程池
Java1.7之后出现的
switch开始可用String
1、HashMap和Hashtable的区别?
1) 它们都属于Map接口的类,均是<k,v>格式
2) HashMap类没有分类或者排序,它允许一个null键和多个null值,线程不安全
3) Hashtable类似于HashMap,但是不允许null键和null值,是线程安全的
2、阐述StringBuilder和 StringBuffer区别?
1)StringBuffer:线程安全,
StringBuilder:线程不安全。
因为 StringBuffer 的所有公开方法都是 synchronized 修饰的,而 StringBuilder 并没有 StringBuilder 修饰。
2)StringBuffer 每次获取 toString 都会直接使用缓存区的 toStringCache 值来构造一个字符串。而 StringBuilder 则每次都需要复制一次字符数组,再构造一个字符串。
3)StringBuffer 是线程安全的,它的所有公开方法都是同步的,StringBuilder 是没有对方法加锁同步的,所以毫无疑问,StringBuilder 的性能要远大于 StringBuffer。
3、final、finally、finalize的区别?
1)final用于声明属性,方法和类,分别表示成员变量不可更改且必须初始化,方法不可重写,类不可继承。
2)finally作为异常处理的一部分,只能再try/catch语句中,并且附带的一个语句块最终一定执行,经常被用在需要释放资源的情况下
3)finalize是在java.lang.Object里定义的方法,finalize就是用于垃圾回收的。 什么时候回收不确定
4、简述逻辑操作(&,|)与条件操作(&&,||)的区别?
1)最终结果是一样的
2)&&具有短路效果,左边为false的时候,右边不执行,结果就是false
左边是true的时候,继续执行右边,有false结果就是false
||具有短路效果,左边为true的时候,右边不执行,结果就是true
左边是false,继续执行右边,有true,结果就是true
5、方法重载和方法重写的区别?
1)方法重载:方法名相同,参数列表不同,与返回值无关
2)方法重写:方法名相同,参数列表相同,返回值相同,且子类权限不得低于父类
英文 | 位置不同 | 作用不同 | |
重载 | overload | 同一个类中 | 在一个类里面为一种行为提供多种实现方式并提高可读性 |
重写 | override | 子类和父类间 | 父类方法无法满足子类的要求,子类通过方法重写满足要求 |
修饰符 | 返回值 | 方法名 | 参数 | 抛出异常 | |
重载 | 无关 | 无关 | 相同 | 不同 | 无关 |
重写 | 大于等于 | 小于等于 | 相同 | 相同 | 小于等于 |
6、int与Integer的区别?
1) int是java提供的8种原始数据类型之一,
Integer是java为int提供的封装类。
2) int的默认值是0,而Integer的默认值为null。
3) Integer可以区分出未赋值和值为0的区别,int则无法表达未赋值的情况。
4) Integer提供了多个与整数相关的操作方法,将一个字符串转换成整数,还定义了表示整数的最大值和最小值的常量。
5) 在使用集合存整数时,只能使用Integer而不能使用int。
7、this与super的区别?
this代表的是当前对象的引用
super代表是父类存储空间的标识的引用(代表当前类父类的对象)
8、string类面试题
String s1 = new String(“hello”); 和 String s2 = “hello”; 的区别?
1)==比较引用数据类型比较的是地址值
2)equals默认比较的是地址值,但是由于String类中重写了该方法,所以比较的是内容
3)String s1 = new String(“hello”) 会在堆内存中创建对
9、JRE与JDK的区别
JRE(即Java运行环境)
包含了JVM(即Java虚拟机)+ Java程序所需的核心类库,若想运行一个已开发好的Java程序,只需安装一个JRE即可。
JDK(即Java开发工具包)
包含了Java的开发工具 + 也包含了JRE,是给Java开发人员使用的。故安装了JDK之后就不用在安装JRE了。
简单来说:JDK开发完成的Java程序,交给JRE去运行。
其中Java的跨平台性是由JVM保证的,但JVM本身不具有跨平台性。
10、switch语句中表达式的结果值的类型可以是哪些呢?
表达式的 取值:byte,short,int,char
JDK5之后可以传入枚举
JDK7之后可以是String(面试题)
11、强制类型转换
byte b1=3,b2=4,b; b=b1+b2; //这一步会出错,因为byte参与运算时会自动转换成int类型,b1+b2此时是int类型,而b此时是byte类型,由int类型转换成byte类型是强制转换 b = 3 + 4;//这一步不报错,是常量时,会先把结果计算出来,然后再去看结果在不在接收数据类型的范围类,如果在就不报错
12、OSI参考模型