Java日常,助你高薪就业,冲冲冲

1 、是否可以继承 String 类?

  • String类是final修饰类,所以不可以继承。
  • 使用final方法的原因有二:
      第一、把方法锁定,防止任何继承类修改它的意义和实现。
      第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。

2 、String s = new String(“xyz”); 创建了几个 String Object? 二者之间有什么区别?

  • 分两种情况(一个或两个):
  1. 如果String常量池中,已经创建"xyz",则不会继续创建,此时只创建了一个对象new String(“xyz”),此时为一个Object对象。
  2. 如果String常量池中,没有创建"xyz",则会创建两个对象,一个对象的值是"xyz",一个对象new String(“xyz”),此时为二个Object对象。

3 、String 、 StringBuffer和StringBuilder的区别。

  1. String是字符串常量;StringBuffer是字符串变量(线程安全);StringBuilder是字符串变量(非线程安全)。
  2. 速度:大部分情况下,String < StringBuffer < StringBuilder
  3. String 覆盖了equals方法和hashCode方法,StringBuffer没有覆盖equals方法和hashCode方法。
  4. 三者底层均采用字符数组实现。

4 、数组有没有 length() 这个方法? String 有没有 length()。

  • 数组没有length()方法,有length属性。Stringlength()方法。

5 、下面这条语句一共创建了多少个对象:String s=“a”+“b”+“c”+“d”。

  • 对于如下代码:
String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.println(s2 == "ab");
System.out.println(s3 == "ab");

第一条语句打印的结果为 false,第二条语句打印的结果为 true,这说明 javac 编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时去掉其中的加号,直接将其编译成一个这些常量相连的结果。
题目中的第一行代码被编译器在编译时优化后,相当于直接定义了一个”abcd”的字符串,所以,上面的代码应该只创建了一个 String 对象。写如下两行代码,

String s = "a" + "b" + "c" + "d";
System.out.println(s == "abcd");

最终打印的结果应该为 true

6 、final, finally, finalize 的区别。

  • final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
    内部类要访问局部变量,局部变量必须定义成 final 类型。
  • finally 是异常处理语句结构的一部分,表示总是执行。
  • finalizeObject 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM 不保证此方法总被调用。

7 、运行时异常与一般异常有何异同?

  • 异常表示程序运行过程中可能出现的非正常状态。
  • 运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

8 、error 和 exception 有什么区别?

  • error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
  • exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

9 、Java 中的异常处理机制的简单原理和应用。

  • 异常是指 java 程序运行时(非编译)所发生的非正常情况或错误,与现实生活中的事件很相似,现实生活中的事件可以包含事件发生的时间、地点、人物、情节等信息,可以用一个对象来表示,Java 使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象来表示的,该对象中包含有异常的信息。
  • Java 对异常进行了分类,不同类型的异常分别用不同的 Java 类表示,所有异常的根类为java.lang.Throwable,Throwable 下面又派生了两个子类:Error 和 Exception,Error 表示应用程序本身无法克服和恢复的一种严重问题,程序只有死的份了,例如,说内存溢出和线程死锁等系统问题。Exception 表示程序还能够克服和恢复的问题,其中又分为系统异常和普通异常,系统异常是软件本身缺陷所导致的问题,也就是软件开发人员考虑不周所导致的问题,软件使用者无法克服和恢复这种问题,但在这种问题下还可以让软件系统继续运行或者让软件死掉,例如,数组脚本越界(ArrayIndexOutOfBoundsException),空指针异常(NullPointerException)、类转换异常(ClassCastException);普通异常是运行环境的变化或异常所导致的问题,是用户能够克服的问题,例如,网络断线,硬盘空间不够,发生这样的异常后,程序不应该死掉。
  • java 为系统异常和普通异常提供了不同的解决方案,编译器强制普通异常必须 try…catch 处理或用 throws 声明继续抛给上层调用方法处理,所以普通异常也称为 checked 异常,而系统异常可以处理也可以不处理,所以,编译器不强制用 try…catch 处理或用 throws 声明,所以系统异常也称为 unchecked 异常。

10 、请写出你最常见到的 5 个 RuntimeException 。

  • ClassCastException类转换异常,
  • IllegalArgumentException非法参数异常,
  • IndexOutOfBoundsException数组越界异常,
  • NullPointerException空指针异常,
  • ArrayStoreException数据存储异常。
  • java运行时异常是可能在java虚拟机正常工作时抛出的异常。java提供了两种异常机制。一种是运行时异常(RuntimeExepction),一种是检查式异常(checked execption)。
  • 检查式异常:我们经常遇到的IO异常及sql异常就属于检查式异常。对于这种异常,java编译器要求我们必须对出现的这些异常进行catch。所以,面对这种异常不管我们是否愿意,只能自己去写一堆catch来捕捉这些异常。
  • 运行时异常:我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值