SlideShare a Scribd company logo
第     一  ,  谈  谈 final, finally, finalize 的 区 别   。
  final?修饰符(关键字)如果一个类被声明为 final,意味着它不能再派生出新的子类,
不能作为父类被继承。    因此一个类不能既被声明为 abstract 的,又被声明为 final 的。将变量
或方法声明为 final,可以保证它们在使用中不被改变。被声明为 final 的变量必须在声明时
给定初值,而在以后的引用中只能读取,不可修改。被声明为 final 的方法也同样只能使用,
不                  能                重           载
finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配
的 catch 子 句 就 会 执 行 , 然 后 控 制 就 会 进 入 finally 块 ( 如 果 有 的 话 ) 。
finalize?方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之
前做必要的清理工作。    这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调
用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整
理系统资源或者执行其他清理工作。    finalize() 方法是在垃圾收集器删除对象之前对这个对象
调             用                的         。

第二, Anonymous Inner Class ( 匿名内部类 ) 是否可以 extends( 继承 ) 其它类,是否可以
implements(   实          现       )interface(    接   口      )?
匿名的内部类是没有名字的内部类。不能 extends(继承) 其它类,但一个内部类可以作为一
个     接     口 ,     由       另  一      个      内 部  类   实  现    。

第三, Static Nested Class 和 Inner Class 的不同,说得越多越好 ( 面试题有的很笼统 ) 。
Nested Class (一般是 C++的说法),Inner Class (一般是 JAVA 的说法)。Java 内部类与 C++
嵌 套 类 最 大 的 不 同 就 在 于 是 否 有 指 向 外 部 的 引 用 上 。 具 体 可 见 http:
//www.frontfree.net/articles/services/view.asp?id=704&page=1
注: 静态内部类(Inner Class)意味着 1 创建一个 static 内部类的对象,不需要一个外部类
对 象 , 2 不 能 从 一 个 static 内 部 类 的 一 个 对 象 访 问 一 个 外 部 类 对 象

第     四        ,       &     和    &&       的     区    别       。
&   是 位    运       算   符   。 &&   是    布   尔 逻   辑   运 算     符 。

第      五     ,    HashMap 和     Hashtable  的   区    别    。
都 属 于     Map 接 口 的 类 , 实 现 了 将 惟 一 键 映 射 到 特 定 的 值 上 。
HashMap 类 没 有 分 类 或 者 排 序 。 它 允 许 一 个 null 键 和 多 个 null 值 。
Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是
同                  步              的                  。

第      六     ,    Collection      和       Collections 的 区    别   。
Collections 是 个 java.util 下 的 类 , 它 包 含 有 各 种 有 关 集 合 操 作 的 静 态 方 法 。
Collection 是 个 java.util 下 的 接 口 , 它 是 各 种 集 合 结 构 的 父 接 口 。



第        七   ,     什     么     时    候         用     assert      。
断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为                          true。如果表达式
计 算 为 false , 那 么 系 统 会 报 告 一 个 AssertionError 。 它 用 于 调 试 目 的 :
assert(a   > 0); //  throws  an  AssertionError  if    a     <=   0
断        言     可       以        有        两   种        形     式   :
assert                    Expression1                    ;
assert        Expression1             :      Expression2      ;
Expression1     应    该     总     是      产  生 一     个      布 尔 值   。
Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String
消                        息                    。
断 言 在 默 认 情 况 下 是 禁 用 的 。 要 在 编 译 时 启 用 断 言 , 需 要 使 用 source 1.4 标 记 :
javac            -source           1.4             Test.java
要 在 运 行 时 启 用 断 言 , 可 使 用 -enableassertions 或 者 -ea 标 记 。
要 在 运 行 时 选 择 禁 用 断 言 , 可 使 用 -da 或 者 -disableassertions 标 记 。
要系统类中启用断言,可使用 -esa 或者 -dsa 标记。          还可以在包的基础上启用或者禁用断言。

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



第 八 , GC 是 什 么 ?      为 什 么 要 有 GC? ( 基 础 ) 。
GC 是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请
求 垃 圾 收 集 ,                 可   以   调   用   下   面   的   方   法   之   一   :
System.gc()
Runtime.getRuntime().gc()


第 九 , String s = new String("xyz"); 创 建 了 几 个 String Object?
两 个 对 象 , 一 个 是 “ xyx”, 一 个 是 指 向 “ xyx” 的 引 用 对 象 s 。

第 十 , Math.round(11.5) 等 於 多 少 ? Math.round(-11.5) 等 於 多 少 ?
Math.round(11.5) 返 回 ( long ) 12 , Math.round(-11.5) 返 回 ( long ) -11;


第 十 一 , short s1 = 1; s1 = s1 + 1; 有 什 么 错 ? short s1 = 1; s1 += 1; 有 什 么 错 ?
short s1 = 1; s1 = s1 + 1;有错,s1 是 short 型,s1+1 是 int 型,不能显式转化为 short 型。可修改
为 s1 =(short)(s1 + 1)             。 short s1 = 1; s1 += 1 正 确 。

第 十 二 , sleep() 和 wait() 有 什 么 区 别 ? 搞 线 程 的 最 爱
sleep()方法是使线程停止一段时间的方法。在 sleep 时间间隔期满后,线程不一定立即恢复
执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“
醒     来  ”  的  线 程  具  有    更 高      的  优  先  级
(b) 正 在 运 行 的 线 程 因 为 其 它 原 因 而 阻 塞 。
wait()是线程交互时,如果线程对一个同步对象 x 发出一个 wait()调用,该线程会暂停执行,
被 调 对 象 进 入 等 待 状 态 , 直 到 被 唤 醒 或 等 待 时 间 到 。
第        十         三        ,           Java     有      没              有           goto?
Goto?java 中       的 保      留 字     ,      现    在 没    有 在       java       中   使     用     。

第 十 四 , 数 组 有 没 有 length() 这 个 方 法 ? String 有 没 有 length() 这 个 方 法 ?
数 组 没 有 length() 这 个 方 法 , 有 length 的 属 性 。
String  有     有      length()    这       个      方       法      。

第十五, Overload 和 Override 的区别。 Overloaded 的方法是否可以改变返回值的类型 ?
方法的重写 Overriding 和重载 Overloading 是 Java 多态性的不同表现。重写 Overriding 是父
类与子类之间多态性的一种表现,重载 Overloading 是一个类中多态性的一种表现。如果在
子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类
的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”
了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,
则称为方法的重载(Overloading)。Overloaded 的方法是可以改变返回值的类型。

第十六, Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢 ? 是用 == 还是
equals()?       它    们     有    何    区     别      ?
Set 里的元素是不能重复的,那么用 iterator()方法来区分重复与否。equals()是判读两个 Set
是否相等。 equals()和==方法决定引用值是否指向同一对象 equals()在类中被覆盖,为的是
当 两 个 分 离 的 对 象 的 内 容 和 类 型 相 配 的 话 , 返 回 真 值 。

第 十 七 , 给 我 一 个 你 最 常 见 到 的 runtime exception 。
ArithmeticException,             ArrayStoreException,            BufferOverflowException,
BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException,
CMMException, ConcurrentModificationException, DOMException, EmptyStackException,
IllegalArgumentException,      IllegalMonitorStateException,     IllegalPathStateException,
IllegalStateException,
ImagingOpException,         IndexOutOfBoundsException,         MissingResourceException,
NegativeArraySizeException,         NoSuchElementException,           NullPointerException,
ProfileDataException,   ProviderException,    RasterFormatException,     SecurityException,
SystemException,          UndeclaredThrowableException,        UnmodifiableSetException,
UnsupportedOperationException


第      十 八  ,  error 和 exception 有 什  么  区  别  ?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。     比如说内存溢出。不可能指望
程       序    能  处   理  这   样  的   情   况  。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的
情                             况                            。

第 十      九    ,    List,   Set,   Map     是    否 继    承    自    Collection     接      口    ?
List                   ,                       Set                 是
Map                   不                    是

第 二 十 , abstract     class 和   interface 有 什 么 区 别 ?
声明方法的存在而不去实现它的类被叫做抽象类( abstract class),它用于要创建一个体现
某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建
abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的
一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽
象方法提供实现,否则它们也是抽象类为。          取而代之,在子类中实现该方法。     知道其行为的
其      它   类  可  以 在    类   中   实      现 这  些  方  法 。
接口(interface)是抽象类的变体。  在接口中,所有方法都是抽象的。       多继承性可通过实现这
样的接口而获得。      接口中的所有方法都是抽象的,没有一个有程序体。         接口只可以定义 static
final 成员变量。  接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。         当类实
现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。               然后,它可以在实现了该
接口的类的任何对象上调用接口的方法。         由于有抽象类,它允许使用接口名作为引用变量的
类型。    通常的动态联编将生效。  引用可以转换到接口类型或从接口类型转换,instanceof 运算
符 可 以 用 来 决 定 某 对 象 的 类 是 否 实 现 了 接 口 。

第二十一, abstract 的 method 是否可同时是 static, 是否可同时是 native ,是否可同时是
synchronized?
都                    不                     能

第二十二,接口是否可继承接口 ? 抽象类是否可实现 (implements)接口? 抽象类是否可继承
实      体      类           (concrete     class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提
是  实 体  类 必  须    有  明    确     的   构 造  函      数 。

第 二 十 三 , 启 动 一 个 线 程 是 用 run() 还 是 start()?
启动一个线程是调用 start() 方法,使线程所代表的虚拟处理机处于可运行状态,这意味着
它可以由 JVM 调度并执行。   这并不意味着线程就会立即运行。run()方法可以产生必须退出的
标   志     来      停    止   一  个     线     程   。




第 二 十 四 , 构 造 器 Constructor           是 否 可 被     override?
构造器 Constructor 不能被继承,因此不能重写 Overriding ,但可以被重载 Overloading 。

第      二  十   五   ,     是   否   可  以   继   承   String       类       ?
String   类    是   final   类   故   不    可   以   继        承       。

第二十六,当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此
对      象     的      其          它      方      法     ?
不 能 , 一 个 对 象 的 一 个 synchronized 方 法 只 能 由 一 个 线 程 访 问 。

第二十七,try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会
被    执   行     ,    什    么    时     候 被       执 行 ,            在   return     前   还    是    后    ?
会        执         行         ,       在         return          前          执       行        。



第 二 十 八 , 编 程 题 : 用 最 有 效 率 的 方 法 算 出 2 乘 以 8 等 於 几 ?
有 C 背 景 的 程 序 员 特 别 喜 欢 问 这 种 问 题 。

2                                 <<                                3


第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的 hash code,这句话对不对?

不        对         ,         有         相       同         的         hash        code        。

第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可
返 回 变 化 后 的 结 果 , 那 么 这 里 到 底 是 值 传 递 还 是 引 用 传 递 ?
是值传递。 Java 编程语言只由值传递参数。 当一个对象实例作为一个参数被传递到方法中时,
参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永
远     不    会     改     变    的     。



第三十一, swtich 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上?
switch(expr1)中,expr1 是一个整数表达式。因此传递给 switch 和 case 语句的参数应该
是 int 、 short 、 char 或 者 byte 。 long,string 都 不 能 作 用 于 swtich 。

第 三 十 二 , 编 程 题 :             写 一 个 Singleton 出 来 。
Singleton 模式主要作用是保证在 Java 应用程序中,一个类 Class 只有一个实例存在。
一     般    Singleton 模 式 通  常   有    几  种 种   形      式  :
第一种形式: 定义一个类,它的构造函数为 private 的,它有一个 static 的 private 的该类变量,
在类初始化时实例话,通过一个 public 的 getInstance 方法获取对它的引用 ,继而调用其中的
方                                 法                                。
public                    class                    Singleton                    {
                                             private                Singleton(){}
    // 在 自 己 内 部 定 义 自 己 一 个 实 例 , 是 不 是 很 奇 怪 ?
           //     注     意       这       是       private         只      供      内     部       调     用
              private      static       Singleton       instance       =      new       Singleton();
    // 这 里 提 供 了 一 个 供 外 部 访 问 本 class 的 静 态 方 法 , 可 以 直 接 访 问    
                     public           static         Singleton           getInstance()         {
                                           return         instance;                            
                                                                                }
}
第               二                  种                  形                  式                :
public                    class                       Singleton                     {
                  private          static        Singleton          instance        =        null;
               public       static        synchronized        Singleton        getInstance()       {
   // 这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     
    // 使 用 时 生 成 实 例 , 提 高 了 效 率 !
                         if           (instance==null)
                       instance   =      new         Singleton();
return     instance;                                      }
}
其           他          形            式                  :
定 义 一 个 类 , 它 的 构 造 函 数 为 private 的 , 所 有 方 法 为 static 的 。
一般认为第一种形式要更加安全些

More Related Content

DOC
Java面试知识
DOC
Java面试题集
DOC
大公司的Java面试题集
DOC
Java 面试32问
DOC
Java相关基础知识
DOC
Java面试笔试题大汇总
DOC
深入剖析Concurrent hashmap中的同步机制(下)
DOC
Java程序员面试之葵花宝典
Java面试知识
Java面试题集
大公司的Java面试题集
Java 面试32问
Java相关基础知识
Java面试笔试题大汇总
深入剖析Concurrent hashmap中的同步机制(下)
Java程序员面试之葵花宝典

What's hot (20)

PDF
Java易犯错误
PPT
Java Script 引擎技术
DOC
泛型总结
PDF
Java SE 7 技術手冊第六章草稿 - 何謂繼承?
DOC
Java基础方面
PPT
SCJP ch17
DOC
Java面试宝典
PPT
DOC
Java多线程编程详解
PPT
Scala
PDF
Ecmascript
PDF
Hash map导致cpu100% 的分析
PDF
[圣思园][Java SE]Java se lesson 10
PPT
Abap oo
DOC
深入剖析Concurrent hashmap中的同步机制(上)
PDF
functional-scala
PDF
《Python 3.5 技術手冊》第六章草稿
PDF
Spring 2.0 技術手冊第四章 - Spring AOP
PPT
Scala function-and-closures
PDF
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Java易犯错误
Java Script 引擎技术
泛型总结
Java SE 7 技術手冊第六章草稿 - 何謂繼承?
Java基础方面
SCJP ch17
Java面试宝典
Java多线程编程详解
Scala
Ecmascript
Hash map导致cpu100% 的分析
[圣思园][Java SE]Java se lesson 10
Abap oo
深入剖析Concurrent hashmap中的同步机制(上)
functional-scala
《Python 3.5 技術手冊》第六章草稿
Spring 2.0 技術手冊第四章 - Spring AOP
Scala function-and-closures
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Ad

Viewers also liked (10)

DOC
Aaron_Walter.Resume.doc
PDF
Scale-up-The-Experience-Game-Final-Version
DOC
sanjeev resume updated
PPT
orthodontic Bracket materials/prosthodontic courses
PPTX
Myofascial release review
PDF
Камера мясная с электрообогревом панельная «АГРО-ТЕРМ» (#5)
PPT
CLEFT LIP &PALATE MANAGEMENT IN ORTHODONTICS /certified fixed orthodontic cou...
PPT
The Vision of Daniel 8
PPT
Study of Daniel 8:14 -1844 made-simple
Aaron_Walter.Resume.doc
Scale-up-The-Experience-Game-Final-Version
sanjeev resume updated
orthodontic Bracket materials/prosthodontic courses
Myofascial release review
Камера мясная с электрообогревом панельная «АГРО-ТЕРМ» (#5)
CLEFT LIP &PALATE MANAGEMENT IN ORTHODONTICS /certified fixed orthodontic cou...
The Vision of Daniel 8
Study of Daniel 8:14 -1844 made-simple
Ad

Similar to Java面试32题 (20)

DOC
应聘Java笔试时可能出现问题及其答案
PDF
[圣思园][Java SE]Java se lesson 3
DOC
中心教员Java面试题1
DOC
Java考试试题
DOC
《Java程序设计》期末考试试题 (六)
DOC
2006年招聘试题
DOC
Java华为面试题
PPTX
2, object oriented programming
PPTX
10, inner classes
PPT
Jvm内存管理基础
PPT
Java7 fork join framework and closures
PPTX
Javascript面向对象
PDF
Java解惑(中文)
PDF
[圣思园][Java SE]Java se lesson 2
PPT
软件工程 第十一章
DOC
中心教员J2 Ee面试题
PDF
最新Java技术内存模型
PPT
组合、备忘录、建造者模式、原型
PPTX
5, initialization & cleanup
PPTX
9, interfaces
应聘Java笔试时可能出现问题及其答案
[圣思园][Java SE]Java se lesson 3
中心教员Java面试题1
Java考试试题
《Java程序设计》期末考试试题 (六)
2006年招聘试题
Java华为面试题
2, object oriented programming
10, inner classes
Jvm内存管理基础
Java7 fork join framework and closures
Javascript面向对象
Java解惑(中文)
[圣思园][Java SE]Java se lesson 2
软件工程 第十一章
中心教员J2 Ee面试题
最新Java技术内存模型
组合、备忘录、建造者模式、原型
5, initialization & cleanup
9, interfaces

More from yiditushe (20)

DOC
Spring入门纲要
PDF
J Bpm4 1中文用户手册
PPT
性能测试实践2
PPT
性能测试实践1
PPT
性能测试技术
PPT
Load runner测试技术
PPT
J2 ee性能测试
PPT
面向对象的Js培训
PDF
Flex3中文教程
PDF
开放源代码的全文检索Lucene
PDF
基于分词索引的全文检索技术介绍
PDF
Lucene In Action
DOC
Lucene2 4学习笔记1
DOC
Lucene2 4 Demo
PDF
Lucene 全文检索实践
PDF
Lucene 3[1] 0 原理与代码分析
PPT
7 面向对象设计原则
PPT
10 团队开发
PPT
9 对象持久化与数据建模
PPT
8 Uml构架建模
Spring入门纲要
J Bpm4 1中文用户手册
性能测试实践2
性能测试实践1
性能测试技术
Load runner测试技术
J2 ee性能测试
面向对象的Js培训
Flex3中文教程
开放源代码的全文检索Lucene
基于分词索引的全文检索技术介绍
Lucene In Action
Lucene2 4学习笔记1
Lucene2 4 Demo
Lucene 全文检索实践
Lucene 3[1] 0 原理与代码分析
7 面向对象设计原则
10 团队开发
9 对象持久化与数据建模
8 Uml构架建模

Java面试32题

  • 1. 一 , 谈 谈 final, finally, finalize 的 区 别 。 final?修饰符(关键字)如果一个类被声明为 final,意味着它不能再派生出新的子类, 不能作为父类被继承。 因此一个类不能既被声明为 abstract 的,又被声明为 final 的。将变量 或方法声明为 final,可以保证它们在使用中不被改变。被声明为 final 的变量必须在声明时 给定初值,而在以后的引用中只能读取,不可修改。被声明为 final 的方法也同样只能使用, 不 能 重 载 finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配 的 catch 子 句 就 会 执 行 , 然 后 控 制 就 会 进 入 finally 块 ( 如 果 有 的 话 ) 。 finalize?方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之 前做必要的清理工作。 这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调 用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整 理系统资源或者执行其他清理工作。 finalize() 方法是在垃圾收集器删除对象之前对这个对象 调 用 的 。 第二, Anonymous Inner Class ( 匿名内部类 ) 是否可以 extends( 继承 ) 其它类,是否可以 implements( 实 现 )interface( 接 口 )? 匿名的内部类是没有名字的内部类。不能 extends(继承) 其它类,但一个内部类可以作为一 个 接 口 , 由 另 一 个 内 部 类 实 现 。 第三, Static Nested Class 和 Inner Class 的不同,说得越多越好 ( 面试题有的很笼统 ) 。 Nested Class (一般是 C++的说法),Inner Class (一般是 JAVA 的说法)。Java 内部类与 C++ 嵌 套 类 最 大 的 不 同 就 在 于 是 否 有 指 向 外 部 的 引 用 上 。 具 体 可 见 http: //www.frontfree.net/articles/services/view.asp?id=704&page=1 注: 静态内部类(Inner Class)意味着 1 创建一个 static 内部类的对象,不需要一个外部类 对 象 , 2 不 能 从 一 个 static 内 部 类 的 一 个 对 象 访 问 一 个 外 部 类 对 象 第 四 , & 和 && 的 区 别 。 & 是 位 运 算 符 。 && 是 布 尔 逻 辑 运 算 符 。 第 五 , HashMap 和 Hashtable 的 区 别 。 都 属 于 Map 接 口 的 类 , 实 现 了 将 惟 一 键 映 射 到 特 定 的 值 上 。 HashMap 类 没 有 分 类 或 者 排 序 。 它 允 许 一 个 null 键 和 多 个 null 值 。 Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是 同 步 的 。 第 六 , Collection 和 Collections 的 区 别 。 Collections 是 个 java.util 下 的 类 , 它 包 含 有 各 种 有 关 集 合 操 作 的 静 态 方 法 。 Collection 是 个 java.util 下 的 接 口 , 它 是 各 种 集 合 结 构 的 父 接 口 。 第 七 , 什 么 时 候 用 assert 。 断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式 计 算 为 false , 那 么 系 统 会 报 告 一 个 AssertionError 。 它 用 于 调 试 目 的 : assert(a > 0); // throws an AssertionError if a <= 0
  • 2. 言 可 以 有 两 种 形 式 : assert Expression1 ; assert Expression1 : Expression2 ; Expression1 应 该 总 是 产 生 一 个 布 尔 值 。 Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消 息 。 断 言 在 默 认 情 况 下 是 禁 用 的 。 要 在 编 译 时 启 用 断 言 , 需 要 使 用 source 1.4 标 记 : javac -source 1.4 Test.java 要 在 运 行 时 启 用 断 言 , 可 使 用 -enableassertions 或 者 -ea 标 记 。 要 在 运 行 时 选 择 禁 用 断 言 , 可 使 用 -da 或 者 -disableassertions 标 记 。 要系统类中启用断言,可使用 -esa 或者 -dsa 标记。 还可以在包的基础上启用或者禁用断言。 可以在预计正常情况下不会到达的任何位置上放置断言。 断言可以用于验证传递给私有方法 的参数。 不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公 有方法都必须检查其参数。 不过,既可以在公有方法中,也可以在非公有方法中利用断言测 试 后 置 条 件 。 另 外 , 断 言 不 应 该 以 任 何 方 式 改 变 程 序 的 状 态 。 第 八 , GC 是 什 么 ? 为 什 么 要 有 GC? ( 基 础 ) 。 GC 是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请 求 垃 圾 收 集 , 可 以 调 用 下 面 的 方 法 之 一 : System.gc() Runtime.getRuntime().gc() 第 九 , String s = new String("xyz"); 创 建 了 几 个 String Object? 两 个 对 象 , 一 个 是 “ xyx”, 一 个 是 指 向 “ xyx” 的 引 用 对 象 s 。 第 十 , Math.round(11.5) 等 於 多 少 ? Math.round(-11.5) 等 於 多 少 ? Math.round(11.5) 返 回 ( long ) 12 , Math.round(-11.5) 返 回 ( long ) -11; 第 十 一 , short s1 = 1; s1 = s1 + 1; 有 什 么 错 ? short s1 = 1; s1 += 1; 有 什 么 错 ? short s1 = 1; s1 = s1 + 1;有错,s1 是 short 型,s1+1 是 int 型,不能显式转化为 short 型。可修改 为 s1 =(short)(s1 + 1) 。 short s1 = 1; s1 += 1 正 确 。 第 十 二 , sleep() 和 wait() 有 什 么 区 别 ? 搞 线 程 的 最 爱 sleep()方法是使线程停止一段时间的方法。在 sleep 时间间隔期满后,线程不一定立即恢复 执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“ 醒 来 ” 的 线 程 具 有 更 高 的 优 先 级 (b) 正 在 运 行 的 线 程 因 为 其 它 原 因 而 阻 塞 。 wait()是线程交互时,如果线程对一个同步对象 x 发出一个 wait()调用,该线程会暂停执行, 被 调 对 象 进 入 等 待 状 态 , 直 到 被 唤 醒 或 等 待 时 间 到 。
  • 3. 十 三 , Java 有 没 有 goto? Goto?java 中 的 保 留 字 , 现 在 没 有 在 java 中 使 用 。 第 十 四 , 数 组 有 没 有 length() 这 个 方 法 ? String 有 没 有 length() 这 个 方 法 ? 数 组 没 有 length() 这 个 方 法 , 有 length 的 属 性 。 String 有 有 length() 这 个 方 法 。 第十五, Overload 和 Override 的区别。 Overloaded 的方法是否可以改变返回值的类型 ? 方法的重写 Overriding 和重载 Overloading 是 Java 多态性的不同表现。重写 Overriding 是父 类与子类之间多态性的一种表现,重载 Overloading 是一个类中多态性的一种表现。如果在 子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类 的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽” 了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型, 则称为方法的重载(Overloading)。Overloaded 的方法是可以改变返回值的类型。 第十六, Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢 ? 是用 == 还是 equals()? 它 们 有 何 区 别 ? Set 里的元素是不能重复的,那么用 iterator()方法来区分重复与否。equals()是判读两个 Set 是否相等。 equals()和==方法决定引用值是否指向同一对象 equals()在类中被覆盖,为的是 当 两 个 分 离 的 对 象 的 内 容 和 类 型 相 配 的 话 , 返 回 真 值 。 第 十 七 , 给 我 一 个 你 最 常 见 到 的 runtime exception 。 ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException 第 十 八 , error 和 exception 有 什 么 区 别 ? error 表示恢复不是不可能但很困难的情况下的一种严重问题。 比如说内存溢出。不可能指望 程 序 能 处 理 这 样 的 情 况 。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的 情 况 。 第 十 九 , List, Set, Map 是 否 继 承 自 Collection 接 口 ? List , Set 是
  • 4. Map 不 是 第 二 十 , abstract class 和 interface 有 什 么 区 别 ? 声明方法的存在而不去实现它的类被叫做抽象类( abstract class),它用于要创建一个体现 某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建 abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的 一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽 象方法提供实现,否则它们也是抽象类为。 取而代之,在子类中实现该方法。 知道其行为的 其 它 类 可 以 在 类 中 实 现 这 些 方 法 。 接口(interface)是抽象类的变体。 在接口中,所有方法都是抽象的。 多继承性可通过实现这 样的接口而获得。 接口中的所有方法都是抽象的,没有一个有程序体。 接口只可以定义 static final 成员变量。 接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。 当类实 现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。 然后,它可以在实现了该 接口的类的任何对象上调用接口的方法。 由于有抽象类,它允许使用接口名作为引用变量的 类型。 通常的动态联编将生效。 引用可以转换到接口类型或从接口类型转换,instanceof 运算 符 可 以 用 来 决 定 某 对 象 的 类 是 否 实 现 了 接 口 。 第二十一, abstract 的 method 是否可同时是 static, 是否可同时是 native ,是否可同时是 synchronized? 都 不 能 第二十二,接口是否可继承接口 ? 抽象类是否可实现 (implements)接口? 抽象类是否可继承 实 体 类 (concrete class)? 接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提 是 实 体 类 必 须 有 明 确 的 构 造 函 数 。 第 二 十 三 , 启 动 一 个 线 程 是 用 run() 还 是 start()? 启动一个线程是调用 start() 方法,使线程所代表的虚拟处理机处于可运行状态,这意味着 它可以由 JVM 调度并执行。 这并不意味着线程就会立即运行。run()方法可以产生必须退出的 标 志 来 停 止 一 个 线 程 。 第 二 十 四 , 构 造 器 Constructor 是 否 可 被 override? 构造器 Constructor 不能被继承,因此不能重写 Overriding ,但可以被重载 Overloading 。 第 二 十 五 , 是 否 可 以 继 承 String 类 ? String 类 是 final 类 故 不 可 以 继 承 。 第二十六,当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此 对 象 的 其 它 方 法 ? 不 能 , 一 个 对 象 的 一 个 synchronized 方 法 只 能 由 一 个 线 程 访 问 。 第二十七,try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会
  • 5. 执 行 , 什 么 时 候 被 执 行 , 在 return 前 还 是 后 ? 会 执 行 , 在 return 前 执 行 。 第 二 十 八 , 编 程 题 : 用 最 有 效 率 的 方 法 算 出 2 乘 以 8 等 於 几 ? 有 C 背 景 的 程 序 员 特 别 喜 欢 问 这 种 问 题 。 2 << 3 第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的 hash code,这句话对不对? 不 对 , 有 相 同 的 hash code 。 第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可 返 回 变 化 后 的 结 果 , 那 么 这 里 到 底 是 值 传 递 还 是 引 用 传 递 ? 是值传递。 Java 编程语言只由值传递参数。 当一个对象实例作为一个参数被传递到方法中时, 参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永 远 不 会 改 变 的 。 第三十一, swtich 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上? switch(expr1)中,expr1 是一个整数表达式。因此传递给 switch 和 case 语句的参数应该 是 int 、 short 、 char 或 者 byte 。 long,string 都 不 能 作 用 于 swtich 。 第 三 十 二 , 编 程 题 : 写 一 个 Singleton 出 来 。 Singleton 模式主要作用是保证在 Java 应用程序中,一个类 Class 只有一个实例存在。 一 般 Singleton 模 式 通 常 有 几 种 种 形 式 : 第一种形式: 定义一个类,它的构造函数为 private 的,它有一个 static 的 private 的该类变量, 在类初始化时实例话,通过一个 public 的 getInstance 方法获取对它的引用 ,继而调用其中的 方 法 。 public class Singleton {     private Singleton(){}     // 在 自 己 内 部 定 义 自 己 一 个 实 例 , 是 不 是 很 奇 怪 ?     // 注 意 这 是 private 只 供 内 部 调 用     private static Singleton instance = new Singleton();     // 这 里 提 供 了 一 个 供 外 部 访 问 本 class 的 静 态 方 法 , 可 以 直 接 访 问         public static Singleton getInstance() {         return instance;         } } 第 二 种 形 式 : public class Singleton {     private static Singleton instance = null;     public static synchronized Singleton getInstance() {
  • 6.    // 这个方法比上面有所改进,不用每次都进行生成对象,只是第一次          // 使 用 时 生 成 实 例 , 提 高 了 效 率 !     if (instance==null)         instance = new Singleton(); return instance;     } } 其 他 形 式 : 定 义 一 个 类 , 它 的 构 造 函 数 为 private 的 , 所 有 方 法 为 static 的 。 一般认为第一种形式要更加安全些