快捷搜索:

scjp认证考试复习笔记

盼望总结的这些常识点会对筹备经由过程SCJP考试的同伙有所赞助!难免有差错的地方迎接大年夜家品评斧正。

系列之一

Thread类是在java.lang包中定义的,sleep()和yield()是Thread的静态措施。然则wait()、notify()、notifyAll()是Object类的实例措施。要让一个线程启动要调用start()措施,然则详细什么光阴线程开始运行是跟操作系统和虚拟机相关的。

任何时刻都要记得String类是弗成改动的,然则不要觉得调用某些措施必然会创建一个新的工具。当调用String的实例的concat()、trim()、toUpperCase()、toLowerCase()措施时,假如调用后实例没有发生变更,那么将不会创建工具。运行下面的法度榜样获得四个true就阐清楚明了这一点。

public class TestString

{

public static void main(String[] args)

{

TestString ts = new TestString();

ts.test();

}

public void test()

{

String lower = "mingjava";

String upper = "MINGJAVA";

System.out.println(lower == lower.toLowerCase());

System.out.println(upper == upper.toUpperCase());

System.out.println(lower == lower.trim());

System.out.println(lower == lower.concat(""));

}

}

所有的非常都承袭自Throwable,它的两个分支是Error和Exception。Error和RuntimeExcepton合起来称作UnCheckedException。其他的非常称作CheckedException。Error和RuntimeException是不必要进行捕捉的,Error我们力所不及,然则RuntimeException的呈现便是你的差错,你应该反省你的代码。假如措施中没有用throws声明CheckedException,那么你进行捕捉的话同样会呈现编译差错!

记得数组的下标从开始0开始计数的,无意偶尔候会在main(String[] args)里面考察你这个问题

内部类对它的Enclosing class有无限的造访权限,以致可以造访他的private类型的变量。然则假如内部类想造访局部变量的时刻,那么这个局部变量必须为final的。例如

public class Test

{

public void doSome()

{

final int j = 100;

class InnerClass

{

public void print()

{

System.out.println(j);

}

}

}

}

措施重载的时刻,返回值和抛出非常是不能区分同样名字的措施的。起感化的是措施参数的类型和个数

留意>>是带符号的移位,>>>是右边补零的移位。看下面的例子

public class MyClass

{

public static void main(String argv[])

{

int i = 0x80000000;

System.out.println(i);

System.out.println("after >>"+(i>>1));

System.out.println("after >>>"+(i>>>1));

}

}

ArrayIndexOutOfBoundsException, NullPointerException, ArithmeticException, NumberFormatException.ClassCastException都是常见的RuntimeException,不是Complie Exception

String s = "xxxx" 这样的声明s是可以复用的,然则new String("xxx")是必然创建一个新的工具的。对照一下System.out.println("String" =="String")和System.out.println(new String("String")==new String("String"))的结果吧

在碰到a++和++a的时刻必然要小心

短路运算符||和&&必然要弄明白,假如短路运算符前面的前提为真的话那么后面的语句就会被丢弃不会被履行

transient只能修饰变量,并且它不能和final static一路应用

假如你承袭Thread你可以不实现public void run()措施,然则你实现Runnable接口的话必须实现这个措施

假如措施前面不加限定修饰符,那么它是在包内可见的。 protected的意思是包内可见并且子类可见。

String覆盖了Object的equals措施,这个措施对照的是String实例的内容,==对照的是地址。

Byte, Double, Float, Integer, Long, Short 承袭自Number,Character、Boolean承袭自Object。

有光阴应该看看几个包装类的构造函数考试的时刻会涉及到

这样的声明是精确的int[][] array = new int[3][];

你应该很清楚switch语句的布局,并且switch()你能吸收int char的参数

假如你覆盖了public boolean equals(Object object)措施那么你应该同时覆盖public int hashCode()

instanceof 既可以用在class也可以用在interface

系列之二

调用线程实例的start()措施他的run()措施会运行,你直接调用run()它也会运行。

Java中措施参数是按值通报的,最简单的环境便是通报基础数据类型。他不能变动通报给他的参数的,例如下面的法度榜样会输出0

public class MyClass

{

public static void main(String argv[])

{

MyClass mc = new MyClass();

int i = 0;

mc.increment(i);

System.out.println(i);

}

void increment(int i)

{

i++;

}

}

throws用在措施的声明中表示措施可能呈现非常,throw表示抛出一个非常。不要肴杂

finally中抛出非常可以导致try中的非常被轻忽。看下面的例子

public class Test2

{

public static void main(String[] args) throws Exception

{

try

{

f();

}

finally

{

m();

}

}

public static void f() throws MyException

{

throw new MyException();

}

public static void m() throws MyException2

{

throw new MyException2();

}

}

class MyException extends Exception

{}

class MyException2 extends Exception

{}

assert Exp1:Exp2这种形势中 Exp2假如是措施的话必须有返回值,可所以基础数据类型也可所以任何Object然则弗成以void。

假如你供给了一个类的构造器那么编译器就不会供给无参数的构造器给你了,每每在扩展类的时刻会呈现问题,下面的例子就不能经由过程编译

class Base

{

Base(int i)

{

System.out.println("Base");

}

}

class Derived extends Base

{

public static void main(String argv[])

{

Derived d = new Derived();

}

void Derived()

{

System.out.println("Derived");

}

}

构造器是不能被覆盖的

native的措施是不能有body的,由于他们平日用c/c++来实现

public class MyClass

{

private static int x = getValue();

private static int y = 5;

private static int getValue()

{

return y;

}

public static void main(String args[])

{

System.out.println(x);

System.out.println(y);

}

}

这段法度榜样的输出会是0,5。由于首先x,y都邑设置为默认值0,当给他们赋值的时刻y照样0,以是返回的y付给了x,以是x=0,然后给y赋值=5

引用声明为final的表示他不能再指向其他的工具,然则不阐明引用的内容不能被改动

数组声明的时刻,假如是基础数据类型的初始化为0或者false,假如是工具的初始化为null

String = String+char是合理的 char = char+String是分歧理的

StringBuffer sb = new StringBuffer("haha"); String s1 = "haha";System.out.println(s1.equals(sb));输出会是false的。不要被迷惑,不合类型的对照输出是false String和StringBuffer在层次上没有关系

static的措施中不能应用this

&可以用在两个int之间表示bit与操作&&不能用在两个int之间 要在布尔型之间应用

系列之三

java中的boolean类型不能和int类型进行转换的,不要觉得true为1、false为0

局部变量在应用前必然要先初始化

class中假如含有抽象措施那么必须要声明为抽象类,假如没有抽象措施也可以声明为抽象类,接口中的措施都不能在接口中实现。

length是数组的一个变量而不是措施,平日我们谋略Collection的时刻要用size()措施

Boolean[] xx = new Boolean[12]和boolean[] yy = new boolean[12]的差别是:前者是Object的数组,并被初始化为null后者是基础数据类型数组被初始化为false

java.util中的类Vector和HashTable是线程安然的

编译器为你供给的默认构造器的造访节制符是和他所属类的造访节制符同等的

0。0==-0。0是返回true的

本地变量不能声明为static

class Base

{

int i = 99;

public void amethod()

{

System.out.println("Base.amethod()");

}

Base()

{

amethod();

}

}

public class Derived extends Base

{

int i = -1;

public static void main(String argv[])

{

Base b = new Derived();

System.out.println(b.i);

b.amethod();

}

public void amethod()

{

System.out.println("Derived.amethod()");

}

}

上面的法度榜样输出为Derived.amethod() 99 Derived.amethod(),当Base b = new Derived()履行的时刻首先去履行Base的构造器,然则因为b的实际类型是Derived以是b的amethod在构造器内被调用。变量是和声明类型相关的以是输出9,措施(静态措施除外)是跟实际类型相关的输出Derived.amethod()

牢记数组的下标从0开始

StringBuffer sb = new StringBuffer("ha");

System.out.println(sb+1);这样的话是不能经由过程编译的,由于+并不能用在StringBuffer和int之间,只能在String和原始数据类型之间

不合包装类的对照会返回false例如 new Integer(4).equals(new Long(4));假如是同类型那么equals对照的便是他们的值了

含有assert的法度榜样假如履行的时刻不用-ea那么相关的语句会被轻忽

您可能还会对下面的文章感兴趣: