1、Which of the following range of short is correct?
-27 -- 27-1
0 -- 216-1
?215 -- 215-1
?231 -- 231-1
(c)
题目:下面哪些是short型的取值范围。
短整型的数据类型的长度是16 bits,有符号。另外需要说明的是
java中所有的整型(Integral)数(包括byte,short,int,long)全是有符号的。
2、Which declarations of identifiers are legal?
A. $persons
B. TwoUsers
C. *point
D. this
E. _endline
(a,b,e)
题目:下面哪些是合法的标识符。
Java的标识符可以以一个Unicode
字符,下滑线(_),美元符($)开始,后续
字符可以是前面的符号和数字,没有长度限制,大小写敏感,不能是保留字。
3、Which statement of assigning a long type variable to a hexadecimal value is correct?
A. long number = 345L;
B. long number = 0345;
C. long number = 0345L;
D. long number = 0x345L.
(d)
题目:哪些是将一个十六进制值赋值给一个long型变量。
十六进制数以0x开头,long型数以L(大小写均可,一般使用大写,因为小写的l和数字1不易区分)。
4、Which of the following fragments might cause errors?
A. String s = "Gone with the wind";
String t = " good ";
String k = s + t;
B. String s = "Gone with the wind";
String t;
t = s[3] + "one";
C. String s = "Gone with the wind";
String standard = s.toUpperCase();
D. String s = "home directory";
String t = s - "directory".
(b,d)
题目:下面的哪些
程序片断可能导致错误。
A:String类型可以直接使用+进行连接运算。
B:String是一种Object,而不是简单的
字符数组,不能使用下标运算符取其值的某个元素,错误。
C:toUpperCase()方法是String对象的一个方法,作用是将
字符串的内容全部转换为大写并返回转换后的结果(String类型)。
D:String类型不能进行减(-)运算,错误。
5、class Person {
private int a;
public int change(int m){ return m; }
}
public class Teacher extends Person {
public int b;
public static void main(String arg[]){
Person p = new Person();
Teacher t = new Teacher();
int i;
// point x
}
}
Which are syntactically valid statement at// point x?
A. i = m;
B. i = b;
C. i = p.a;
D. i = p.change(30);
E. i = t.b.
(d,e)
题目:在// point x处的哪些申明是句法上合法的。
A:m没有被申明过,不能使用。
B:虽然b是类Teacher的public成员变量,但是在静态方法中不能使用类中的非静态成员。
C:a是类Person的private成员,在类外不能直接引用。
D:change(int m)方法是public方法,并且返回一个int型值,可以通过类的实例变量p引用并赋值给一个int型变量。
E:b是类Teacher的public成员变量,且是int型,可以通过类的实例变量t引用并赋值给一个int型变量。
6、Which layout manager is used when the frame is resized the buttons's position in the Frame might be changed?
A. BorderLayout
B. FlowLayout
C. CardLayout
D. GridLayout
(b)
题目:当Frame的大小被改变时Frame中的按钮的位置可能被改变时使用的哪一个布局管理器。
A:该布局管理器将容器划分为五个部分,容器大小的改变不会影响其中的组件的位置而是影响他们的大小。
B:该布局管理器根据放入其中的组件的最合适大小调整组件的位置,根据组件放入的顺序安排,一行不能容纳时放入下一行,因此容器的大小改变可能改变组件的位置。
C:该布局管理器显示放入该容器的当前页中的组件,一次显示一个,容器大小的改变不能影响其中组件的位置。
D:该布局管理器将容器划分为固定的网格,组件加入后占据一个单元,各组件的相对位置不会因为容器的大小变化而变化,改变的只是组件的大小。
7、Given the following code fragment:
1) public void create() {
2) Vector myVect;
3) myVect = new Vector();
4) }
Which of the following statements are true?
A. The declaration on line 2 does not allocate memory space for the variable myVect.
B. The declaration on line 2 allocates memory space for a reference to a Vector object.
C. The statement on line 2 creates an object of class Vector.
D. The statement on line 3 creates an object of class Vector.
E. The statement on line 3 allocates memory space for an object of class Vector
(ade)
题目:给出下面的代码片断。。。下面的哪些陈述为true(真)?
A. 第二行的声明不会为变量myVect分配内存空间。
B. 第二行的声明分配一个到Vector对象的引用的内存空间。
C. 第二行语句创建一个Vector类对象。
D. 第三行语句创建一个Vector类对象。
E. 第三行语句为一个Vector类对象分配内存空间。
SL-275中指出:要为一个新对象分配空间必须执行new Xxx()调用,new调用执行以下的操作:
1. 为新对象分配空间并将其成员初始化为0或者null。
2. 执行类体中的初始化。(例如在类中有一个成员声明int a=10;在第一步后a=0,执行到第二步后a=10)
3. 执行构造函数。
4. 变量被分配为一个到内存堆中的新对象的引用。
8、Which of the following answer is correct to express the value 8 in octal number?
A. 010
B. 0x10
C. 08
D. 0x8
(a)
题目:下面的哪些答案可以用以表示八进制值8。
八进制值以0开头,以0x开头的为十六进制值,八进制中不能出现数字8,最大只有7。
9、Which are not Java keywords?
A. TRUE
B. sizeof
C. const
D. super
E. void
(ab)
题目:哪些不是Java关键字。
A: 不是,Java中有true,但是这也不是关键字而是字面量(literal)。
B: 不是,Java中不需要这个操作符,所有的类型(原始类型)的大小都是固定的。
C、D、E都是,需要说明的是const是
java中未被使用的关键字。
10、Which of the following statements are true?
A. The equals() method determines if reference values refer to the same object.
B. The == operator determines if the contents and type of two separate objects match.
C. The equals() method returns true only when the contents of two objects match.
D. The class File overrides equals() to return true if the contents and type of two separate objects match.
(ad)
题目:下面的哪些叙述为真。
A. equals()方法判定引用值是否指向同一对象。
B. == 操作符判定两个分立的对象的内容和类型是否一致。
C. equals()方法只有在两个对象的内容一致时返回true。
D. 类File重写方法equals()在两个分立的对象的内容和类型一致时返回true。
严格来说这个问题的答案是不确定的,因为equals()方法是可以被重载的,但是按照
java语言的本意来说:如果没有重写(override)新类的equals(),则该方法和 == 操作符一样在两个变量指向同一对象时返回真,但是
java推荐的是使用equals()方法来判断两个对象的内容是否一样,就像String类的equals()方法所做的那样:判定两个String对象的内容是否相同,而==操作符返回true的唯一条件是两个变量指向同一对象。从这个意义上来说选择给定的答案。从更严格的意义来说正确答案应该只有d。
11、Which statements about inheritance are true?
A. In Java programming language only allows single inheritance.
B. In Java programming language allows a class to implement only one interface.
C. In Java programming language a class cannot extend a class and implement a interface together.
D. In Java programming language single inheritance makes code more reliable.
(ad)
题目:下面关于继承的哪些叙述是正确的。
A. 在
java中只允许单一继承。
B. 在
java中一个类只能实现一个接口。
C. 在
java中一个类不能同时继承一个类和实现一个接口。
D.
java的单一继承使代码更可靠。
在
java中一个类只能有一个直接父类,但是可以实现多个接口,在继承的同时可以实现接口,之所以取消多继承的原因是多继承使得代码产生很多问题,而使用单一继承则可以使代码更可靠。
12、
1) class Person {
2) public void printValue(int i, int j) {/*…*/ }
3) public void printValue(int i){/*...*/ }
4) }
5) public class Teacher extends Person {
6) public void printValue() {/*...*/ }
7) public void printValue(int i) {/*...*/}
8) public static void main(String args[]){
9) Person t = new Teacher();
10) t.printValue(10);
11) }
12) }
Which method will the statement on line 10 call?
A. on line 2
B. on line 3
C. on line 6
D. on line 7
(d)
题目:第十行的声明将调用哪些方法。
变量t是一个Person对象,但是它是用Teacher实例化的,这个问题涉及到
java的编译时多态和运行时多态的问题,就编译时多态来说,t实际上是一个Person类,这涉及到类型的自动转换(将一个子类的实例赋值给一个父类的变量是不用进行强制类型转换,反之则需要进行强制类型转换,而且被赋值的变量实际上应该是一个子类的对象),如果对t调用了子类中新增的方法则造成编译时错误编译将不能通过,而在运行时,运行时
系统将根据t实际指向的类型调用对应的方法,对于本例来说,t.print(10)将调用t实际指向的Teacher类的对应方法。在
java中,可以用一个子类的实例实例化父类的一个变量,而变量在编译时是一个父类实例,在运行时可能是一个子类实例。
13、Which are not Java primitive types?
A. short
B. Boolean
C. unit
D. float
(bc)
题目:下面哪些不是
java的原始数据类型。
Java的原始数据类型一共就八个,分别是:byte,short,int,long,boolean,char,float,double。注意这些是大小写敏感的,而Boolean是booelan的封装类(wrapper class)。
14、Use the operators "<<", ">>", which statements are true?
A. 0000 0100 0000 0000 0000 0000 0000 0000<<5 gives
1000 0000 0000 0000 0000 0000 0000 0000
B. 0000 0100 0000 0000 0000 0000 0000 0000<<5 gives
1111 1100 0000 0000 0000 0000 0000 0000
C. 1100 0000 0000 0000 0000 0000 0000 0000>>5 gives
1111 1110 0000 0000 0000 0000 0000 0000
D. 1100 0000 0000 0000 0000 0000 0000 0000>>5 gives
0000 0110 0000 0000 0000 0000 0000 0000
(ac)
题目:使用"<<"和 ">>"操作符的哪些陈述是对的。
Java的移位操作符一共有三种,分别是”>>”,”>>>”,”<<”,执行的操作分别是有符号右移,无符号右移,左移,有符号右移的意思是说移入的最高位和原最高符号位相同,无符号右移是移入位始终补零,左移时最低位始终补零,最高位被舍弃。移位操作符另一个非常值得注意的特点是其右操作数是取模运算的,意思是说对于一个int型数据而言,对它移位32位的结果是保持不变而非变成零,即:a>>32的结果是a而不是0,同理,对long型数是对右操作数取64的模,a>>64==a;还有一点需要注意的是移位操作符”>>>”只对int型和long型有效,对byte或者short的操作将导致自动类型转换,而且是带符号的。
15、Which of the following range of int is correct?
A. -27 -- 27-1
B. 0 ? 232-1
C. ?215 -- 215-1
D. ?231 -- 231-1
(d)
题目:int的取值范围是哪个。
int型是32位的。参看第一题的论述。
16、Which keyword should be used to enable interaction with the lock of an object? The flag allows exclusive access to that object.
A. transient
B. synchronized
C. serialize
D. static
(b)
题目:下面的哪些关键字通常用来对对象的加锁,该标记使得对对象的访问是排他的。
由于
java是多线程的语言,多个线程可以”同时”访问同一数据区,而在处理某些数据时不希望其它的线程修改那些数据的值或者某些操作是不可打断的,要做到这个,可以使用synchronized关键字声明这一点。
17、Which is the return type of the method main()?
A. int
B. void
C. boolean
D. static
(b)
题目:main()方法的返回类型是什么?
在
java中,
程序运行的入口就是main()方法,它必须是这样的形式:public static void main(String args[])。但是严格来讲这个题目的答案还可以加上a和c,因为并没有限定是
程序入口的main()方法,而main()方法是可以重载的。一般意义上的main()当然就是指我们刚开始所说的main()方法了。
18、Given the following code:
if (x>0) { System.out.println("first"); }
else if (x>-3) { System.out.println("second"); }
else { System.out.println("third"); }
Which range of x value would print the string "second"?
A. x > 0
B. x > -3
C. x <= -3
D. x <= 0 & x > -3
(d)
题目:给出下面的代码:
…
x的取值在什么范围内时将打印
字符串"second"。
x>0时打印"first",x>-3&&x<=0时打印"second",x<=-3时打印"third"。
这个题目没有什么难的,只要理解if语句的语法就可以了。
19、Given the following expression about TextField which use a proportional pitch font.
TextField t = new TextField("they are good",40);
Which statement is true?
A. The displayed string can use multiple fonts.
B. The maximum number of characters in a line will be 40.
C. The displayed width is exactly 40 characters.
D. The user can edit the characters.
(d)
题目:给出以下关于一个使用适当的
字符间距的字体的TextField的表达式。
…
哪些叙述是对的?
A. 被显示的
字符串可以使用多种字体。
B. 一行中最大的
字符数是40
C. 显示的宽度正好是40个
字符宽。
D. 用户可以编辑
字符。
对于TextField的该种形式的构造函数来说,前一个参数是文本域中初始的
字符串的显示值,而后一个是推荐的显示宽度,以列数表示,在构造文本域的时候会将这个大小设置为最佳大小,如果容器的限制使得文本域不能显示这么多也没有办法,一般来说是比这个大小大的,而且即使宽度很小,你也可以在文本域的一行中输入很长的
字符串,只有你不使用回车,在超过显示宽度后文本域会自动出现水平滚动条(没有被设置为关闭,缺省是不关闭的),而文本域的缺省编辑方式是可编辑的,一个文本域只能使用一种字体,这个字体可以在运行的过程中动态的改变,但是文本域中的所有
字符串都将使用这个字体显示。
20、Which statements about the garbage collection are true?
A. The program developer must create a thread to be responsible for free the memory.
B. The garbage collection will check for and free memory no longer needed.
C. The garbage collection allow the program developer to explicity and immediately free the memory.
D. The garbage collection can free the memory used
java object at expect time.
(b)
题目:关于垃圾收集的哪些叙述是对的。
A.
程序开发者必须自己创建一个线程进行内存释放的工作。
B. 垃圾收集将检查并释放不再使用的内存。
C. 垃圾收集允许
程序开发者明确指定并立即释放该内存。
D. 垃圾收集能够在期望的时间释放被
java对象使用的内存。
Java语言将内存分配和释放的工组交给了自己,
程序员不必做这些工作,它提供一个
系统级的线程跟踪每个内存的分配,在JVM的空闲处理中,垃圾收集线程将检查和释放不再使用的内存(即可以被释放的内存)。垃圾收集的过程在
java程序的生存期中是自动的,不需要分配和释放内存,也避免了内存泄漏。可以调用System.gc()方法建议(suggest)JVM执行垃圾收集以使得可被释放的内存能立即被使用,当此方法返回的时候,JVM已经做了最大的努力从被丢弃的对象上回收内存空间。
程序员不能指定收集哪些内存,一般而言也不用关心这个问题,除非是
程序的内存消耗很大,特别是有很多临时对象时可以“建议“进行垃圾收集以提高可用内存。需要指出的是调用System.gc()方法不能保证JVM立即进行垃圾收集,而只能是建议,因为垃圾收集线程的优先级很低(通常是最低的)。
无论你是个新手,还是程序设计方面的专家,你都会惊异于Sun公司Java的无穷魅力。Java带给你的并不仅仅是面向对象、开放、平台无关、易用、安全和“Write once, run anywhere”等软件开发方面的优势,更重要的一点是,它提供了一种新颖的表达思想的方式,一种全新的思维模式。随着待解决问题的规模不断膨胀,Java彻底的面向对象思想的灵活性就会凸现出来。毋庸置疑,Java是你开发大型软件时最得心应手的利器或是你转行IT的入门首选。
SCJP考试简介
·考试方式
全英文试题,以电脑作答,在授权的Prometric考试中心参加考试
考试编号:310-025
先决条件:无
考试题型:复选、填空和拖拽匹配
题量:59
及格标准:61%
时限:120分钟
费用:1250元
·要求具备的能力
使用Java编程语言创建Java应用程序和applets。
定义和描述垃圾搜集,安全性和Java虚拟机(JVM)。
描述和使用Java语言面向对象的特点。
开发图形用户界面(GUI)。利用Java支持的多种布局管理。
描述和使用Java的事件处理模式。
使用Java语言的鼠标输入、文本、窗口和菜单窗口部件。
使用Java的例外处理来控制程序执行和定义用户自己的例外事件。
使用Java语言先进的面向对象特点, 包括方法重载、方法覆盖、抽象类、接口、final、static和访问控制。
实现文件的输入/输出 (I/O)。
使用Java语言内在的线程模式来控制多线程。
使用Java 的Sockets机制进行网络通信。
试题分析
例题1:
Choose the three valid identifiers from those listed below.
A. IDoLikeTheLongNameClass
B. $byte
C. const
D. _ok
E. 3_case
解答:A, B, D
点评:Java中的标示符必须是字母、美元符($)或下划线(_)开头。关键字与保留字不能作为标示符。选项C中的const是Java的保留字,所以不能作标示符。选项E中的3_case以数字开头,违反了Java的规则。
例题2:
How can you force garbage collection of an object?
A. Garbage collection cannot be forced
B. Call System.gc().
C. Call System.gc(), passing in a reference to the object to be garbage collected.
D. Call Runtime.gc().
E. Set all references to the object to new values(null, for example).
解答:A
点评:在Java中垃圾收集是不能被强迫立即执行的。调用System.gc()或Runtime.gc()静态方法不能保证垃圾收集器的立即执行,因为,也许存在着更高优先级的线程。所以选项B、D不正确。选项C的错误在于,System.gc()方法是不接受参数的。选项E中的方法可以使对象在下次垃圾收集器运行时被收集。
例题3:
Consider the following class:
1. class Test(int i) {
2. void test(int i) {
3. System.out.println(“I am an int.”);
4. }
5. void test(String s) {
6. System.out.println(“I am a string.”);
7. }
8.
9. public static void main(String args[]) {
10. Test t=new Test();
11. char ch=“y”;
12. t.test(ch);
13. }
14. }
Which of the statements below is true?(Choose one.)
A. Line 5 will not compile, because void methods cannot be overridden.
B. Line 12 will not compile, because there is no version of test() that rakes a char argument.
C. The code will compile but will throw an exception at line 12.
D. The code will compile and produce the following output: I am an int.
E. The code will compile and produce the following output: I am a String.
解答:D
点评:在第12行,16位长的char型变量ch在编译时会自动转化为一个32位长的int型,并在运行时传给void test(int i)方法。
例题4:
Which of the following lines of code will compile without error?
A.
int i=0;
if (i) {
System.out.println(“Hi”);
}
B.
boolean b=true;
boolean b2=true;
if(b==b2) {
System.out.println(“So true”);
}
C.
int i=1;
int j=2;
if(i==1|| j==2)
System.out.println(“OK”);
D.
int i=1;
int j=2;
if (i==1 &| j==2)
System.out.println(“OK”);
解答:B, C
点评:选项A错,因为if语句后需要一个boolean类型的表达式。逻辑操作有^、&、| 和 &&、||,但是“&|”是非法的,所以选项D不正确。
例题5:
Which two demonstrate a "has a" relationship? (Choose two)
A. public interface Person { }
public class Employee extends Person{ }
B. public interface Shape { }
public interface Rectandle extends Shape { }
C. public interface Colorable { }
public class Shape implements Colorable
{ }
D. public class Species{ }
public class Animal{private Species species;}
E. interface Component{ }
class Container implements Component{
private Component[] children;
}
解答:D, E
点评: 在Java中代码重用有两种可能的方式,即组合(“has a”关系)和继承(“is a”关系)。“has a”关系是通过定义类的属性的方式实现的;而“is a”关系是通过类继承实现的。本例中选项A、B、C体现了“is a”关系;选项D、E体现了“has a”关系。
例题6:
Which two statements are true for the class java.util.TreeSet? (Choose two)
A. The elements in the collection are ordered.
B. The collection is guaranteed to be immutable.
C. The elements in the collection are guaranteed to be unique.
D. The elements in the collection are accessed using a unique key.
E. The elements in the collection are guaranteed to be synchronized
解答:A, C
点评:TreeSet类实现了Set接口。Set的特点是其中的元素惟一,选项C正确。由于采用了树形存储方式,将元素有序地组织起来,所以选项A也正确。
例题7:
True or False: Readers have methods that can read and return floats and doubles.
A. Ture
B. False
解答:B
点评: Reader/Writer只处理Unicode字符的输入输出。float和double可以通过stream进行I/O.
例题8:
What does the following paint() method draw?
1. public void paint(Graphics g) {
2. g.drawString(“Any question”, 10, 0);
3. }
A. The string “Any question?”, with its top-left corner at 10,0
B. A little squiggle coming down from the top of the component.
解答:B
点评:drawString(String str, int x, int y)方法是使用当前的颜色和字符,将str的内容显示出来,并且最左的字符的基线从(x,y)开始。在本题中,y=0,所以基线位于最顶端。我们只能看到下行字母的一部分,即字母‘y'、‘q'的下半部分。
例题9:
What happens when you try to compile and run the following application? Choose all correct options.
1. public class Z {
2. public static void main(String[] args) {
3. new Z();
4. }
5.
6. Z() {
7. Z alias1 = this;
8. Z alias2 = this;
9. synchronized(alias1) {
10. try {
11. alias2.wait();
12. System.out.println(“DONE WAITING”);
13. }
14. catch (InterruptedException e) {
15. System.out.println(“INTERR
UPTED”);
16. }
17. catch (Exception e) {
18. System.out.println(“OTHER EXCEPTION”);
19. }
20. finally {
21. System.out.println
(“FINALLY”);
22. }
23. }
24. System.out.println(“ALL DONE”);
25. }
26. }
A. The application compiles but doesn't print anything.
B. The application compiles and print “DONE WAITING”
C. The application compiles and print “FINALLY”
D. The application compiles and print “ALL DONE”
E. The application compiles and print “INTERRUPTED”
解答:A
点评:在Java中,每一个对象都有锁。任何时候,该锁都至多由一个线程控制。由于alias1与alias2指向同一对象Z,在执行第11行前,线程拥有对象Z的锁。在执行完第11行以后,该线程释放了对象Z的锁,进入等待池。但此后没有线程调用对象Z的notify()和notifyAll()方法,所以该进程一直处于等待状态,没有输出。
例题10:
Which statement or statements are true about the code listed below? Choose three.
1. public class MyTextArea extends TextArea {
2. public MyTextArea(int nrows, int ncols) {
3. enableEvents(AWTEvent.TEXT_
EVENT_MASK);
4. }
5.
6. public void processTextEvent
(TextEvent te) {
7. System.out.println(“Processing a text event.”);
8. }
9. }
A. The source code must appear in a file called MyTextArea.java
B. Between lines 2 and 3, a call should be made to super(nrows, ncols) so that the new component will have the correct size.
C. At line 6, the return type of processTextEvent() should be declared boolean, not void.
D. Between lines 7 and 8, the following code should appear: return true.
E. Between lines 7 and 8, the following code should appear: super.processTextEvent(te).
解答:A, B, E
点评:由于类是public,所以文件名必须与之对应,选项A正确。如果不在2、3行之间加上super(nrows,ncols)的话,则会调用无参数构建器TextArea(), 使nrows、ncols信息丢失,故选项B正确。在Java2中,所有的事件处理方法都不返回值,选项C、D错误。选项E正确,因为如果不加super.processTextEvent(te),注册的listener将不会被唤醒。
SCJP考试中的几点注意
深刻理解面向对象的思想
Java是一种纯粹的面向对象的程序设计语言。在正式使用Java做开发之前,必须将我们的思维方式转入一个彻底的面向对象的世界。做不到这一点,就无法体会Java语言的精髓,写不出地道的Java程序。当然,你也无法彻底理解Java中的基本概念和他们之间的联系与区别,如例题3、例题5。你可以学到Java的语法规则,却不能看到Java的灵魂。
对概念细节的精确把握
通过例题我们可以看到,SCJP的考察点相当细致。如例题1、2、4、7、8。所以只有对Java的概念、语法、规则了然于心,才能在考场上应对自如。
适量的练习
程序设计是一项实践性很强的技术。只有上机实践,才能使课本中的理论、头脑中的思想通过你的双手成为一行行代码,完成规定的目标。虽然SCJP考试不考操作与编程,但有大量的程序阅读,如例题3、4、9、10。如果你自己写过许多代码的话,这种题就是小菜一碟。
广泛的交流
善于交流是优秀程序员必备的技能,也是你解决疑难,提高水平的捷径。国内外有很多与Java认证相关的优秀网站和论坛,如: www.javaranch.com, www.javaunion.net等, 都是学习Java的宝库。同时,一些很棒的模考软件,如Jxam、JTest、 Javacert等,以及著名的模考题如MarcusGreen的三套题均可以找到。
(1) Two public classes in the same file. (illegal)
同一个文件里有两个public类。(非法)
(2) Main method calling a non-static method. (illegal)
在main(String[] args)方法内调用一个非静态方法。(非法)
(3) Methods with the same name as the constructor(s). (这种题常有)
与Constructor(s)有相同名字的方法。
(4) Thread initiation with classes that do not have a run() method.
(常考之题) 初始化了一个没有run()方法的线程类。
(5) Local inner classes trying to access non-final vars. (illegal)
内部类尝试访问非final变量(非法)
(6) Case statements with values out of permissible range. (byte,int, short,chat)
选择语句case中,没有使用允许的值。如(byte,int,short,char)等
(7) Math class being an option for immutable classes !! (totally wrong!)
Math类作为不可改变类。(完全错误) (请提意见)
(8) instanceOf is not same as instanceof.
instanceOf 不是 instanceof。
(9) Private constructors. (legal)
私有 的Constructor。 (合法)
(10)An assignment statement which looks like a comparison.
一个 赋值语句 看起来像 比较语句。
比如说if(a=true),和if(a==true)。对于这种题眼睛亮一点。
(11)System.exit() in try-catch-finally blocks. (finally 不会执行)
在try-catch-final块中的退出语句。 (finally不会执行)
(12)Order of try-catch-finally blocks matters. (若顺序错的话: error: No try before catch)
try-catch-final块的顺序问题。
(13)main() can be declared final. (OK)
main()方法 可以声明为 final.
(14) -0.0 == 0.0 is true.
(15)A class without abstract methods can still be declared abstract
没有抽象方法的类,仍然可以定义为抽象类。
(16)RandomAccessFile descends from Object and implements DataInput and Data Output.
RandomAccessFile 类继承Object,并且实现了DataInput和DataOutput接口。
(17)Map does not implement Collection.
Map 并不实现 Collection.
(18)Dictionary is a class, not an interface.
Dictionary 是一个类,不是接口。
(19)Collection is an Interface where as Collections is a helper class. (这题我倒没见过,但还真容易看混)
Collection是一个接口,但 Collections却是一个辅助类。
(20)Class declarations can come in any order.
(也就是说: class Child extends Parents{} class Parents{}这种顺序是可以的.)可以以任何顺序申明类。
(21)Forward references to variables gives compiler error.
把 reference 给 变量,会产生编译错误。 (请提意见)
(22)Multi dimensional arrays can be sparce.
(这句话是说: 多维数组中子数组不一定必须有一定个数的元素,比如我们把一个二维数组看成一个矩阵,那么行与列中的元素可以不完整,可以不对齐.)
(23)Arrays, whether local or class-level, are always initialized.
数组,无论是当前的,还是类等级的,都会被初始化。
(24)Strings are initialized to null, not empty string.
String 是被初始化为 null,不是空字符。
(25)An empty string is NOT the same as a null string.
一个空字符串 不是 一个null字符。
26)A declaration cannot be labelled.
一个声明语句不能被标记。
(27)"continue" must be in a loop(for, do, while). It cannot appear in case constructs.
“continue”已经要在一个循环里(如for,do,while),它不能在case语句中出现。
(28)Primitive array types can never be assigned to each other, eventhough the primitives themselves can be assigned.
(也就是说: ArrayofLongPrimitives = ArrayofIntegerPrimitives 会编译出错,但
longvar = intvar 是合法的)
Primitive(int,char,long等)数组是不能互相赋值的,即使它们本身可以。
(29)A constructor can throw any exception.
一个Constructor可以抛出任何异常。
(30)Initilializer blocks are executed in the order of declaration.
初始化块是按照声明的顺序执行的。
(31)Instance initializer(s) gets executed ONLY IF the objects are constructed.
实例初始化语句块只有在它建立后才会被执行。
(32)All comparisons involving NaN and a non-Nan would always result false.(对大多数朋友来说这可是个盲点噢)
所有关于 NaN(Not a Number) 和 non-NaN 的比较,都返回false.这条很重要。
(33)Default type of a numeric literal with a decimal point is double.
我在这里把Java成员变量默认初始化原则写一下:
成员变量类型 取值
byte 0
short 0
int 0
long 0L
char '\u0000'
float 0.0F
double 0.0D
boolean false
所有引用类型 null
(34)integer (and long ) operations / and % can throw ArithmeticException while float / and % will never, even in case of division by zero.
integer和long 操作 /和% 的话, 会抛出ArithmeticException,但是 float形不
会,即使是除以0。
(35)== gives compiler error if the operands are cast-incompatible.
==会产生编译错误,如果两边 不兼容的话。
(36)You can never cast objects of sibling classes( sharing the same parent), even with an explicit cast.
你永远不可能 转化具有同一个超类的类的对象,即使是刻意转化。
class A
class sonA extends A
对这种情况:
sonA 和 daughterA 之间不能相互转化。
即:sonA son = (sonA) daughterA();是非法的。
而:sonA son = (sonA) A();A father = (A) sonA();是合法的。
(37)equals returns false if the object types are different.It does not raise a compiler error.
equals() 返回 false 如果对象类型不同,但不产生 编译错误。
(38)No inner class can have a static member.(but static inner class can)
没有内部类可以拥有静态成员。(但静态内部类可以)
(39)File class has NO methods to deal with the contents of the file.(also the existing directory)
File类没有 任何 处理文件内容的方法。(当然,存在的目录也一样)
(40)InputStream and OutputStream are abstract classes, while DataInput and DataOutput are interfaces.
InputStream 和 OutputStream 是 抽象类,是 DataInput 和 DataOutput是 接口