zoukankan      html  css  js  c++  java
  • 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,当值在这个范围时,转换不会出现任何问题

      

         

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

        

         

  • 相关阅读:
    Python动态生成Bean类,并且带toString,equals,hashcode方法
    逆向工程核心原理——第十八章
    逆向工程核心原理——第十七章
    逆向工程核心原理——第十六章
    逆向工程核心原理——第十五章
    Creckme_bjanes.1
    CTF_python-trade
    大二下学期阅读笔记(人月神话)
    大二下学期个人作业(三个和尚)
    大二下学期团队项目(收藏转移)
  • 原文地址:https://www.cnblogs.com/javaisbest/p/12584658.html
Copyright © 2011-2022 走看看