Java常见面试题(Java基础上)

来源:互联网 发布:mac怎么下载梦幻西游 编辑:程序博客网 时间:2024/05/22 01:50

1.final,finally,finalize  的区别?

    看见这个问题首先我的第一印象是final,finally 都比较熟悉,但是finalize 就不怎么熟悉了

   答:(1)说先说final 关键字,这个简单一个类被final 修饰,就意味着他失去了被其他类继承的能力,既不能派生子类了,所以当一个类被final 修饰的时候就不能被abstract修饰了,final 也可以修饰变量和方法,被final 修饰的变量必须在声明时给定初始值,而且在以后的引用当中只能读取不能修改被fina修饰的方法,不能被重载

          (2)finally在异常处理中提供finally 块来执行任何清除 操作。如果不管是否抛出异常最终的finally 块都会执行的,如下是测试代码,如果把 i 改成 i=1/0;就会出现异常

package com.daben.mybatis03;public class test01 {   public static void main(String[] args) {           try{   int i = 1/1;   }catch(Exception e){   System.out.println();   }finally{      System.out.println("执行了");   }     }}
        (3)finalize 是方法名,Java 技术允许使用finalize() 方法在垃圾收集器将对象从内存中清除之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没备引用时对这个对象调用的。它是在Object 类中定义的,因此所有的类都继承了它。子类覆盖finalize() 方法以处理整个系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象的时候对这个对象调用的。(简单的理解finalize() 建议回收垃圾,但是你调用这个方法只是建议,系统不一定执行)

 2. Anonymous Inner Class(匿名内部类) 是否可以extends(继承)其他类,是否可以implements(实现)interface(借口)?

       匿名的内部类就是没有名字的内部类。不能extends 其他类。但是一个内部类可以作为一个接口,由另一个内部类实现 。

3.& 和 && 的区别以及| 和 || 的区别

  答:这个问题特别的有意思,为什么那?首先这几个符号都是逻辑运算符,& 是我们一般意义上的与运算,&& 有一种有趣的叫法叫作短路与,其实两者的在作用上差不多,但是在效率上&& 明显要好的多,&& 在进行逻辑运算的时候只要只要第一个式子 为false 第二个运算将不进行下去  如:false && i==0,程序将不进行i==0 的判断

    | 和 || 也是一样的当第一个式子为true 的时候,程序j将不会进行下一个式子的判断。

4.HashMap 和 Hashtable 的区别

   答: 都属于Map 的接口类,实现了将唯一键映射到特定值上。

  HashMap 类没有分类或排序,它允许一个null 键或多个null 值。(HashMap 是HashTable的轻量级实现,是非线程安全的

 HashTable类似于HashMap ,但是不允许null键和多个null值,它比HashMap 慢,因为它是同步的。

5.Collection 和Collections 的区别

  答:Collections 是个java.util下的类,它包含各种有关集合操作的静态方法。

       Collection 是个java.util 下 的接口,它是各种集合机构的父接口。

6.什么时候用assert(断言)?

 答:断言是一个包含bean表达式的语句,在执行这个语句时假定该表达式为true.如果表达式计算为false,那么系统会报一个AssertionErrot.它用于调试目的:

assert(a>0);//throws an AssertionError if a<=0;

断言有两种形式:

assert Expression1;

assert Expression1:Wxpression2

Expression1 用该总是产生一个布尔值

Expressiong 可以得出一个值得任意表达式。这个值用于生成显示更多调试信息的String调试信息。

断言在默认的情况下是禁用的。在编译的时候启用断言,需要使用source1.4 标记:

javac -source1.4 Test.java

在运行的时候使用断言,可使用-enableassertions或者-ea 标记

要在运行时禁止断言,可用-da 或者 diableassertions 标记

要系统类中起送断言,可使用-esa 或者 -dsa 标记。还可以再包的基础上启动或者禁用断言

可以在预计正常情况下不会到达的任意位置放置断言。断言可以验证传递给私有方法的参数,不过断言不应该用于验证共有方法的参数。不过,因为不管是否启用了断言,共有方法,共有方法不许检验其参数。不过既可以在公用方法中,也可以在私有的方法中利用断言测试后置条件。另外,断言不应该以任何的方式改变程序的状态。

7GC是什么,什么时候用GC?

答:GC 是垃圾收集器。Java程序员不应担心内存管理,因为垃圾回收器会自动进行管理。要求垃圾收集器,可以调用下面的方法之一;

System.gc();

Runtime.getRuntime().gc();

8.String s=new String("xyz");创建几个对象?

答:两个一个是“xyz” ,另外的一个是指向“xyz” 的引用对象s.

9.Math.round(11.5)等于多少?Math.round(-11.5) 等于多少?

答:返回(long) 12, 返回(long )-11.

10.short s1=1;s1=s1+1; 有什么错?short s1=1;short +=1 有什么错?

有错 s1 是short 类型的。s1+1 是int类型的,不能显示的转换成short 类型,第二个表达式是正确的。

11.sleep() 和wait() 有什么区别?

答:sleep() 方法是使用线程停止一段时间的方法,在sleep 时间间隔期满后,线程不一定立即会发执行。只是因为在那一时刻,其他线程可能正在执行而且没有被调度为放弃执行。除非(a) "醒来" 的线程具有更高的优先级(b)正在运行的线程因为其它的原因而堵塞。

wait()在线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行被调用对象进入等待状态,直至被唤醒或者等待时间到。

12. Java有没有goto?

    答:java 中的保留字,现在没有在java 中使用。

13.数组中有没有length() 方法?Sring 中有没有length()?

   答:数组只有.length 属性,没有length 方法 ,String中有length() 这个方法,用来获取字符串的长度。

14.Overloadedd 和 Overriding的区别,Overloaded   的方法是否可以改变返回值的类型?

    答: 方法重写overriding   和 Overloading 是Java 多态不同表现。重写overriding 是父类和子类之间的一种表现形式,重载Overloading 是一个类多态的一种表现,

     如果子类中定义的某方法与父类有相同的名称和参数列表,我们说该方法被重写了(Overriding),子类的对象使这个方法被“屏蔽了”。如果在一类中定义了多个同名的方法,他们或者有不同的参数个数或者有不同的参数类型,则称方法的重载(Overloading).Overloading 的方法是可以改变返回值类型。

15.Set 里的元素是不能重复的,那么用什么方法去区分类区分重复与否,使用== 还是用equals()? 他们有什么区别?

 Set  集合中的元素是不能重复的。那么用iterator()方法来区分重复与否,equals()是用来判读两个Set 集合是否相等。

equals() 和==  方法决定引用值是否指向同一个对象equals() 在类中背覆盖,为的是当两个分离对象的内容和类型相匹配的话,返回真值。






















































0 0
原创粉丝点击