Java基础面试题

1. JVM JRE JDK 的区别:
JVM:java 虚拟机,是 java 实现跨平台的最核心部分,能够运行 java 语言所开发的程序
JRE:java 运行环境,是运行 java 程序所必须的环境的集合,包括 JVM+java 系统类库
JDK:java 开发工具包,是 java 的核心,包括 JRE+ 编译、运行等命令工具
2. switch 可以作用于哪些数据类型上 ?
byte,short,int,char,String, 枚举,其余类型都不允许
3. java 8 种基本数据类型是什么 ?( 简述 java 8 种基本数据类型 )
byte: 字节型,用于存储整数的,占用 1 个字节,范围 -128 127
short: 短整型,用于存储整数的,占用 2 个字节,范围 -32768 32767
int: 最常用的整型,用于存储整数的,占用 4 个字节,范围 -2^31 2^31-1
long: 长整型,用于存储较大的整数,占用 8 个字节,范围 -2^63 2^63-1
float: 单精度浮点数,用于存储小数的,占用 4 个字节,不能表示精确的值
double: 双精度浮点数,最常用的存储小数的类型,占用 8 个字节,不能表示精确的值
boolean: 布尔型,存储 true false ,占用 1 个字节
char: 字符型,采用 Unicode 字符编码格式,存储单个字符,占用 2 个字节
4. 重写与重载的区别:
重写 : 发生在父子类中,方法名相同,参数列表相同 ---- 用于在子类中修改父类中的方法
重载 : 发生在同一类中,方法名相同,参数列表不同 ---- 方法名相同的完全不同的方法
5. 实例变量与静态变量的区别:
实例变量和静态变量都属于成员变量
实例变量 : 是属于对象的,在创建对象时存储在内存堆中,创建多少个对象,则实例变量就会
在内存堆中存在多少份,需要通过引用变量来访问
静态变量 : 是属于类的,在类被加载时存储在内存方法区中,无论创建多少个对象,静态变量
在内存中都只有一份,常常通过类名点来访问
6. java 是值传递还是引用传递 ?
java 中,无论是基本类型还是引用类型,都是值传递
对于基本类型而言,传递的是具体的值的副本
对于引用类型而言,传递的是具体的地址的副本
7. 抽象类与接口的区别:
抽象类:
abstract 修饰
可以包含变量、常量、构造方法、普通方法、静态方法、抽象方法
派生类通过 extends 来继承
只能继承一个 ( 体现单一继承 )
抽象类中的成员,任何访问权限都可以 ( 默认为默认权限 ( 同包中 ))
接口:
interface 定义
只能包含常量和抽象方法
实现类通过 implements 来实现
可以实现多个 ( 体现多实现 )
接口中的成员,访问权限只能是 public( 默认 public 权限 )
8. String s = new String("hello"); 创建了几个对象 ? 两个。一个是 hello 字面量对象,另一个是 new 出来的对象。
9. == equals() 的区别:
== 可以作用于基本类型,也可以作用于引用类型
若为基本类型,则是在比较值是否相等
若为引用类型,则是在比较地址值是否相等
equals() 只能作用于引用类型
Object 类的 equals() 默认比较的还是 ==( 即比较地址 ) ,但是没有参考意义,所以常常需要
重写 equals() 来比较对象的属性值是否相同。注意 :String 类重写了 equals() 来比较字符串
的内容是否相同
10. String 常用的方法有哪些 ?
length(): 获取字符串的长度 ( 字符个数 )
trim(): 去掉两边的空白字符
toUpperCase()/toLowerCase(): 将英文部分给转换为全大写 / 全小写字母
startsWith()/endsWith(): 判断是否是以 ??? 开始 / 结束的
charAt(): 根据下标找字符
indexOf()/lastIndexOf(): 查找字符串第一次出现 / 最后一次出现的下标
substring(): 截取字符串
静态方法 valueOf(): 将其它类型的数据转换为字符串
matches(): 验证匹配 ( 正则表达式 )
replaceAll(): 替换 ( 正则表达式 )
split(): 拆分 ( 正则表达式 )
11. String StringBuilder StringBuffer 的区别:
String: final 修饰,所以不能被继承。底层封装的是 final 的字符数组,所以为不变对象。每
次修改 String 引用变量的值,都是在创建新的对象。适合查看,但不适合频繁修改在实际应用
中对于字符串大部分情况下都是在查看, String 应用率最高。
StringBuilder: 底层封装的是字符数组,所做操作就是在该数组之上的,修改效率高。非线程
安全的,并发处理的,性能稍快 ---- 一般都是用 StringBuilder
StringBuffer: 底层封装的是字符数组,所做操作就是在该数组之上的,修改效率高。线程安全
的,同步处理的,性能稍慢
12. ArrayList LinkedList 的区别:
ArrayList 是基于数组实现的,容量不够时采用复制方式扩容,而 LinkedList 使用链表实现
ArrayList LinkedList 在随机访问的时候效率要高,因为 LinkedList 是链表结构,需要依次查
找元素,性能不高
LinkedList 首位增删具备很高的效率,而 ArrayList 的增删性能稍差
综合来说,需要频繁读取集合中的元素时,更推荐使用 ArrayList ,而在头尾增删操作较多
时,更推荐使用 LinkedList ArrayList 综合性能优秀,应优选。
13. Collection Collections 的区别:
Collection 是一个集合接口,是集合类的一个顶级接口,它里面定义了集合通用的方法, List
Set 直接继承了 Collection 接口。
Collections 是集合的一个工具类,其中提供了一系列静态方法,用于对集合中的元素进行排
序、搜索以及线程安全等操作。
14. Map List Set 的区别是什么?
List 为线性表,有序可以重复的集合,元素有先后次序,可以按照位置访问元素,可以存储
null
Set 为元素不重复集合,不保证元素的先后次序,可以存储一个 null
Map 元素按照 key:value 成对存储,可以按照 key 查找 value ,查找性能好, key 不可以重复,
可以存储一个 null key 15. 什么是节点流,什么是过滤流,并且说出常用的节点流和过滤流:
节点流:可以从或向一个特定的地方 ( 节点 ) 读写数据,直接跟数据源相接。常用的节点流有:
FileInputStream FileOutputStream ByteArrayInputStream
ByteArrayOutputStream
过滤流:是对一个已存在的流的基础之上进行功能扩展。常用的过滤流有:
BufferedInputStream BufferedOutputStream InputStreamReader
OutputStreamWriter ObjectInputStream ObjectOutputStream
16. 什么叫对象序列化?什么是反序列化?实现对象序列化需要做哪些工作?
序列化:把对象转化为可传输的字节序列的过程称为序列化
反序列化:把字节序列还原为对象的过程称为反序列化
其实序列化最终的目的是为了对象数据存储,或者进行网络传输。 Java 实现序列化很简单,只
需要被序列化对象类实现 Serializable 接口,然后使用对象流进行序列化和反序列化。可以使
ObjectOutputStream 进行对象序列化,使用 ObjectInputStream 进行对象反序列化。
17. 函数式接口是什么?方法引用?
所谓 " 函数式接口 " ,是指仅仅只包含一个抽象方法,但是可以有多个非抽象方法 ( 默认方法 )
接口。
Java9 允许通过 :: 关键字来传递方法或构造函数的引用。
18. Java 异常体系:
顶层是 Throwable ,然后是 Error Exception
Error 就是虚拟机错误,比如典型的 OutOfMemoryError StackOverFlowError ,出现以后系
统基本崩溃,不可恢复。
Exception 分为两部分:
RuntimeException ,也称为非检查异常,程序运行过程中才可能发生的异常,一般为代
码的逻辑错误。例如:类型转换异常,数组下标越界异常,空指针异常等等。
检查异常,为编译期间可以检查到的异常,必须是显示的进行处理 ( 捕获或抛出到上一
) ,例如: IOException FileNotFoundException 等等。
19. final finally finalize 的区别:
final :是关键字,被 final 修饰的变量初始化后不能被改变,被 final 修饰的方法不能被重写,
final 修饰的类不能被继承
finally :是在异常处理时的 finally 块,不管有没有异常被抛出、捕获, finally 块都会被执行
finalize :是方法名,它是在 Object 类中定义的,因此所有的类都继承了它。 finalize() 方法是
在垃圾回收器删除对象之前对这个对象调用的。
20. 遍历 Hashmap 的方式:
Entry 遍历、 keySet 遍历、 foreach 遍历、 keySet foreach 遍历
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值