java基础-常见面试题(一)

  1. 请对比 Exception 和 Error,另外区别 运行时异常与一般异常的区别?
    • Exception 和 Error 都继承Throwable 类,在java 中只有Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。

    • Error 是指在正常情况下,不大可能出现的情况,绝大部分的Error会导致程序的非正常、不可恢复状态,既然是非正常那就不需要捕获,常见的有OutOfMemoryError类

    • Exception 又分为可检查异常和不检查异常,可检查异常在源代码里必须要显示进行捕获处理,这是在编译器检查的一部分,不检查异常就是所谓的运行时异常,类NUllPointerException、ArrayIndexOutOfBoundsException 类,根据需要判断捕获。

  2. 谈谈final 、finally、 finalize有啥不同?
    • final可以用来修饰类、方法、变量;final修饰的class代表不可继承扩展,final的变量不可修改,final的方法不可重写;
    • finally 则是java保证重点代码一定要被执行的一种机制。可以使用 try-catch-finally 或 try-finally 来进行类似关闭JDBC连接、保证Unlock 锁等动作。

    • finalize 则是基础类 java.long.Object 的一个方法,他设计的目的是保证对象在被垃圾回收收集前完成特定资源的回收。

  3. 理解java 语言中的字符串,String StringBuffer、StringBuilder 有什么不同?
    • String 是一个非常基础的类,提供了构造和管理字符串的各种基本逻辑。它是典型的Immutable类,被声明为 final class,由于他的不可变性,类似拼接、裁剪字符串都会产生新的String 对象。由于字符串的操 作的普遍性,所以相关操作对于应用的性能也有所影响。

    •  StringBuffer 是为了解决上面拼接产生太多中间对象的问题提供的一个类,可以使用append、add方法,把字符串添加到已有序列的末尾或指定位置。StringBuffer 是一个线程安全的类,所以随之带来了额外的性能上的开销,除非有线程安全的需要,不然推荐他的后继者 StringBuilder。

    •  StringBuilder 本质上和 StringBuffer 没有区别,但是他去掉了线程安全的部分,有效的减少了线程开销,是绝大部分情况下进行字符串拼接的首选。

  4. int 和Integer 有什么区别?谈谈Integer值的缓存范围。
    • Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。

    • int是整形数字,是java 8个原始类型之一(Type 、boolean 、byte、short、char、int 、float、double、long )。
    • Integer 是int对应的包装类,他有一个int 类型的字段存储数据,并且提供了基本操作,比如数学运算、int 和字符串之间的转换等,在java5 中引入了自动装箱和自动拆箱功能,自动进行转换,极大的简化了相关的编程。

    •  关于Integer 的值缓存,涉及到java5 的另一改进,构建Integer 对象的传统方式是调用构造器,直接new 一个对象。我们发现大部分的操作是集中在较小的数值范围内,java5 中新添加了静态工厂方法 valueOf,在调用是利用缓存机制,带来明显的性能改进,按照javdoc,这个值默认缓存是 -128至127 之间。

posted @ 2020-07-11 10:42  小呆俊  阅读(100)  评论(0编辑  收藏  举报
/*标题彩虹滚动字*/ #blogTitle h1 a{ background-image: -webkit-gradient( linear, left top, right top, color-stop(0, #f22), color-stop(0.15, #f2f), color-stop(0.3, #22f), color-stop(0.45, #2ff), color-stop(0.6, #2f2), color-stop(0.75, #2f2), color-stop(0.9, #ff2), color-stop(1, #f22) ); color: transparent;-webkit-text-fill-color: transparent; -webkit-background-clip: text; -webkit-background-size: 200% 100%; -webkit-animation: maskedAnimation 2s infinite linear; -webkit-background-clip: text;-moz-background-clip: text;-ms-background-clip: text /*文字颜色变化*/ @keyframes maskedAnimation { 0% { background-position: 0 0; } 100% { background-pos