Oracle Certified Java Programmer 经典题目分析(二)
...接上篇
what is reserved(保留) words in java? A. run B. default C. implement D. import
Java 关键字列表 (依字母排序 共51组),所有的关键字都是小写,在MyEclipse中都会显示不同的颜色:
abstract, assert,boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, enum,extends, final, finally, float, for, if,
implements, import, instanceof, int, interface, long, native, new, package, private, protected, public, return, short, static, strictfp, super, switch,
synchronized, this, throw, throws, transient, try, void, volatile, while
用于类的接口声明:class extends implements interface
包引入和包声明:import package
数据类型:boolean byte char short int long float double
某些数据类型的可先值:false true null
流程控制:break case continue default for do while if else return switch
异常处理:catch finally throw throws try
修饰符:abstract final native private protected public static synchronized transient volatile
操作符:instanceof
创建对象:new
引用:this super
方法返回类型:void
Java 保留字列表 (依字母排序 共14组) :
byValue, cast, false, future, generic, inner, operator, outer, rest, true, var , goto ,const,null
总结:
正确识别java语言的关键字(keyword)和保留字(reserved word)是十分重要的。Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等。保留字是为java预留的关键字,他们虽然现在没有作为关键字,但在以后的升级版本中有可能作为关键字。
1)public class Test{ 2) public static void main(String[] args){ 3) String foo=args[1]; 4) Sring bar=args[2]; 5) String baz=args[3]; 6) } 7) } java Test Red Green Blue what is the value of baz? A. baz has value of "" B. baz has value of null C. baz has value of "Red" D. baz has value of "Blue" E. baz has value of "Green" F. the code does not compile G. the program throw an exception
本题考查Java的不定长参数列表相关知识,如果一个方法的参数定为不定参数的话,这个参数可以根据参数个数动态生成一个数组,然后传入方法执行。main方法是一个典型的具有不定长参数列表的方法,一般来说不定长参数列表有两种形式:
1)public static void test(Object... objs){...}
2)public static void main(String[] args){...}
使用不定长参数也要注意两点:
1)方法的参数列表中最多只有一个不定长度的参数。因为如果有多于一个不定长度的参数,当真正调用这个方法的时候,JVM、将不知道前面的不定长度参数有多长, 下一个参数是从哪里开始;
2)不定长度的数组的位置必须是最后一个参数,不然不能通过编译。 因为如果不是最后一个参数作为不定长参数,那么编译器不知道不定长度参数的长度,无法确定从哪里开始下一个参数。
which three are valid declaraction of a float? A. float foo= -1; B. float foo=1.0; C. float foo=42e1; D. float foo=2.02f; E. float foo=3.03d; F. float foo=0x0123;
float是单精度类型,精度是6位有效数字,取值范围是10的-38次方到10的38次方,float占用4个字节的存储空间 ,double是双精度类型,精度是15位有效数字,取值范围是10的-308次方到10的308次方,double占用8个字节的存储空间,当你不声明的时候,默认小数都用double来表示,所以如果要用float的话,则应该在其后加上f;对于本题B会默认double类型,E会自动提升类型自不必说,C超出float定义范围也不合法。
1)public class Foo{ 2) public static void main(String args[]){ 3) String s; 4) System.out.println("s="+s); 5) } 6) } what is the result? A. The code compiles and “s=” is printed. B. The code compiles and “s=null” is printed. C. The code does not compile because string s is not initialized. D. The code does not compile because string s cannot be referenced. E. The code compiles, but a NullPointerException is thrown when toString is called.
在Java中出于域安全性的考虑,成员变量在申明的时候没有初始化,编译时会自动帮你初始化,基本类型初始化为0,引用类型初始化为null,字符会初始化为' ';在变量作为局部变量时,如果声明时没有初始化则会编译出错!
float f=4.2F; Float g=new Float(4.2F); Double d=new Double(4.2); Which are true? A. f==g B. g==g C. d==f D. d.equals(f) E d.equals(g) F. g.equals(4.2);
在Java中"=="在基本类型比较的时候比较的是值,在引用类型进行比较时比较的是引用句柄的地址;equals方法是Object对象中的方法,是java中所有对象均具有的方法,它比较的是对象的地址和值。一般在重写equals方法时应当符合离散数学关于相等的理论,即:
1、自反性:对任意引用值X,x.equals(x)的返回值一定为true.
2、对称性:对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true;
3、传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true
4、一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变
5、非空性:任何非空的引用值X,x.equals(null)的返回值一定为false
1. public class test( 2. public int aMethod(){ 3. static int i=0; 4. i++; 5. return I; 6. ) 7. public static void main (String args[]){ 8. test test = new test(); 9. test.aMethod(); 10. int j = test.aMethod(); 11. System.out.printIn(j); 12. } 13. } What is the result? A. Compilation will fail. B. Compilation will succeed and the program will print “0”. C. Compilation will succeed and the program will print “1”. D. Compilation will succeed and the program will print “2”.
(1)Java静态对象和非静态对象有什么区别?
比对如下:
静态对象 非静态对象
拥有属性: 是类共同拥有的 是类各对象独立拥有的
内存分配: 内存空间上是固定的 空间在各个附属类里面分配
分配顺序: 先分配静态对象的空间 继而再对非静态对象分配空间,也就是初始化顺序是先静态再非静态.
java静态对象到底有什么好处?
A,静态对象的数据在全局是唯一的,一改都改。如果你想要处理的东西是整个程序中唯一的,弄成静态是个好方法。 非静态的东西你修改以后只是修改了他自己的数据,但是不会影响其他同类对象的数据。
B,引用方便。直接用 类名.静态方法名 或者 类名.静态变量名就可引用并且直接可以修改其属性值,不用get和set方法。
C,保持数据的唯一性。此数据全局都是唯一的,修改他的任何一处地方,在程序所有使用到的地方都将会体现到这些数据的修改。有效减少多余的浪费。
D,static final用来修饰成员变量和成员方法,可简单理解为“全局常量”。对于变量,表示一旦给值就不可修改;对于方法,表示不可覆盖。
(2)静态变量、静态方法和静态块
通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象(跟类是否有static修饰无关)。
你可以将方法和变量都声明为static。static 成员的最常见的 例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。 声明为static的变量实质上就是全局变量。声明为static的方法有以下几条限制: ·
A,它们仅能调用其他的static 方法
B,它们只能访问static数据
C,它们不能以任何方式引用this 或super(this涉及到对象,super 与继承有关)
(3)外部使用静态变量或者静态方法
在定义它们的类的外面,static 方法和变量能独立于任何对象而被使用,你只要在类的名字后面加点号运算符即可。可以看到,这种格式与通过对象引用变量调用非static方法或者变量的格式类似。这就是Java 如何实现全局功能和全局变量的一个控制版本。示例:
(4)静态类是指在一个类的内部,又定义了一个用static修饰的类。那静态类的功能又体现在哪里呢?可以用C中的结构体内嵌结构体来理解,其次需要了解2个概念:内部类和静态修饰符static。
A,首先,用内部类是因为内部类与所在外部类有一定的关系,往往只有该外部类调用此内部类。所以没有必要专门用一个Java文件存放这个类。
B,静态都是用来修饰类的内部成员的。比如静态方法、静态成员变量。它唯一的作用就是随着类的加载(而不是随着对象的产生)而产生,以致可以用类名+静态成员名直接获得。这样静态内部类就可以理解了,它可以直接被用 外部类名+内部类名 获得。