【JAVA八股文】Java基础

1.String/StringBuilder/StringBuffer的区别

     三者的区别主要集中在不可变性、线程安全和性能、使用场景方面。

     1.不可变性

  • String内部字符数组使用final修饰,是不可变的字符串类,string对象进行改变是,都会创建一个新的string对象,旧的对象被JVM回收。
  • StringBuilder和StringBuffer是可变的,都允许修改字符串,不会创建新对象。

     2.线程安全

  • String:由于是不可变的,所以线程安全
  • StringBuffer:里面方法均使用synchronized关键字修饰,线程安全,效率略低
  • StringBuilder线程不安全,效率最高

     3.性能

  • 对于复杂字符串操作,频繁插入删除拼接,StringBuilder和StringBuffer效率高于String,因为他们是可变的,不需要创建新的对象

     4.使用场景

  • String:字符串不经常变化的场景可以使用String类,例如常量的声明,少量的变量运算。
  • StringBuilder:频繁的字符串运算,并运行在单线程环境可以使用,因为不需要同步,如SQL语句拼装,JSON封装
  • StringBuffer:频繁的字符串运算,并运行在多线程环境可以使用,方法是同步的,如XML解析,HTTP参数解析和封装。

总体来看,String适用于不经常修改的场景,其余适用于需要频繁修改字符串情况,具体选择取决于线程安全及性能考虑。

2.final关键字

final即不可变的意思,可以修饰变量、方法和类。

1.修饰类:final修饰的类不可以被继承,是最终类。

2.修饰方法:明确禁止该方法在子类中被覆盖的情况才将方法设置为final。

3.修饰变量:

  • final 修饰基本数据类型的变量,其数值一旦在初始化之后不能更改,成为常量
  • final 修饰引用类型的变量,则在对其初始化之后不能再让其指向另一个对象。虽然不能再指向其他对象,但是指向对象的内容是可变的。

3.Exception和Error有什么区别

都派生自Throwable的子类

1.Exception类及其子类主要用于表示程序可以处理的异常情况,异常分为两种类型:可检查异常(Check Exception)、不可检查异常(Unchecked Exception),可选择捕获并处理异常,也可以通过在方法签名中使用throw关键字声明方法可能抛出的异常。

2.Error

  • 表示比较严重的问题,一般是JVM运行时出现了错误,如没有内存可分配抛出OOM错误,栈资源耗尽抛出Stack OverflowError错误、JAVA虚拟机运行错误Virtual machineError、类定义错误NoClassDefFoundError
  • 描述了JAVA运行时系统的内部错误和资源耗尽错误
  • 错误不应该是程序捕获和处理,这些错误的发生通常意味着程序无法继续正常执行。如果出现这样的错误,是通告给用户,并尽力使程序安全地终止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值