1. 面向对象有哪些特征?
抽象,封装,继承,多态
2. JDK与JRE的区别是什么?
jdk: 编译+运行
jre:运行
jdk包括jre
jre包括jvm
3. Java有哪几种基本数据类型?
8种:byte、short、int、long、float、double、char、boolean
4. == 和equals比较有什么区别?
equals判断指向同一个内存空间的值是不是相同,而==是判断是不是指向同一个内存空间
5. public,private,protected,默认的区别什么?
作用域 当前类 同包 子类 其他
public √ √ √ √
protected √ √ √ ×
默认 √ √ × ×
private √ × × ×
6. short s1=1; s1+=1;有错吗? s1=s1+1; 有错吗?
s1+=1:没错(s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换)
s1=s1+1:有错(1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型)
7. float f = 1.9; 有错吗?
有:应该是float f= 1.9F
8. &和&&有什么区别?
相同点:&和&&都可以用作逻辑与的运算符,表示逻辑与(and)。
不同点:&&具有短路的功能,而&不具备短路功能。(&&第一个表达式为false,则不再计算下一个表达式;&则要计算完再判断)
9. 2*8最有效率的计算方法是什么?
2<<3:位运算,效率最高。一个数左移n位,相当于乘以了2的几次方。右移则相当于除法
10. 怎么理解值传递和引用传递?
值传递:值传递是传递实参副本,函数修改不会影响实参(形参接收到的内容是实参值的一个拷贝,因此在方法内对形参的任何操作,都仅仅是对这个副本的操作,不影响原始值的内容)
引用传递:引用传递是传递实参地址,函数修改会影响实参(形参和实参指向同一块内存地址,对形参的操作会影响的真实内容)
11. Java到底是值传递还是引用传递?
Java中只有值传递
12. 一个".java"源文件的类有什么限制?
一个.java文件下可以有多个类(非内部类),但只能有一个类是public,且这个类必须与文件名一致
13. final关键字有哪些用法?
四种:修饰属性、修饰方法参数、修饰方法、修饰类
14. final、finally、finalize有什么区别?
final: final用于声明属性、方法和类,分别表示属性不可变、方法不可覆盖、类不可被继承(不能再派生出新的子类)
finally: finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带着一个语句块,表示这段语句最终一定被执行,经常被用在需要释放资源的情况下
finalize: finalize是Object类中的一个方法,在垃圾收集器执行的时候会调用被回收对象的finalize()方法,可以覆盖此方法来实现对其他资源的回收,例如关闭文件等
15. void和Void有什么区别?
void:void关键字表示方法没有返回结果
Void:(1)Void是一个Class,是void的包装方法
(2)Void不能被实例化
16. 为什么byte的取值范围为-128~127?
17. char类型可以存储中文汉字吗?
char型变量中可以存储汉字
18. 重载和重写有什么区别?
方法重载: "同一个类"中,方法名相同,参数不同(个数,类型),与返回类型无关;
方法重写: (1)访问权限可以放大
(2)返回值类型一致 或 是父类返回类型的子类
(3)方法名 和 参数必须一致
验证重写:@Override
19. 构造器可以被重写和重载吗?
不能重写,可以重载:由于构造器不能继承,所以就不能被重写。但是,在同一个类中,构造器是可以被重载的
20. Java中的断言(assert)是什么?
断言:jdk1.4之后加入的断言,用于测试判断数据是否是期望值,不是则会报错抛出AssertionError
21. Error和Exception有哪些区别?
相同点:Exception和Error都是继承了Throwable类
Error(错误): 虚拟机错误,无法依靠修改程序解决的错误
Exception(异常)
22. Java中常见的异常有哪些?
空指针异常、算数异常、数组下标越界、方法参数错误
23. Java中常见的运行时异常有哪些?
空指针异常、算数异常、数组下标越界、方法参数错误
24. 运行时异常和受检异常有什么区别?
受检异常:就是编译异常、非运行时异常
运行时异常:就是非受检异常、非编译异常
25. 什么时候会发生空指针异常?
调用null对象实例方法、访问或修改null对象字段
26. 你知道有哪些避免空指针异常的方法?
异常处理,如:try/catch
27. throw和throws有什么区别?
throw是处理异常
throws是抛出异常
28. try里面return,finally还会执行吗?
会
29. int和Integer有什么区别?
(1)Integer是int的包装类;int是基本数据类型;
(2)Integer变量必须实例化后才能使用;int变量不需要;
(3)Integer的默认值是null;int的默认值是0。
30. 什么是包装类型?有什么用?
包装类:与基本数据类型对应的类
作用:(1)方便涉及到对象的操作、(2)包含每种基本数据类型的相关属性
31. 什么是自动装箱和拆箱?
自动装箱和拆箱:指的是基本数据类型与他们的包装类型之间的相互转换
32. 你怎么理解Java中的自动类型转换和强制类型转换?
低类型的基本数据会自动向高类型的基本数据类型转换 ,高类型的基本数据类型需要强制向低类型的基本数据类型转换
33. 你怎么理解Java中的类型提升?
正向过程:由低字节向高字节自动转换
byte->short->int->long->float->double
逆向过程:使用强制转换,可能丢失精度。
34. 你怎么理解强、软、弱、虚引用?
强:内存即使满了,也不会GC
软:内存满了,就会被GC
弱:只要进行GC了,就会被清除
虚:任何时候都可能被GC
35. switch是否能用在long上?
switch可作用于char byte short int和其对应的包装类,和枚举、String(jdk7)类型
switch不可作用于long double float boolean和他们对应的包装类
36. switch case支持哪几种数据类型?
switch可作用于char byte short int和其对应的包装类,和枚举、String(jdk7)类型
switch不可作用于long double float boolean和他们对应的包装类
37. String的底层实现是怎样的?
String 的底层实现是基于 char[] 数组来实现的
38. String是可变的吗?为什么?
不可变:String底层是char[]数组决定
39. 为什么不能用 + 拼接字符串?
在循环和多个表达式中不能 +,频繁创建 SB 性能影响;
40. StringBuffer和StringBuilder有什么区别?
StringBuffer、StringBuilder和String一样,也用来代表字符串。
StringBuffer 和 StringBuilder 都是可变的字符串,任何对它所指代的字符串的改变都不会产生新的对象
StringBuffer则是线程安全版的StringBuilder
41. StringJoiner有什么用?
拼接字符串,添加前后缀(当拼接字符串太长时,StringJoiner更简便)
42. 普通类和抽象类有什么区别?
(1)普通类可以去实例化调用;抽象类不能被实例化,必须通过其非抽象子类来创建实例。
(2)普通类和抽象类都可以被继承,但是抽象类被继承后子类必须重写继承的方法
43. 静态内部类和普通内部类有什么区别?
普通内部类持有对外部类的引用,静态内部类没有持有外部类的引用。
普通内部类能够访问外部类的静态和非静态成员,静态内部类只能访问外部类的静态成员。
44. 静态方法可以直接调用非静态方法吗?为什么?
不能:静态方法属于类层级,非静态方法属于对象层级。
45. 静态变量和实力变量有什么区别?
实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用
46. 内部类可以访问其外部类的成员吗?
普通内部类能够访问外部类的静态和非静态成员,静态内部类只能访问外部类的静态成员。
47. 接口和抽象类有什么区别?
接口是对对象动作的抽象,抽象类是对根源(对象)的抽象
接口可以多继承,抽象类不行
接口是抽象类的变体,接口中所有的方法都是抽象的
48. 接口里面可以写方法实现吗?
jdk8之后,接口里可以写方法实现
49. Java中的UUID是什么?
机器算法生成的,唯一通用标识
50. Java类初始化顺序是怎样的?
静态变量/代码块>mian方法> 非静态变量/代码块>构造方法
51. hashCode有什么作用?
hashCode主要是为了查找快捷
52. hashCode和identityHashCode的区别?
hashCode方法可以被重写并返回重写后的值,identityHashCode会返回对象的hash值而不管对象是否重写了hashCode方法。
53. 什么是Hash冲突?
如果两个不同对象的hashCode相同,这种现象称为hash冲突
54. Java常用的元注解有哪些?
常用四种:(1)@Target:用于指定自定义注解的使用范围
(2)@Retention:用于修饰自定义注解的生存周期,或者可以保留多久
(3)@Documented:执行javadoc命令时,被该元注解修饰的自定义注解也会生成在文档中
(4)@Inherited:如果父类所使用的注解有@Inherited修饰,则子类可以继承该注解,否则不能继承
55. Java泛型中的T、R、K、V、E分别指什么?
T :表示确定的Java类型
K、V:Java中的键值对key、value
E :Element
56. Java金额计算怎么避免精度丢失?
BigDecimal类进行计算就不会出现这种精度丢失的情况
57. Java语法糖是什么意思?
语法糖:就是对现有语法的一个封装,使语法变得更加简洁
主要语法糖:
(1)自动装箱与拆箱、变长参数(方法可以接受长度不定确定的参数)
(2)增强for循环
(3)内部类与枚举类
58. transient关键字有什么作用?
transient用于修饰不需要序列化的字段
59. 如何实现对象克隆?
实现Cloneable接口,并重写object类中的clone方法,可以实现浅克隆,也可以实现深度克隆
60. 对象克隆浅拷贝和深拷贝有什么区别?
没有引用:那浅拷贝和深拷贝没有差别
有引用:浅拷贝出的对象修改时会改变引用里的值,而深拷贝会将原对象里的引用也拷贝一份
61. Java反射机制有什么作用?
对于任意一个类,都能够知道这个类的所有属性和方法。
对于任意一个对象,都能够调用它的任意一个方法和属性。
62. Java反射机制有什么优缺点?
优点:提高了程序的灵活性和扩展性,降低模块的耦合性
缺点:(1)消耗性能、(2)安全限制、
63. 什么是宏变量和宏替换?
宏变量:
1、该变量必须是final修饰的变量;
2、该变量必须在开始时就指定初始值;
3、该初始值必须是在编译时期就可以确定
64. 什么是逃逸分析?
是一种可以有效减少Java程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法
65. 什么是伪共享?有什么解决方案?
当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享
66. Java 8新增了哪些特性?
(1)Lambda表达式
(2)函数式接口
(3)接口的默认方法和静态方法
(4)方法引用
67. Java 8中的Lambda表达式有什么作用?