SCJP笔记

来源:百度文库 编辑:神马文学网 时间:2024/04/23 17:58:34
1.变量的初始化,如果是类成员变量,则自动被初始化;如果是方法的局部变量,则不会被编译器自动初始化,访问就会编译错误。
2.接口能够扩展一个或多个其他接口,不能实现接口。
3.抽象实现类不必实现接口方法。
4.关于局部变量和类成员之间的关系:  如果局部变量和类成员同名,那么该方法中认局部变量。
5.Boolean是引用类型和String类似,初始值为null;而boolean是基本类型,初始值为false。
6.所有对象引用类型变量默认初始值为null,即不指向任何对象。注意数组本身也是对象,
所以没有初始化的数组引用在自动初始化后其值也是null。
7.unsigned不是Java的关键字,在Java中,只有字符型是不带符号的整数。
8.Java语言中规定,用来指定数组长度的数值类型只能是byte,short或int,而不能是long,double之类的。。。。
9.没有访问控制符,则访问控制是默认的,这是指包级,即包内可见!
10.3/0,3%0 ArithmeticException 3.0/0 Infinity 3.0%0 NaN。
11.对象类型(不是引用变量的类型)决定在运行时使用那个重写方法。
12.引用类型决定在编译时使用那个重载方法。
13.子类不能重写父类的静态方法,也不能把父类不是静态的重写成静态的方法。 在子类中声明和父类相同的方法就可以将父类的静态方法隐藏!! 就是为了达到重写的目的,所以就要用到隐藏!!上边我说了,子类是不能重写父类的静态方法的!!
14.如果全局变量是最终变量,则必须被初始化!
15.高内聚 cohesion 低耦合 coupling 封装 encapsulation 继承 inherit  多态 polymorphism
16.接口默认的是抽象的,加不加public和类一样。
17.接口中定义的成员属性变量默认都是static final。
18.在接口中定义的成员方法默认的都是public abstract。
19.不能重写final最终方法!
20.只有继承的方法才可以被重写,私有方法不能被继承!
21.System.out.printf("%b",123); 打印true! 如果参数 arg 为 null,则结果为 "false"。
如果 arg 是一个 boolean 值或 Boolean,则结果为 String.valueOf() 返回的字符串。否则结果为 "true"。
22.BufferedWriter类提供了newLine() 方法,它使用平台自己的行分隔符概念,此概念由系统属性 line.separator 定义。并非所有平台都使用新行符 ('\n') 来终止各行。因此调用此方法来终止每个输出行要优于直接写入新行符。
BufferedWriter类提供了readLine() 方法。
23.加宽先于装箱执行,加宽先于var-arg执行,装箱先于var-arg执行!
24.Local loc=Local.getDisplayCountry()+" "+df.Format(d));//Date d DateFormat df。
25.swith语句要求他的case表达式是常量,而包装器变量(甚至final static包装器变量)不会被视作常量
26.java.lang.Throwable包含Error和Exception,Exception中又有RuntimeException。
27.为了使类是线程安全的,需要同步访问可交换字段的方法:对静态字段的访问应该通过静态同步方法完成,
访问非静态字段应该通过非静态同步方法完成。
28.注意 sleep是静态方法在使用sleep和wait方法是都需要用try catch包围并抛出InterrruptException。
29.必须从同步环境内调用wait() notify() notifyAll()!线程不能调用对象上的等待来通知方法,除非它拥有那个对象锁。
30.当在对象上调用wait()方法时,执行该代码的线程立即放弃它在对象上的锁。然而,当调用notify()时,并不意味着这是线程会放弃其锁。
如果线程仍然在完成同步代码,则线程在移出同步代码之前不会放弃锁。因此,只调用notify()不意味着这时该锁将变得可用!
31.如果wait()的线程不用该锁,则它将抛出IllegalMonitorStateException。这个异常不是检查异常,不必明确捕获它!
32.如果没有异常出现或异常被捕获,处理,则在退出try...catch...finally结构后,会继续执行后续的代码。
33.对象创建中不能时能通配符,例如new ArrayList()将不能编译。
34.toAraay()方法中没有什么奇怪的东西,它有两种情况:一个是返回心得Object数组,一个是使用你将其作为目标数组发送的数组List oL ;Object[] oa=iL.toAraay();Integer[] ia2=new Integer[3];ia2 =iL.toArray(ia2);
35.Collections.reverseOrder()返回一个比较器,reverseOrder(Comparator cmp)返回一个比较器,它强行逆转指定比较器的顺序。如果指定比较器为 null,则此方法等同于 reverseOrder()。例子Collections.sort(list,Collections.reverseOrder(new MyComparator()));
36.List myList=Arrays.asList(myArray);
37.请求垃圾收集的最简单方法是System.gc()。
38.Java提供了一种机制,使你能够在对象刚要被垃圾收集器删除之前运行一些代码,这段代码位于名为finalize()的方法内,所有类从Object类继承这个方法。
39.永远不能指望垃圾收集器删除一个对象(不确定什么时候运行),因此,放入类的重写方法finalize()中的任何代码无法保证运行。
40.对于任何指定的对象,finalize()(至多)只会被垃圾收集器调用一次!
41.Arrays.sort(ay),Arrays.sort(ay,Comparator)注意:sort方法被重写了一百万次,以便匹配类型,
排序基本类型的sort方法始终基于自然排序进行排序,不会使用Comparator。
42.不能在静态方法中使用super和this!!!
43.try catch finally语句块 后面两个可以都有,也可以只有一个,不能一个没有!!就是说try finally也合法!!!
44.实现writeObject()和readObject()的最常见的原因是:当你必须手动保存对象状态的某一部分是。如果你选择这样做,就可以自己读和写所有的状态,但是,这非常少见。因此,如果你只想自己执行一部分串行化/反串行化工作,则必须调用defaultReadObject()和defaultWriteObject()方法来做余下的工作,而且回读时必须和写的访问顺序相同!!!
45.yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下yield()方法将导致线程从运行状态转到可运行状态,以便同优先级的线程有机会运行,但再次强调,它可能根本没有效果!
46.sleep() yield()是静态方法,用的时候是Thread.sleep(),如果用t.sleep()调用,其实他们不影响实例t。因为,他们被定义为始终影响当前正在执行的线程。
47.非静态方法interrupt()方法可以中断线程。如果线程在调用 Object 类的 wait()、wait(long) 或 wait(long, int) 方法,或者该类的 join()、join(long)、join(long, int)、sleep(long) 或 sleep(long, int) 方法过程中受阻,则其中断状态将被清除,它还将收到一个 InterruptedException。 所以wait,jion,sleep这几个方法需要异常捕获来捕获InterruptedException。
48.final变量必须初始化,不过非静态final变量可以在构造函数中初始化!!
49.可以传递多个IS-A测试的任何Java对象都可以被看做是多态的。除了Object类型的对象之外,其他所有Java对象都是多态的,这在于它们为自己的类型以及Object类传递IS-A测试。
50.PriorityQueue类的三个方法:peek(),poll(),offer(),分别是peek查看,poll输出值并删除,offer增加。
51.泛型中的类型不能是基本类型(int),只能是包装类型(Integer)。
52.Animal animal=new Dog();Cat cat=(Cat)animal;编译通过,但是运行时会抛出ClassCastException异常!!
53.Arrays.sort方法根据元素的自然顺序对指定对象数组按升序进行排序。数组中的所有元素都必须实现 Comparable 接口。此外,数组中的所有元素都必须是可相互比较的(也就是说,对于数组中的任何 e1 和 e2 元素而言,e1.compareTo(e2) 不得抛出 ClassCastException)。
保证此排序是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。
54.PriorityQueue元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。
55.xxxValue().6中包装器类中的每一种都有6个方法,因此任何数值包装器都能够被转换为任何基本数值类型。。parseXxx()返回指定的基本类型!!!
56.valueOf()返回新创建的包装器对象,对象的类型与调用该方法的类型相同。
57.switch的表达式结果必须int(隐式和强制转换也行)或者enum(Java5),long,double,float等不可以!
58.case常量必须与switch表达式可用的类型相同,case常量必须是编译时常量(final (static) int类型也可以),所以包装器类型的变量(即使是static final)不会被视作常量!
59.一定要记住:当你重写equals()时,必须接受一个类型为Object的参数,但当你重写compareTo()时,你应该接受你正在排序的类型的参数。没有用泛型则是compareTo(Object obj)!如果类声明为class xx implements Comparable,那么正确实现为compareTo(T t),这样才正确实现了接口的方法!
60.对象创建的时候不能使用通配符,即不能new class()!
61.instanceof 判断依据对象类型,而不是引用类型!
62.实例变量和对象驻留在堆上,局部变量驻留在栈上!
63.String s="abc";在这种简单的情况下,"abc"将进入池内,s将引用它。
String s=new String("abc");在这种情况下,因为我们使用了new关键字,所以Java将在常规内存(不是在池内)中创建一个新的String对象,并且s将引用它。此外,常量"abc"将放置在池内。