基础语法
下边是我自己整理的面试题,基本已经很全面了,想要的可以私信我,我会不定期去更新思维导图
哪里不会点哪里
基本数据类型和方位修饰符
数据类型有哪些
- 基本数据类型
byte、int、short、long、float、double、boolean、char - 引用数据类型
类、数组、接口
访问权限修饰符区别
JavaSE语法
接口和抽象类的区别
- 实现
抽象类需要使用extends
接口需要使用implements - 构造函数
抽象类可以有构造函数
接口不能 - main方法
抽象类可以有,并且可以运行
接口不行 - 实现数量
抽象类单继承,接口多实现 - 访问修饰符
抽象可以是任意修饰符
接口只能是public
final、finally、finlize区别
- final:可以用于属性,方法和类,分别表示属性不可改变,方法不可覆盖,类不可继承
- finally:异常的一部分,标识总是执行
- finlize:object提供的方法,在垃圾收集器执行的时候会调用被回收对象的此方法
抽象类能用final修饰么
不能,final修饰类之后类不允许被继承
为什么不能用浮点型表示金额
计算机中保存的小数其实是10进制小数的近似值,不是很准确,建议使用bigDecimal或者long来表示
int和Integer区别
- Integer是int的封装类
- int的默认值是0,Integer默认值是null
char变量中能不能存储一个中文汉字,为什么
可以。
Java使用的编码是Unicode,里面包含了汉字,可以存储
&和&&的区别
- &:有俩种用法,1是按位与,2是逻辑与
- && :短路运算,左边为false之后不会继续执行右边的逻辑运算
==和equals区别
- 一个方法一个运算符
- ==比较原生类型,equals方法比较两个对象的内容是否相等
- ==如果比较的是基本数据类型,则比较数值,如果比较引用,则是比较地址值是否相等
- equals不能用于基本数据类型,如果没有重写,默认比较的是对象的地址
为什么重写equals使必须重写hashCode方法
- 提高效率:先进行hashCode比较,如果不同,没必要进行equals比较
- 保证同一个对象:如果重写了equals未重写hashCode,会出现equals相同而hashCode不同
- 重写后俩方法的关系:
- equals相等,hashCode一定相等
- hashCode不等,equals一定不等
- hashCode相等,equals不能确定
Math.round(1.5)=?
2
Math.round(-1.5)=?
-1
重写和重载的区别
- 重载
- 方法名一直,参数顺序,类型,个数不同
- 与返回值无关
- 可以抛出不同异常,可以有不同修饰符
- 重写
- 参数和返回类型必须一直
- 构造方法不能重写
- 访问权限不能比父类中的更低
- 抛出的异常不能比父类中的更广
构造方法能不能重写,能不能重载,能不能显示调用
- 不能重写
- 可以重载
- 不能显示调用,只能在创建对象的时候由系统调用
静态变量和实例变量区别
- 静态变量
被static修饰的变量称为类变量,不属于任何对象,一个类不管创建多少个,类变量只有一份 - 实例变量
必须依靠实例,由实例对象调用
什么是隐式转化,什么是显示转换
- 隐式转换:自动转换类型,大范围的变量能够接受小范围的数据
- 显示转换:强制类型转换,大范围的数据强制复制给小类型的数据
什么是拆装箱
- 拆箱:把包装类转换成基本数据类型
- 装箱:把基本数据类型转换成包装类
break和continue区别
- break:跳出循环
- continue:跳出当前循环执行下次循环
String类
String、StringBuffer、StringBuilder的区别
- 都是final修饰,不允许继承
- String长度不可变
- buffer线程安全,builder不安全,他俩方法仙童,buffer在方法上加了Synchronized,保证线程安全
- builder比buffer性能好
如果一个String类型的字符串,在编译的时候就可以确定是字符串常量,编译成功之后自动拼接成一个常来那个,这时String性能比buffer和builder更好
String str=“aaa” 与 String str=new String(“aaa”)一样吗?
不一样
- String str=“aaa”:创建了一个常量,分配到了常量池中
- String str=new String(“aaa”):创建了2个对象,一个在常量池中,一个在堆内存中
String str=“aa” ,String s=“bb” ,String aa=aa+s;一共创建了几个对象?
2个引用3个对象
aa和bb都是常量,执行拼接的时候创建了一个新的常量aabb
String s = “Hello”;s = s + " world!";这两行代码执行后,原始的 String 对象中的内容到底变了没有?
没有
1个引用2个常量,原来的hello还在,指针已经指向了新的常量hello world地址
泛型
什么是泛型
jdk5的新特性,定义类和接口的时候使用类型参数,主要运用在集合上
泛型中的K、T、V、E、object等的含义
- E:Element在集合中使用
- T:type Java类
- K:Key建
- V:value值
- N:Number数值类型
- ?:不确定类型,无限制通配符
- object:所有类的根类,使用的时候需要类型强制转换