码迷,mamicode.com
首页 > 编程语言 > 详细

Java常见的面试题目___来着<Java面试宝典>

时间:2018-04-13 20:33:20      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:方式   操作   处理   不同类   point   子类   程序代码   rgs   cas   

 1、 error和 exception有什么区别?
  error 表示恢复不是不可能但很困难的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
  exception 表示一种设计或实现问题。 也就是说, 它表示如果程序运行正常,从不会发生的情况。
 
2、 Java 中的异常处理机制的简单原理和应用。
   异常是指 java 程序运行时(非编译)所发生的非正常情况或错误,
Java使用面向对象的方式来处理异常, 它把程序中发生的每个异常也都分别封
装到一个对象来表示的,该对象中包含有异常的信息。
 Java 对异常进行了分类,不同类型的异常分别用不同的 Java 类表示,所有异常的根类为
java.lang.Throwable, Throwable 下面又派生了两个子类: Error 和 Exception, Error 表示应
用程序本身无法克服和恢复的一种严重问题,例如, 说内存溢出。
Exception 表示程序还能够克服和恢复的问题,其中又分为系统异常和普
通异常, 系统异常是软件本身缺陷所导致的问题, 也就是软件开发人员考虑不周所导致的问
题, 软件使用者无法克服和恢复这种问题, 但在这种问题下还可以让软件系统继续运行或者
让软件死掉,例如,空指针异常. 普通异常是运行环境的变化或异常所导致的问题,
是用户能够克服的问题, 例如, 网络断线, 硬盘空间不够, 发生这样的异常后,程序不应该死掉。
java 为系统异常和普通异常提供了不同的解决方案,编译器强制普通异常必须 try..catch处
理或用throws 声明继续抛给上层调用方法处理, 所以普通异常也称为 checked异常, 而系统
异常可以处理也可以不处理,所以,编译器不强制用 try..catch处理或用 throws 声明,所以
系统异常也称为unchecked 异常。
 
 
3、请写出你最常见到的 5 个runtime exception。
  ClassCastException,
  ArithmeticException,
  NullPointerException,
  StringIndexOutOfBoundsException,
  NegativeArraySizeException。
 
4、 String 和 StringBuffer的区别
  共同点:都可以存储和操作字符串。
  不同点:
    String类提供数值不可改变的字符串,String 实现了 equals 方法和hashCode方法。
    StringBuffer类能动态构造字符数据,提供字符串进行修改,而StringBuffer没有实现 equals方法和hashCode方法。
    将StringBuffer对象存储进Java集合类中时会出现问题。
 
5、数组有没有 length()这个方法?String有没有 length()这个方法?
    数组没有length()这个方法,有length的属性。 String有有length()这个方法。
 
 
6、下面这条语句一共创建了多少个对象: Strings="a"+"b"+"c"+"d";
  javac编译可以对字符串常量直接相加的表达式进行优化,
  不必要等到运行期去进行加法运算处理,而是在编译时去掉其中的加号,
  直接将其编译成一个这些常量相连的结果。
  题目中的s变量 相当于直接定义了一个”abcd”的字符串,
  所以,上面的代码应该只创建了一个String对象。
 
 
 
7、 ArrayList 和 Vector 的区别
  答:
    共同点:都实现了 List接口,都是有序集合。
    不同点: ArrayList是线程序不安全的,Vector是线程安全的,,
    如果只有一个线程会访问到集合, 那最好是使用
    ArrayList, 因为它不考虑线程安全, 效率会高些; 如果有多个线程会访问到集合, 那最好是
    使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。
    当集合长度不够时,ArrayList增加原来的0.5倍,Vector增长原来的一倍,
    Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空间的方法。
 
 
 8、 HashMap和Hashtable的区别
  共同点:都完成了Map接口
  不同点:
    HashMap是Hashtable的轻量级实现,
    HashMap允许空( null) 键值( key),
    HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。
    HashMap是线程序不安全的,而 Hashtable 是线程安全的。
 
9、 List 和 Map 区别?
  List是存储单列数据的集合,存储的数据是有顺序,并且允许重复
  Map是存储键和值这样的双列数据的集合,存储的数据是没有顺序的,其键是不能重复的,它的
  值是可以有重复的。
 
10、try {}里有一个 return语句,那么紧跟在这个 try后的 finally{}里的code 会不会被执行,
  什么时候被执行,在 return前还是后?
  return之前,但往更细地说,在return中间执行,请看下
  面程序代码的运行结果:
    public class Test {
        public static void main(String[] args) {
           System.out.println(new Test().test());;
      }
    static int test() {
       int x = 1;
      try{
        return x;
      }finally{
        ++x;
      }
    }
  }
---------执行结果 ---------
1
————————————
  说明:运行结果是1,主函数调用子函数并得到结果的过程,好比主函数准备一个
空罐子, 当子函数要返回结果时, 先把结果放在罐子里, 然后再将程序逻辑返回到主
函数。 所谓返回, 就是子函数说, 我不运行了, 你主函数继续运行吧, 这没什么结果
可言,结果是在说这话之前放进罐子里的。
 
 
 
11、 final,finally, finalize的区别。
    final 用于声明属性, 方法和类, 分别表示属性不可变,方法不可覆盖, 类不可继承。
  finally是异常处理语句结构的一部分,表示总是执行。
  finalize是Object类的一个方法, 在垃圾收集器执行的时候会调用某个回收对象的finalize方法,
  可以覆盖此方法提供垃圾收集时的其他资源回收, 例如关闭文件等。 JVM不保证此方
  法总被调用
 
 
12、运行时异常与一般异常有何异同?
    异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能
  遇到的异常, 是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时
  异常,但是并不要求必须声明抛出未被捕获的运行时异常
 
13、 Strings ="Hello";s= s +" world!";这两行代码执行后, 原始的 String对象中的内容到底变了没有?
       没有。因为 String被设计成不可变类,所以它的所有对象都是不可变对象。
    在这段代码中, s原先指向一个 String对象,内容是 "Hello",然后我们对 s进行了+操作,
    这时, s不指向原来那个对象了,而指向了另一个 String对象,内容为"Hello world!",
    原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。
    所以如果使用 String来经常对字符串进行各种各样的修改,或者说, 不可预见的修改的话会引起很大的内存开销。
    因为String对象建立之后不能再改变, 所以对于每一个不同的字符串, 都需要一个String对象来
    表示。这时,应该考虑使用 StringBuffer类,它允许修改,而不是每个不同的字符串都要生
    成一个新的对象。并且,这两种类的对象转换十分容易。
    对于字符串常量, 如果内容相同, Java认为它们代表同一
    个 String对象。而用关键字 new调用构造器,总是会创建一个新的对象,无论内容是否相同。
 
 
14、是否可以继承 String类?
  String类是 final类故不可以继承。
 
15、 Strings =new String("xyz");创建了几个 StringObject? 二者之间有什么区别?
     两个或一个, ”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现
  多少遍, 都是缓冲区中的那一个。 New String每写一遍, 就创建一个新的对象,
  如果以前就用过’xyz’,这句代表就不会创建”xyz”自己了,直接从缓冲区拿
 
 
 
------附加面试小技巧。
如果面试过程中,你感觉还可以,最后面面试官问你,你还有什么要问的,
你可以尝试这样回答:如果有幸进入贵公司,我需要提前准备什么前期工作吗?
这样有概率提高自己拿到offer

Java常见的面试题目___来着<Java面试宝典>

标签:方式   操作   处理   不同类   point   子类   程序代码   rgs   cas   

原文地址:https://www.cnblogs.com/LinJavaWeb/p/6759708.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!