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