Java基础知识常见面试题

来源:互联网 发布:java邮箱注册验证 编辑:程序博客网 时间:2024/04/24 10:55

一、 Java基础知识

1.     作用域public,,protected, private以及不写时的区别

作用域  当前类  同一package  子孙类  其他package
public                        
protected                     ×
friendly                 ×       ×
private            ×       ×       ×

不写时默认为friendly

 

2.     HashMapHashtable的区别

HashMap 是不同步的,线程不安全; Hashtable是同步的,线程安全的。

HashMap 允许null 作为keyvalueHashtable不允许。

 

3.     ArrayListVector的区别

ArrayList是不同步的,线程不安全;Vector是同步的,线程安全的。

当需要增长时, ArrayList默认增长原来的一半;Vector默认增长原来的一倍。

 

4.     Collection Collections的区别

Collection是集合类的接口,SetList 继承于它;

Collections是集合类的一个帮助类,提供了一系列的静态方法,如对集合的搜索、排序等操作。

 

5.     Compartor 接口和 Comparable接口的区别

Comparator是比较器,用来比较别人的,需要比较两个对象,所以是public int compare(Object, Object);  
Comparable
是自比较的,拿自己和别人比,所以是public int  compareTo(Object);

对两个对象o1o2进行比较,如果o1位于o2的前面,则返回负值,如果在排序顺序中认为o1o2是相同的,返回0,如果o1位于o2的后面,则返回正值

Comparator 是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。

strategy design patternDefine a family of algorithms, encapsulate each one, and make them interchange. Strategy lets the algorithm very independently from clients that use it.

 

6.     StringStringBuffer的区别

String final class,不可变;StringBuffer不是,可变。 多个字符串连接用StringBufferappend方法。

 

7.     int Integer 区别

int是基本数据类型(Primitive);Integerint的包装类(Wrapper)。

Int一般用在数值计算中;Integer用在要使用对象的地方,如MapKeyValue中, SetListElement中。JDK1.5 中会自动进行类型转换。

 

8.     &&&的区别

在两个运算符都能用在布尔运算中,
当使用&&运算符时,   如果第一表达式为假   就不再判断第二表达式的真假
当使用&运算符,   当第一表达式为假,   还是会去第二表达式

&也能用在位运算中。

 

9.     final, finally, finalize的区别

final是修饰符。 当一个类被声明为final时,它就不能派生子类;当一个方法被声明为final时,它就不能被重写(override);当一个变量被声明为final时,它就不能被修改。

finally 异常处理时的finally块。

finalize 垃圾收集器在删除对象前调用的方法。

 

final的成员变量:
1.
声明时直接赋值
2.
声明时不赋值,在所有的构造方法中赋值。

 

注意点:

final的成员变量不会被自动初始化,即使被static 修饰。

final修饰引用类型的成员变量时,表示该引用的值不能改变,而不是该引用所指向对象的内容不能改变。
一个类不能既是abstract的又是final的。
如果我们将一个成员变量声明为final的,通常又将它设为static,目的是为了节省内存。

 

10.  errorexception的区别

error 表示系统级的错误和程序无法处理的异常,如内存泄漏。

exception 表示需要捕捉或需要程序处理的异常。

Exception分类:

运行时异常:继承RuntimeException。(UnChecked Exception

非运行时异常: IOException。(Checked Exception

对于非运行时异常的两种处理方式:继续抛出或者 try catch

 

11.  sleep() wait() 的区别

sleep()是线程类Thread的方法,不释放对象锁,暂停指定时间后,到时就自动恢复。

wait()Object类的方法,释放对象锁,只有这个对象发出notifynotifyAll方法,它才能重新获得对象锁进入运行状态。

 

12.  OverloadingOverriding的区别

它们是java多态性的不同表现。

Overriding是父类和子类之间多态性的表现,如果子类中定义的方法与父类有相同的名称和参数和返回类型,就叫方法的重写 (Overriding);子类Overriding方法的visibility不能比父类低.

Overloading是同一个类中多态性的表现,如果一个类中定义了多个同名的方法,它们有不同的参数个数或不同的参数类型或不同的参数次序,就叫方法的重载(Overloading)。Overloading的方法是可以改变返回值的类型。

 

重写(override)的三个要点:

子类的方法名,返回值,参数类型必须完全一制。

子类抛出的异常不能超过父类。

子类的访问级别不能低于父类。

父类或接口类型的引用可以指向子类或实现该接口的类实现。

 

13.  abstract classinterface的区别

interface中只能有static final的成员和抽象方法;abstract class 中除了必须有一个抽象方法,还可以有具体的方法,成员变量。

一个类只能extends 一个类,可以implements 多个interface

interface表现的是一种规格;abstract class抽象出共性的东西,经常表现的是“is-a”的关系。

 

14.父类与子类的初始化先后顺序:静态先行。

父类的静态

子类的静态

父类的构造

子类的构造

 

15. 数组里存放的是对象的引用,而不是对象本身。

16. Java中的transient,是用于声明序列化的时候不被存储的。

原创粉丝点击