java面试题基础3

java面试题基础3

1、String s = new String("xyz");创建了几个StringObject?是否可以继承String类?

  两个。第一个对象是字符串常量"xyz" 第二个对象是new String()的时候产生的。

  String类不可被继承,因为在定义String类时用final修饰了。


2、String和StringBuffer的区别

  参考:https://www.cnblogs.com/javaisbest/p/11701263.html


3、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";

  一个;"a"、“b”、“c”、“d”都是常量,对于常量,编译时就直接存储它们的字面值而不是它们的引用,在编译时就直接将它们连接的结果提取出来变成了"abcd”

4、try {}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?

  finally中的代码会被执行,执行顺序是:try中的代码 -->finally中的代码 -->return语句

  

5、final, finally, finalize的区别。

  final是修饰符,用于修饰类、方法或变量;被修饰的类不可继承,被修饰的方法不可被重写,被修饰的变量是常量且只能赋值一次。

  finally是try/catch语句中异常处理的一部分

  finalize是在java.lang.Object里定义的一个方法,当垃圾回收机制被启用时调用

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

  运行时异常(unchecked exceptions):是RuntimeException类及其子类异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。处理 RuntimeException

  的原则是:假如出现 RuntimeException,那么一定是程序员的错误

  一般异常:定义方法时必须声明所有可能会抛出的checked exception(非运行时异常,也叫编译异常),在调用这个方法时,必须捕获它的checked exception,

  不然就得把它的exception传递下去

7、error和exception有什么区别?

  Throwable类 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。

  error:是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。

     即:不是修改编码者所写程序就能解决的

  exception:是程序本身可以处理的异常,是编码者设计代码时出现的问题,如果程序运行正常,从不会发生的情况。

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

  java中的异常分为系统异常和一般异常。编译器强制一般异常必须try..catch处理或throws声明继续抛给上层调用方法处理;而系统异常可以处理也可以不处理。

  常见的异常有:NullPionterException(空指针异常)、ArrayIndexOutOfBoundsException(数组下标越界异常)、ClassCastException(类型转换异常)、    NumberFormatException(数据格式异常)、ArithmeticException(算术异常)

9、Java 中堆和栈有什么区别?

  从存储的内容上来看:

    栈内存主要存储的是方法体当中的局部变量

    堆内存主要存储的是java对象,以及对象中的实例变量  

  

  空间大小:

    堆内存的空间要远远大于栈内存

  存取速度:

    栈内存要优于堆内存

  异常错误:

    栈内存没有可用的空间存储方法调用和局部变量,JVM会抛出java.lang.StackOverFlowError

    堆内存没有可用的空间存储生成的对象,JVM会抛出java.lang.OutOfMemoryError。

    栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存。

    而堆内存中的对象对所有线程可见。堆内存中的对象可以被所有线程访问。

10、能将 int 强制转换为 byte 类型的变量吗?如果该值大于 byte 类型的范围,将会出现什么现象?

  可以。但我们知道,byte类型的取值范围是-128~127,当值在这个范围时,转换不会出现任何问题

  

     

    当超出这个范围时,就会损失精度

    

     

原文地址:https://www.cnblogs.com/javaisbest/p/12584658.html