`
tianyalinfeng
  • 浏览: 443333 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

SCJP 学习笔记

    博客分类:
  • Java
阅读更多

第1 章声明和访问控制

 

目标一 创建数组 

1、

int k[]=new int[] {0,1,2,3,4};//right

int k=new int[5] {0,1,2,3,4} //Wrong, will not compile!

 

2、

问题 1)怎样通过一个语句改变数组大小同时保持原值不变?
1) Use the setSize method of the Array class
2) Use Util.setSize(int iNewSize)
3) use the size() operator
4) None of the above

答案 1)
4) None of the above
你不能改变一个数组的大小。你需要创建一个不同大小的临时数组,然后将原数组中的内容
放进去。Java 支持能够改变大小的类的容器,例如Vector 或者collection 类的一个成员。


问题2) 你想用下面的代码查找数组最后一个元素的值,当你编译并运行它的时候,会发
生什么?
public class MyAr{
public static void main(String argv[]){
int[] i = new int[5];
System.out.println(i[5]);
}
}
1) Compilation and output of 0
2) Compilation and output of null
3) Compilation and runtime Exception
4) Compile time error

答案 2)
3) Compilation and runtime Exception
当你试着移动到数组的末端的时候,你会得到一个运行时错误。因为数组从0 开始索引,并
且最后一个元素是i[4]而不是i[5]。


问题3)作为一个好的Java 程序员,你已忘记了曾经在C/C++中知道的关于数组大小信息
的知识。如果你想遍历一个数组并停止在最后一个元素处。你会使用下面的哪一个?
1)myarray.length();
2)myarray.length;
3)myarray.size
4)myarray.size();

答案 3)
2) myarray.length;


问题 4)你的老板为了你写出了HelloWorld 而很高兴地为你升职了,现在她给你分配了一
个新任务,去做一个踢踏舞游戏(或者我小时候玩的曲棍球游戏)。你认为你需要一个多维
数组,下面哪一个能做这个工作?
1) int i =new int[3][3];
2) int[] i =new int[3][3];
3) int[][] i =new int[3][3];
4) int i[3][3]=new int[][];

答案4)
3) int[][] i=new int[3][3];


问题 5)
你希望找到一个更优雅的方式给你的数组赋值而不使用for 循环语句,下面的哪一个能做
到?
1)
myArray{
[1]="One";
[2]="Two";
[3]="Three";
}
6
2)String s[5]=new String[] {"Zero","One","Two","Three","Four"};
3)String s[]=new String[] {"Zero","One","Two","Three","Four"};
4)String s[]=new String[]={"Zero","One","Two","Three","Four"};

答案5)
3)String s[]=new String[] {"Zero","One","Two","Three","Four"};


问题 6)当你试着编译运行下面的代码的时候,可能会发生什么?
public class Ardec{
public static void main(String argv[]){
Ardec ad = new Ardec();
ad.amethod();
}
public void amethod(){
int ia1[]= {1,2,3};
int[] ia2 = {1,2,3};
int ia3[] = new int[] {1,2,3};
System.out.print(ia3.length);
}
}
1) Compile time error, ia3 is not created correctly
2) Compile time error, arrays do not have a length field
3) Compilation but no output
4) Compilation and output of 3

答案6)
4) Compilation and output of 3
所有的数组的声明都是正确的。如果你觉得不太可能,可以自己编译这段代码。

 

 目标二定义类和变量

1、

C++语言实现了多态继承

Java只允许单继承

 

2、

Visual Basic 有时被称作基于对象的语言而不是面向对象的语言

 

3、类是 Java 的心脏,所有的Java 代码都在一个类里。Java 里没有自由独立代码的概念,甚至最简单的HelloWorld 应用都是包含在类里被创建的。

 

4、

任何文件中只能有一个非内部类可以用public 关键字定义。如果你用public 关键字在一个文件中定义了超过一个非内部类,编译器将会报错。

 

5、

static 方法只能访问static 变量。

public class St{
int i;
public static void main(String argv[]){
i = i + 2;//Will cause compile time error
}
}

 

6、

一个类的实例名以小写字母开头,而类的名字以大写字母开头。

 

7、

一个局部变量将“屏蔽”类级别的变量。

因此,下面的代码将打印 99 而不是10
public class Shad{
public int iShad=10;
public static void main(String argv[]){
Shad s = new Shad();
s.amethod();
}//End of main
public void amethod(){
int iShad=99;
System.out.println(iShad);
}//End of amethod
}

 

8、

被标记为static的变量只有一个副本

class MyClass{
public static int iMyVal=0;
}
public class Stat{
public static void main(String argv[]){
MyClass m1 = new MyClass();
m1.iMyVal=0;
MyClass m2 = new MyClass();
m2.iMyVal=1;
MyClass m3 = new MyClass();
m2.iMyVal=99;
//Because iMyVal is static, there is only one
//copy of it no matter how many instances
//of the class are created /This code will
//output a value of 99
System.out.println(m1.iMyVal);//如果未标记为static,此处应输出0;
}//End of main
}

 

9、

native 修饰符仅仅用来修饰方法,指明代码体不是用Java 而是用C 或C++所写。native
方法经常为平台的特殊目的所写,例如访问某些Java 虚拟机不支持的硬件。另一个原因是
为了需要获得更好的性能。
一个 native 方法以一个分号结尾,而不是代码块。例如下面的代码将会调用一个可能用
C++所写的外部程序:
public native void fastcalc();

 

10、

transient 修饰符是不常用的修饰符之一。它表明一个变量在序列化过程中不能被写出。

 

11、

可见性修饰符不能被联合使用,一个变量不可能同时是private 和public,public 和
protected,protected 和private。你当然可以联合使用可见性修饰符和我在下面列表中提及的
修饰符。
native
transient
synchronized
volatile
这样你就可以有一个public static native 方法了。

 

12、

问题 1)当你试着编译运行下面的代码的时候,可能会发生什么?
abstract class Base{
abstract public void myfunc();
public void another(){
System.out.println("Another method");
}
}
public class Abs extends Base{
public static void main(String argv[]){
Abs a = new Abs();
a.amethod();
}
public void myfunc(){
System.out.println("My func");
}
public void amethod(){
myfunc();
}
}
1) The code will compile and run, printing out the words "My Func"
2) The compiler will complain that the Base class has non abstract methods
3) The code will compile but complain at run time that the Base class has non abstract methods
4) The compiler will complain that the method myfunc in the base class has no body, nobody at all
to looove it

答案 1)
1) The code will compile and run, printing out the words "My Func"
一个abstract 类可以有非abstract 方法,但是任何扩展它的类必须实现所有的abstract 方法。


问题2)当你试着编译运行下面的代码的时候,可能会发生什么?
18
public class MyMain{
public static void main(String argv){
System.out.println("Hello cruel world");
}
}
1) The compiler will complain that main is a reserved word and cannot be used for a class
2) The code will compile and when run will print out "Hello cruel world"
3) The code will compile but will complain at run time that no constructor is defined
4) The code will compile but will complain at run time that main is not correctly defined

答案 2)
4) The code will compile but will complain at run time that main is not correctly defined
main 的签名包含一个String 参数,而不是string 数组。


问题3)下面的哪个是Java 修饰符?
1) public
2) private
3) friendly
4) transient

答案 3)
1) public
2) private
4) transient
虽然有些文本使用friendly 来表示可见性,但它不是一个Java 保留字。注意,测试很可能包
含要求你从列表中识别Java 关键字的问题。


问题 4) 当你试着编译运行下面的代码的时候,可能会发生什么?
class Base{
abstract public void myfunc();
public void another(){
System.out.println("Another method");
}
}
public class Abs extends Base{
public static void main(String argv[]){
Abs a = new Abs();
a.amethod();
}
public void myfunc(){
System.out.println("My func");
}
public void amethod(){
myfunc();
}
}
1) The code will compile and run, printing out the words "My Func"
2) The compiler will complain that the Base class is not declared as abstract.
3) The code will compile but complain at run time that the Base class has non abstract methods
4) The compiler will complain that the method myfunc in the base class has no body, nobody at all
to looove it

答案 4)
2) The compiler will complain that the Base class is not declared as abstract.
当我使用我的JDK1.1 编译器时的真正的错误信息是:
Abs.java:1: class Base must be declared abstract.
It does not define void myfunc() from class Base.
class Base{
^
21
1 error


问题5)你为什么可能会定义一个native 方法呢?
1) To get to access hardware that Java does not know about
2) To define a new data type such as an unsigned integer
3) To write optimised code for performance in a language such as C/C++
19
4) To overcome the limitation of the private scope of a method

答案5)
1) To get to access hardware that Java does not know about
3) To write optimised code for performance in a language such as C/C++
虽然创建“纯正的Java”代码值得鼓励,但是为了允许平台的独立性,我们不能将此作为信
仰,有很多时候,我们是需要native 代码的。


问题6)当你试着编译运行下面的代码的时候,可能会发生什么?
class Base{
public final void amethod(){
System.out.println("amethod");
}
}
public class Fin extends Base{
public static void main(String argv[]){
Base b = new Base();
b.amethod();
}
}
1) Compile time error indicating that a class with any final methods must be declared final itself
2) Compile time error indicating that you cannot inherit from a class with final methods
3) Run time error indicating that Base is not defined as final
4) Success in compilation and output of "amethod" at run time.

答案 6)
4) Success in compilation and output of "amethod" at run time.
这段代码调用Base 类中的amethod 版本。如果你在Fin 中试着执行amethod 的重写版本,
你会得到一个编译时错误。


问题7)当你试着编译运行下面的代码的时候,可能会发生什么?
public class Mod{
public static void main(String argv[]){
}
public static native void amethod();
}
1) Error at compilation: native method cannot be static
2) Error at compilation native method must return value
3) Compilation but error at run time unless you have made code containing native amethod
available
4) Compilation and execution without error

答案 7)
4) Compilation and execution without error
因为没有调用native 方法,因此运行时不会发生错误。


问题8)当你试着编译运行下面的代码的时候,可能会发生什么?
private class Base{}
public class Vis{
transient int iVal;
public static void main(String elephant[]){
}
}
1) Compile time error: Base cannot be private
2) Compile time error indicating that an integer cannot be transient
3) Compile time error transient not a data type
4) Compile time error malformed main method

答案 8)
1) Compile time error: Base cannot be private
一个Base 类这样的顶级类不能定义为private。


问题9)当你试着编译运行下面的两个放在同一个目录的文件的时候,可能会发生什么?
//File P1.java
package MyPackage;
20
class P1{
void afancymethod(){
System.out.println("What a fancy method");
}
}
//File P2.java
public class P2 extends P1{
afancymethod();
}
1) Both compile and P2 outputs "What a fancy method" when run
2) Neither will compile
3) Both compile but P2 has an error at run time

答案 9)
4) P1 compiles cleanly but P2 has an error at compile time
虽然P2 在P1 的同一个路径下,但是P1 用package 语句声明了,所以对于P2 不可见。


4) P1 compiles cleanly but P2 has an error at compile time
问题10)下面的哪一个声明是合法的?
1) public protected amethod(int i)
2) public void amethod(int i)
3) public void amethod(void)
4) void public amethod(int i)

答案 10)
2) public void amethod(int i)
如果你认为选项3 这样携带一个void 参数是合法的,你可能需要从你的头脑中清空一些
C/C++方面的知识。
选项 4 不合法是因为方法的返回类型必须紧跟着出现在方法名之前。

 

目标 3,默认的构造方法

 

1、

默认构
造方法没有指定范围,但你可以定义构造方法为public 或者protected。
构造方法不能是 native, abstract, static, synchronized 或final

 

2、

问题 1) 给定下面的类定义
class Base{
Base(int i){}
}
class DefCon extends Base{
DefCon(int i){
//XX
}
}
如果将标记//XX 的地方替换为下面的行,哪一行是独立合法的?
1) super();
2) this();
3) this(99);
4)super(99);

答案 1)
4) super(99);
由于类Base 定义了一个构造方法,编译器将不会插入默认的0 参数的构造方法。因此,super()
的调用会引起一个错误。一个this()调用试着在当前类中调用一个不存在的0 参数构造方法,
this(99)调用会引起一个循环引用并将引起一个编译时错误。


问题2)给定下面的类
public class Crowle{
public static void main(String argv[]){
Crowle c = new Crowle();
}
Crowle(){
System.out.println("Greetings from Crowle");
}
24
}
构造方法会返回哪一种数据类型?
1) null
2) integer
3) String
4) no datatype is returned

答案 2)
4) no datatype is returned
如果定义了一个没有数据类型的构造方法,那么没有返回类型是相当明显的


问题3)当你试着编译运行下面的代码的时候,可能会发生什么?
public class Crowle{
public static void main(String argv[]){
Crowle c = new Crowle();
}
void Crowle(){
System.out.println("Greetings from Crowle");
}
}
1) Compilation and output of the string "Greetings from Crowle"
2) Compile time error, constructors may not have a return type
3) Compilation and output of string "void"
4) Compilation and no output at runtime

答案 3)
4) Compilation and no output at runtime
方法Crowle 因为有一个返回类型而不是构造方法。因此,类将会编译并且在运行时方法
Crowle 不会调用。


问题4)当你试着编译运行下面的类的时候,可能会发生什么?
class Base{
Base(int i){
System.out.println("Base");
}
}
class Severn extends Base{
public static void main(String argv[]){
Severn s = new Severn();
}
void Severn(){
System.out.println("Severn");
}
}
1) Compilation and output of the string "Severn" at runtime
2) Compile time error
3) Compilation and no output at runtime
4) Compilation and output of the string "Base"

答案 4)
2) Compile time error
当类Severn 试着在类Base 中调用0 参数构造方法时会产生一个错误。


问题5)下面的哪一句陈述是正确的?
1) The default constructor has a return type of void
2) The default constructor takes a parameter of void
3) The default constructor takes no parameters
4) The default constructor is not created if the class has any constructors of its own.
25
答案 5)
3) The default constructor takes no parameters
4) The default constructor is not created if the class has any constructors of its own.
选项1 相当明显,因为构造方法不会有返回类型。选项2 不容易确定,Java 没有为方法或构
造方法提供void 类型。

 

目标四,重载和覆写

1、

问题 1)给定下面的类定义
public class Upton{
public static void main(String argv[]){
}
public void amethod(int i){}
//Here
}
下面哪一个在替换//Here 后是合法的?
1) public int amethod(int z){}
2) public int amethod(int i,int j){return 99;}
3) protected void amethod(long l){ }
4) private void anothermethod(){}

答案 1)
2) public int amethod(int i, int j) {return 99;}
3) protected void amethod (long l){}
4) private void anothermethod(){}
选项1 由于两个原因不会被编译。第一个相当明显,因为它要求返回一个integer。另一个是
试着直接在类内部重新定义一个方法。把参数的名字从i 换成z 是无效的,并且一个方法不
能在同一个类里重写。


问题 2)给定下面的类定义
class Base{
public void amethod(){
System.out.println("Base");
}
}
28
public class Hay extends Base{
public static void main(String argv[]){
Hay h = new Hay();
h.amethod();
}
}
下面在类 Hay 中的哪一个方法将会编译并使程序打印出字符串"Hay"?
1) public int amethod(){ System.out.println("Hay");}
2) public void amethod(long l){ System.out.println("Hay");}
3) public void amethod(){ System.out.println("Hay");}
4) public void amethod(void){ System.out.println("Hay");}

答案 2)
3) public void amethod(){ System.out.println("Hay");}
选项3 重写了类Base 的方法,因此任何0 参数调用都调用这个版本。
选项 1 将会返回一个表示你尝试重新定义一个不同返回类型的方法的错误。选项2 将会编译
对于amethod()调用Base 类的方法,并且输出字符串"Base"。选项4 是为了抓住满脑子C/C++
的人而设计的。Java 里没有void 方法参数这样的事。


问题3)给定下面的类定义
public class ShrubHill{
public void foregate(String sName){}
//Here
}
下面的哪一个方法可以合法的直接替换//Here?
1) public int foregate(String sName){}
2) public void foregate(StringBuffer sName){}
3) public void foreGate(String sName){}
4) private void foregate(String sType){}

答案 3)
2) public void foregate(StringBuffer sName){}
3) public void foreGate(String sName){}
选项1 是试着定义一个方法两次,有一个int 返回值并不能帮助将它与存在的foregate 方法
相区分。而像选项4 那样改变方法的参数名,也不能与存在的方法相区分。注意,选项2
里的foreGate 方法有一个大写的G。

 

p25

分享到:
评论

相关推荐

    SCJP学习笔记.doc文档

    SCJP,全称为Sun Certified Programmer for the ...这些是SCJP学习笔记中涵盖的一些核心概念,理解并掌握它们对于准备SCJP考试和日常Java编程非常重要。在实际应用中,还需要结合更多实践和深入学习来巩固这些知识。

    scjp学习笔记

    2分 scjp学习笔记

    SCJP学习笔记.doc

    以下是从给定的学习笔记中提炼出的一些关键知识点: 1. **java.util.Properties的使用** `Properties` 类是Java中用于处理配置文件的关键工具,它继承自`Hashtable`。在示例中,`Properties` 对象`pp`加载了名为...

    SCJP学习笔记

    以下是从提供的学习笔记中提取的一些关键知识点: 1. **八进制和十六进制表示**: - 八进制数以0开头,如010表示的是十进制的8。 - 十六进制数以0x或0X开头,例如0x10表示十进制的16。 2. **参数传递**: - ...

    java程序员认证 SCJP学习笔记

    根据提供的文件信息,我们可以整理出一系列关于SCJP(Sun Certified Programmer for the Java Platform)认证考试中的关键知识点。这些知识点覆盖了Java语言的基础概念、数据类型、面向对象编程原则、异常处理等多个...

    scjp考试学习笔记

    SCJP(Sun Certified Programmer for the Java 2 Platform, ...以上是SCJP学习笔记中涉及的一些核心概念,理解并熟练掌握这些知识点对于准备SCJP考试至关重要。深入理解和实践这些内容将有助于提升Java编程能力。

    SCJP考试的学习笔记

    ### SCJP考试学习笔记知识点详解 #### 基本数据类型及运算特性 - **浮点数运算**:在Java中,当进行浮点数除法运算时,如果分母为0,则根据分子的正负性,结果分别为`Infinity`(正无穷大)或`-Infinity`(负无穷...

    SCJP考题_学习笔记

    2. **学习笔记**: "scjp_amay's notes for 1.4.doc"可能是一位名叫Amay的学习者针对Java 1.4版本的SCJP考试整理的笔记,这个版本可能包含对当时Java语言特性的详细解析,例如原始类型、字符串常量池、异常处理机制等...

    SCJP学习指南英文版翻译笔记

    本人在学习SCJP Sun Certified Programmer for Java 5 Study Guide (Exam 310-055)过程中,对里面的每一个目标进行了翻译总结,希望能给英文不是很好的人提供一些帮助,前几章很简单,所以就统计了后五章

    SUN SCJP 认证笔记

    这份《SUN SCJP认证笔记》包含了上述各个领域的重点内容,通过阅读和学习,考生可以全面了解和掌握SCJP考试的核心知识点。文档如"amay's2.doc"、"JavaCertificationStudyNotes.doc"、"amay's notes for 1.4.doc"和...

    Garfield 的 SCJP 阅读笔记

    Garfield的SCJP阅读笔记主要涵盖了这个认证考试的核心知识点,包括但不限于Java语法、内存管理、类和对象、多线程、异常处理、输入/输出流以及集合框架等内容。 1. **Java语法**:这部分内容会讲解Java的基本语法...

    scjp学习资料

    文档"310-035 学习笔记 .doc"可能包含了以下关键知识点: 1. **Java语法基础**:这部分可能涵盖了变量、数据类型、运算符、控制流(如if语句、for循环、while循环)、方法定义与调用、类与对象等基础知识。学习者...

    SCJP notes

    scjp学习笔记 博文链接:https://Odysseus-110.iteye.com/blog/207265

    JAVA认证-SCJP阅读笔记

    【JAVA认证-SCJP阅读笔记】是一份详细整理的备考SCJP(SUN Certified Java Programmer)的资料,涵盖了Java编程的基础知识。...通过深入学习这些内容,可以提升编程能力,为通过SCJP认证打下坚实基础。

    SCJP1.4考试笔记大整理

    这份"SCJP1.4考试笔记大整理"包含了丰富的学习资料,帮助考生更好地理解和准备这个认证考试。 一、Java基础知识 SCJP考试主要测试的是Java的基础知识,包括语法、类和对象、异常处理、多线程、内存管理等。考生需要...

    scjp笔记 考过scjp的学生的第一手资料 强烈推荐

    SCJP(Sun Certified Programmer for the Java 2 Platform, Standard Edition)是Java...通过深入学习和理解这些知识点,可以为通过SCJP考试打下坚实的基础。同时,这些知识也是成为一名合格的Java程序员所必备的技能。

    J2ME学习笔记 J2ME学习笔记 J2ME学习笔记

    根据提供的标题、描述、标签及部分内容,我们可以提炼出关于J2ME的学习笔记中的关键知识点,主要聚焦于Java语言的基础概念,特别是与初始化和字符串相关的部分。 ### 初始化 #### 概述 - **成员变量初始化**:所有...

    java学习,scjp试题,笔记,非常的全面,corejava工程

    Java是一种广泛使用的面向对象...通过学习笔记,可以了解作者在实践中遇到的问题和解决方法;通过SCJP试题,可以评估自己的学习进度,找出需要加强的部分。无论你是自学还是参加培训,这都是一个非常有价值的参考资料。

    SCJP真题+个人笔记

    文档scjp1.doc、scjp2.doc、scjp3.doc和scjp4.doc可能包含了模拟试题、解析和学习笔记,涵盖了以下几个核心知识点: 1. **Java语言基础**:这部分包括了Java语法的基本元素,如变量声明、数据类型(基本类型与引用...

    SCJP准备资料大资源(第六部分,共六部分)

    其中的 重要 文件夹是我自己复习看的,里面的问题总结.dco是我自己的学习笔记,包含各个关键问题的解释. 希望可以帮要考SCJP的人. 在此感谢CSDN提供这个交流平台,因为我也是从CSDN上学习Java的.

Global site tag (gtag.js) - Google Analytics