主要考试科目是两科:上午是综合知识,75道单选题;下午是应用技术,5道案例题,主要考流程图1题,C语言3题,C++和JAVA二选一,以填空题和选择题为主。
考试说明:
1、掌握数制及其转换、数据的机内表示、算术和逻辑运算,以及相关的应用数学基础知识;
2、理解计算机的组成以及各主要部件的性能指标;
3、掌握 *** 作系统、程序设计语言的基础知识;
4、熟练掌握计算机常用办公软件的基本 *** 作方法;
5、熟练掌握基本数据结构和常用算法;
6、熟练掌握C程序设计语言,以及C++、Java、Visual Basic中一种程序设计语言;
7、熟悉数据库、网络和多媒体的基础知识;
8、掌握软件工程的基础知识,了解软件过程基本知识、软件开发项目管理的常识;
9、了解常用信息技术标准、安全性,以及有关法律、法规的基本知识;
10、了解信息化、计算机应用的基础知识;
11、正确阅读和理解计算机领域的简单英文资料。
JAVA初级程序员现在有 SCJP 这个比较权威点(SUN 公司的)~~~在这个考试费用是 1250元 如果你是在大学
还可能享受优惠 只要 450 元
考点:
Section 1 Declarations and Access Control
目标1, 创建数组
采用不同的格式来编写任一基本数据类型数组的声明,构造及初始化的代码。
数组是一连串对象或基本数据,它们必须同型,并以一个标识符封装在一起。数组好象一个对象,通过new关键字来创建。
声明数组
数组的声明并不能为数组分配内存。声明时数组不能有大小信息,也就是说编译器并不允许你告诉它究竟数组有多大,它只是一个reference(引用),并没有对应的空间。声明数组的方式有: int[] a1int a1[]两种,int num[5]是错误的数组声明方式。
声明并创建数组
声明一个数组并同时为它分配内存。
Int num[] =new int[5]
声明并初始化数组
声明一个数组并同时进行初始化。
Int num[]=new int[]{0,1,2,3,4}
Int num[]=new int[5]{0,1,2,3,4}//!错误
数组知道自己的大小
与c++不同,数组知道自己的大小,当数组越界时,会抛出ArrayIndexOutOfBoundsException异常。数组具有length属性(不是length()方法),它能告诉你数组的大小。
多维数据
int m[][] int [] m[]int[][] m
数组的缺省值
与其它的变量不同,不论数组在向处创建,它总是使用可以使用缺省值。
目标2 声明类与变量
声明类,内部类,方法,实例变量,静态变量,自动变量(局部变量),正确使用各种修饰符(public , private , static ,final, abstract)。
在JAVA中万事万物皆对象,即使JAVA程序本身也是对象。
类的定义和对象的生成
public class MyClass{ //类定义
int i
float f //类数据成员
void amethod(){ //方法
int i// 局部变量
}
}
MyClass aClass =new MyClass() //创建类的一个实例(对象)
修饰符说明
private
被了变量所在的类,其它任何类都不可以访问这个成员。
无访问修饰符
所谓的包访问权限,同一个包内的其它类可以访问这个成员。
Protected
与无访问修饰符具有权限外,还允许子类访问这个成员。
Public
具有全局可视性,任何其它类都可以访问这个成员。
Static
Static变量称为类变量,类的所有对象共享这个变量。
Static方法称为类方法,它只能访问static变量。静态方法不能被子类overriding为非静态方法,但静态方法可以被子类静态方法所Hided.
Native
只用于方法,指明方法体是由其它编程语言编写的。它以;结尾不是以{}结尾。
Public native void fastcalc()
Abstract
Abstract修饰符可用于类与方法前,在用于方法前时表明方法不具备方法体。只支类中包括了抽象方法则它必须声明为抽象类。如果一个类实现一个接口时,它没有为接口中所有的方法提供实现时,也必须声明为抽象类。
Final
Final修饰符可用于类,方法和变量,fianl类不能被继承,所有final类中的方法都是教学final方法。Final变量的值必须在创建时设定并具不能被修改。
Synchronized
防止多个线程同时访问相同的代码段。
Transient
表明类序列化时,变量不必序列化。
Volatile
表明变量由于线程可能异步修改。
目标3 缺省构造器
结定一个类,确定是否有缺省构造器
构造器是与类名相同的方法,并具没有返回值。缺省构造器是一个不具有任何参数的构造器。在你没有提供构造器的条件下,编译器为自动化为你提供一个缺省的构造器,但一旦你定义了任何一个构造器,编译器就不会为你提供缺省构造器。在这种条件下,如果你使用不具有参数的构造器将有错误。
构造器可以有访问修饰符,但不能有native,abstract,static,synchronized和final修饰符。
目标4 重载与覆写
为所有在自己或父类中的相关方法声明有效的返回值,
相同类中的方法
当在同一个类中有多个方法具有相同的名称时,这个方法就被重载了。只有参数的次序和类型是区分重载方法的依据,而返回值和参数的名称对区分重载方法没有贡献,所以,不能以返回值的不同来重载方法。
子类中的方法
可以在子类中重载父类的方法,只要新的重载方法具有不同的参数次序或类型。当你在子类中的方法具有于父类中的方法相同的signature,则称子类覆写了父类的方法。注意:子类覆写父类方法,它的访问修饰符可以不同,但子类要具有比父类更加严格的访问权限。
静态方法不能被覆写只能被HIDED。
基本类型为参数的重载
基本类型可以自动进行窄化转型(narrowing conversion),在没有相应数据类型的重载方法,它的数据类型向上晋升。
Section 2 Flow control and exception Handling
目标1 if 和switch语句
使用if和switch编写代码并能区分有效的参数类型
if的条件语句中只能是boolean型的数据。
Int k=1
If(k ) System.out.println(k)// 错误
If(k==1) System.out.println(k)// 正确
Switch的条件语句中只能是int数据类型,或int的窄化数据类型也就是byte, char, short
Long i
Switch(i){ //错误
Case 1: .. break
Case 2: … break
Default: ..
}
case语句的break的使用,在switch块中只有遇到break语句时,块才跳出。
Default语句不必总安排在switch语句的最后,但default语句不在最后时,要使用break.
三元 *** 作符 ?:
目标2 循环,break和continue
编写各种(不)具有label的break和continue的循环语句。明确循环开始与结束时,循环记数器的值。
For 循环
语法:
for(initializationconditional expressionincrement)
逗号运算符
它只能用于for的控制表达式中。
for(int i=1,j=i+10i<5i++,j=i*2)
do-while与while的区别在开do-while中的语句至少执行一次。
Goto与break,continue
虽然goto是java的保留字,但java而不使用它。Java中的跳跃功能由break与continue提供。在java中,惟一一个放置lable而能够产生效益的地点就是恰恰放在迭代语句前。一般而论,break与continue只会中断当前的循环,而与label搭配,可以中断多层循环。
Label1:
Outeriteration{
Inneriteration{
…
break//1
…
continue//2
….
Continue label1//3
….
Break label1//4
}
}
1中断内层迭代,回到外层迭代
2将执行点移至内层迭代的起始处
3同时中断内层迭代,再从外层迭代开始
4同时中断内外层迭代,不再进行任何迭代
务必记下。在java中使用label的惟一理由是跳过一个以上的嵌套层次。
目标3 try/catch语句与方法覆写
正确使用异常与异常处理语句(try,catch,finally)来编写代码,正确处理覆写方法的异常。
异常一词,意指“我对这件事有异议:我对这件事感到意外”。在问题发生点,你可能自己处理异常,有时,你可能不知道如向处理,就是说在当前的context并不具备中以修改问题的信息,你可将问题交付给高层的context的处理。
覆写有异常抛出的方法
覆写具的异常抛出的方法时,子类的方法只能抛出父类方法所抛出的异常或它的子异常。但是,子类方法可以抛出少于父类的异常或干脆就不抛异常。
方法声明的Throws子句
抛出子句意指当错误发生时,方法抛出这个异常而这个方法的调用者必须处理(catch)这个异常异常。
目标4 如时异常发生
认识代码段中异常发生的地方以它的影响。注意:异常可能是运行时异常,检测异常或错误。
错误无需捕捉
异常的出处:
Java标准库类抛出的异常
自己的类抛出的异常
执行期发生的任何意外
检测异常与非检测异常
检测异常你必须捕捉,而非检测异常你不必捕捉。
非检测异常发生后,缺省条件下会在控制台上打印一条消息。对某些非检测异常可用编码来避免。
public class GetArg{
public static void main(String argv[]){
if(argv.length ==0){
System.out.println("Usage: GetArg param")
}else{
System.out.println(argv[0])
}
}
}
检测异常必须被捕捉,方法在调用某个抛出检测异常的的方法时,它或者捕捉它或抛出它。
public FileInputStream openFile(String filename)
throws FileNotFoundException{//抛出异常,自己不处理
FileInputStream fis = new FileInputStream(filename)
return fis
}
或
public FileInputStream openFile(String filename) {
FileInputStream fis
try{
fs= new FileInputStream(filename)
}catch(FileNotFoundException ex){
ex.printStackTrace()
}
return fis
}
finally子句
finally子句总是会执行,即使try/catch中已有了return语句finally中的语句也会执行。但如果try/catch中有System.exit(0),finally语句不会执行。
Catch子句
Catch子句的捕捉异常的次序要与异常的层次结构相一致。也就是说子异常要先捕捉,父异常后捕捉。反之,编译器会抛出子异常已捕捉的信息。其它要注意是:异常被抛出后,异常处理根据捕捉的排列次序,寻找最近的处理程序。
目标5 使用断言
正确编写断言代码
assertion功能提供了一种在代码中进行正确性检查的机制,这种检查通常用于开发和调试阶段,到了软件完成部署后就可以关闭。这使得程序员可以在代码中加入调试检查语句,同时又可以在软件部署后关闭该功能而避免对软件速度和内存消耗的影响。基本上,assertion功能就是JAVA中的一种新的错误检查机制,只不过这项功能可以根据需要关闭。
断言的语法
assert somebooleatest
或
assert somebooleantest : someinformatinvemethod
断言的使用
断言的使用就好比注释的使用,注释向其它人表明其阅读的代码是正确的,而断言用于保证在程序执行过程中booleanTest的值一定是真。断言用于确保某些东西总是为真的。缺省条件下,断言功能是关闭的。
编译开启断言功能。
javac -source1.4 Myprog.java
运行开启断言功能
enableassertions的参数:
no arguments
Enables or disables assertions in all classes except system classes.
packageName...
Enables or disables assertions in the named package and any subpackages.
...
Enables or disables assertions in the unnamed package in the current working directory.
className
Enables or disables assertions in the named class
例如:
java –enableassertions:my.package… MyProg
java –ea Myprog
What should you assert to be true?
断言用于你认为某此东西必须是真的地方。例如:人的年龄必然大于0,又如你认为在一套if/else判定后,必然有判定成功的分支,就可在if/else后,插入断言。例如:
switch(lang){
case Language.java:
System.out.println("java")
break
case Language.pascal:
System.out.println("pascal")
break
case Language.csharp:
System.out.println("csharp")
break
default:
assert false : lang
}
断言使用的地方
应该使用的情形 不应该使用的情形
用于保证内部数据结构的正确 不用于保证命令行参数的正确
用于保证私有(private)方法参数的正确 不用于保证公共(public)方法参数的正确
用于检查任何方法结束时状态的正确 不用于检查外界对公共方法的使用是否正确
用于检查决不应该出现的状态 不用于保证应该由用户提供的信息的正确性
用于检查决不应该出现的状态,即使你肯定它不会发生 不要用于代替if语句
用于在任何方法的开始检查相关的初始状态 不要用做外部控制条件
用于检查一个长循环执行过程中的的某些状态 不要用于检查编译器、 *** 作系统、硬件的正确性,除非在调试过程中你有充分的理由相信它们有错误
在不开启断言功能时的输出:
在开启断言功能时的输出:
Section 3 Garbage Collection
Objective 1,2 &3
State the behaviour that is guaranteed by the garbage collection systemWrite code that explicitly makes objects eligible for garbage collection. Recognize the point in a piece of source code at which an object becomes eligible for garbage collection.
为什么要进行垃圾收集
当内存中的对象不再被利用时,系统就要回收内存。Java中不用担心垃圾收集,系统的垃圾收集器会自动回收没有引用的对象所占用的内存。注意:你能建议或鼓励 JVM进行垃圾收集但你不能强迫它。
确保的行为:finalization
Java确保在对象被收集调用finalize方法。垃圾回收器用于释放“对象内存”,由于java中所有的东西都是对象,所以finalize不用来回收释放内存。Finalize方法的使用时机是代码采用了native方法,它调用了非java的内存分配方式,所以你得在finalize方法中以native的方式释放内存。
对象被回收的时机
当垃圾收集机制认为对象上没有引用时,它调用垃圾收集器来回收对象。当垃圾收集是非确定性的,你不能预测它发生的时间,你也不能预测finalize方法准确的运行时间。
Note: Once a variable is no longer referenced by anything it is available for garbage collection.
You can suggest garbage collection with System.gc(), but this does not guarantee when it will happen
非可达
当对象非可达时,就是可能进行回收。非可达的原因为:对象明确被设置为null或指向它的引用数为0。
Section 4 Language Fundamentals
Objective 1, Packages, import, inner classes, interfaces
Identify correctly constructed package declarations, import statements, class declarations (of all forms including inner classes) interface declarations, method declarations (including the main method that is used to start execution of a class), variable declarations, and identifiers.
目标1 包,导入,内类与接口
正确的识别包声明,导入声明,类声明(包括内类),接口声明,方法声明(包括main方法),变量声明和修饰器。
包语句
包用于解决名字冲突,一般开发者以自己的internet域名的反序作为包名的第一部分。这样你就可以生成独一无二的包,这样包中的类就不会有名称上的冲突。例如:package cn.edu.xjtu.scjp 这样就可以产生独一无二的类名:cn.edu.xjtu.scjp.Question
注意: 包声明语句必须位于其它语句之前,除了注释语句
导入语句
导入语句位于包语句之后,其它语句之前。导入语句是为了方便代码编写,导入相应的包后,包中的类可以仅以局部名使用,而不以全限定名来使用。
Import cn.edu.xjtu.scjp.*
Question q=new Question()
或
cn.edu.xjtu.scjp.Question q=new cn.edu.xjtu.scjp.Question()
导入语句对性能的没有影响,它就好比DOS环境中设置路径。
注意:If a source file has a package statement, it must come before any other statement apart from comments
类与内类的声明
类声明
一个文件只能包含一个public类,但可以包含多个非public类。这些类在编译后将生成各自独立的.class文件。
内类,即定义在其它类之中的类。
接口定义
接口是纯粹的abstract class.它所定义的方法不包含方法主体。接口也可定义数据成员,但这些数据成员自然而然的成为了static和final. 接口中的方法即使没有声明为public,它们也会是public,所以实现接口时,必须将实现的方法定义为public。
例子:
interface Instrument{
int i=5// static &final
void play()// automatically public
…
}
class Wind implments Instrument{
public void play(){} //必须定义为public
…
}
main方法
main方法是程序运行的起点,方法的signature
public static void main(String argv[])
public:方法全局可见性 static:类方法 void: 无返回值 String[]:参数为字符串数组
main不是java的关键字,可以用它来定义变量。Main方法的参数是由命令行来提供的。
State the correspondence between index values in the argument array passed to a main method and command line arguments.
Java Aclass arg0 arg1 …
变量声明
变量的名称:它必须是一个合法的标识符。标识符以字母开头的Unicode字符串;不是关键字,布尔直接值(true,false)或保留字(null)它在作用范围内必须是唯一的。
合法的变量: _avariable, avariable$, (注:_,$可用于变量名)
数据类型:boolean-8/1 byte-8 -128~127
short-16 -32768~32767 int-32 long-64
float-32 double-65 char-16 0~65536
数据类型转型(casting operators)
在java中只有进行窄化转换(narrowing conversion)时才有风险,宽化转化(widening conversion )时就无需明确指示。
数据运算中的晋升(promotion)
在比int小的基本数据类型上进行任何数学运算或位运算时,运算之前会先晋升为int,其结果也会是int类型。如果你要将结果指给较小的类型时,要进行转型。
目标2 使用接口,
明确实现接口类,接口是Runnable或其它的用户自定义的接口
Interfaces -Programming by contract
接口是在类之间建立了一个协议(protocol),或者说合同编程。 意味一个开发者开发了接口其它开发者要守它的条件。接口的别一个用处是实现多重继承。Java中类只能继承一个非接口类,其余继承的来源得是接口。正确的写法是:
DeriveClass extends BaseClass implements interface1,interface2{}
接口合并时的名称冲突
Objective 3, Passing values from the command line
State the correspondence between index values in the argument array passed to a main method and command line arguments
运行一个例子就明白:
public class MyParm{
public static void main(String argv[]){
String s1 = argv[1]
System.out.println(s1)
}
}
java MyParm hello there
程序将输出there不是MyParm也不是hello
Objective 4, identify keywords
abstract boolean break byte case catch
char class const * continue default do
double else extends final finally float
for goto * 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
Objective 5, Unassigned variables
State the effect of using a variable or array element of any kind when no explicit assignment has been made to it.
Java保证变量绝对会在被使用前初始化。每个基本类型的数据成员都保证有初值(O)。而引用数据类型的数据成员的初值为null.
The default values for numeric types is zero, a boolean is false and an object reference is the only type that defaults to a null.
局部变量(在方法中定义的变量)不能缺省值,故使用前必须明确赋予初值。
数组总是可以设置缺省值的。Before initialization arrays are always set to contain default values wherever they are created.
Objective 6, The range and format of data types
Section 5 Operators and Assignments
Objective 1, Applying operators
Determine the result of applying any operator including assignment operators and instanceof to operands of any type class scope or accessibility or any combination of these.
目标1 使用运算符
*** 作符的分类
算术 *** 作符 (+ , - , * , / , %,++,--)
一元 *** 作符 (++, --, - , +)
关系和条件 *** 作符 关系 *** 作符(>,>=,<,<=,==,!=) 条件 *** 作符(&&,||,!,&,|,^)
移位 *** 作符(<<,>>,>>>) 位 *** 作符(&,|,^,~)
赋值 *** 作符(=)
其它 *** 作符(?:,[],.,new,instanceof,(类型))
注:除了=,==,!=运算符外,其它运算符只能用于基本类型。String类支持+,+= *** 作符
例: String aStr=2+”hello”
instanceof *** 作符用来检验某特殊对象是不是某类或该类的子类的实例,还可以检验某对象的类或子类是否实现了某接口。注意,数组也是对象,instanceof同样适合与数组。
赋值 *** 作符=
基本数据类型的赋值 *** 作
boolean数据只能赋值于另一个boolean数据。不同于c和c++,java中的boolean值只能是true和false。
其它的数据类型可以自由的进行widening conversion(宽化转换)。而进行narrowing conversion(窄化转换)由于有精度的损失,必须进行强制转换。
Primitives may be assigned to "wider" data types, a boolean can only be assigned to another boolean
引用数据类型的赋值 *** 作
引用数据类型的赋值,例如a=b,使得a和b引用指向相同的对象。引用数据类型的赋值可以向上转型。即一超类的引用可以被赋值一子类对象。但向下转型必须强制转换。
Object references can be assigned up the hierarchy from child to base.
++,--: 前序递增和前序递减(++a,--a)先进行运算然后才增赋值。后序递增和后序递减(a++,a--)先赋值然后才进行运算。
奇怪的++与--:
int a=1,b=5
b+=b++-a--(b=9)
b=b++(b=9)
b=++b(b=10)
关系 *** 作符
关系 *** 作符(<,>,<=,>=,==,!=)所产生的结果是boolean,==,!=可用于所有的内置的类型,其它运算符不能用于boolean.
奇怪的==(对于引用类型==比较两个对象的内存地址,这可不是我们想要的)
double d=12.0
int i=12
Integer i2=new Interger(12)
Double d2=new Double(12)
Integer i3=new Interger(12)
d==i true
i2==i3false
i2.equals(i3)true
i2.equals(d2) false
逻辑 *** 作符
逻辑运算符:&&,||,!只能用boolean值身上。位运算符:&,|,^,~:在两个 *** 作数的相应位上进行逻辑代数运算。boolean数据不能~b而用!b。&和|和^即是逻辑的(逻辑与,逻辑或和逻辑非)也是位 *** 作的运算符(按位与,按位或和按位异或)。
奇怪的&&与||(短路的&&和||)
当第一个 *** 作数为flase时,如果用&&运算符时,则不检查第二个 *** 作数就直接返回flase。
当第一个 *** 作数为true时,如果用||运算符时,则不检查第二个 *** 作数就直接返回true。
移位 *** 作符
无符号右移位 *** 作符>>>,它采用零扩展,高位插入0. 左移位运算符<<能将运算符左边的运算对象向左移动运算符右侧指定的位数在低位补0。有符号右移位运算符>>则将运算符左边的运算对象向右移动运算符右侧指定的位数,有符号右移位运算符使用了符号扩展。若值为正则在高位插入0,若值为负则在高位插入1。
注:int或<int的数据类型进行位移 *** 作数先要进行mode 32运算所以对大于32的位移运算,先要进行mode 32运算,所以3>>>32的结果为3。Long数据类型在先要进行mode 64运算。
奇怪的>>>:小的负数进行>>>运算将得到一个大的正数
-1>>>1 : 2147483647
A unsigned right shift >>>by a positive amount of a small negative number will result in a large positive number returned.
*** 作数的优先级
优先级(胃溃疡患者是c程序员的写照 Ulcer Addicats Really Like C A lot)
U: ->Unary 一元运算符 ++, -- ,-,+,!,~
A: ->Arithmetic(shift) *,/,%,+,-,>>,>>>,<<
R: ->Relation >,<,>=,<=,instanceof,==,!=
L: ->Logic(bitwise) &,^,|,&&,||
C: ->三元运算符
A:->赋值 = *=
Objective 2, the equals method
Determine the result of a
有。目前Java是甲骨文公司(Oracle)的编程语言产品,公司为此设置了4个官方的证书,从初级到高级依次是:
1、OracleCertifiedAssociate:需要掌握后续证书都要用到的基础Java编程知识。
2、OracleCertifiedProfessional:分为“移动应用开发”和“商业组件开发”两大内容。
3、OracleCertifiedExpert:分为“企业级JavaBean开发”,“Java持久化开发”,“Web服务开发”,“Web组件开发”四大内容。
4、OracleCertifiedMaster:需要掌握Java企业级架构和企业级开发。
这四个证书是官方出的,所以具有绝对的权威性,当然价格也不便宜。
但是,如果想找到好工作,建议还是磨练自己的技术和经验,就算你有了证书,在面试的时候还是要考察你的基本功和知识面,所以个人觉得认证证书最大的用处是让简历好看一些。
扩展资料
Java认证考试的特点分述:
1、SCJP(SunCertifiedJavaProgrammer):测试Java程序设计的观念和能力,内容偏重于Java语法和JDK内容。共59题复选及填充,时间2小时,答对61%是及格标准。
2、SCWD(SunCertifiedWebComponentDeveloperforJ2EEPlatform):内容涵盖Servlet与JSP。考题为60题复选及填充,时间2小时,答对70%是及格标准。
3、SCJD(SunCertifiedJavaDeveloper):测试Java软件开发的进阶技能,考试分成两阶段,第一阶段是程序设计题,时间无限制,答对80%以上就可以进入第二阶段应试。第二阶段是5-10题简答题,时间90分钟,答对70%以上即可得到SCJD认证。
4、SCAJ(SunCertifiedEnterpriseArchitectforJ2EE):测试对于J2EE架构的熟悉程度以及系统整合的能力。本考试分成三个阶段,第一个阶段是48题复选题,时间75分钟,答对68%以上方可进入下阶段。第二阶段是系统设计专题,无时间限制,答对70%以上方可进入下一阶段。第三阶段是四题申论题,应试时间90分钟。
参考资料来源:百度百科:Java认证考试的特点分述
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)