SCJP 经验 【转帖】

上一篇 / 下一篇  2008-04-22 23:45:51 / 个人分类:Public

1。关于取余:
  -5 % -2
  余数的符号看左边的运算数,所以余数为负。然后因为5 % 2为1,所以结果为:-1
  -5 / -2 = 2
  所以:-2 * 2 -1 = -5
  同理:
  -5 / 2 = -2,-5 % 2 =-1
  以上也说明了关于整除可是取两者的符号啊!
摆脱,一定要看清题目
2.关于继承的访问权限。
protected,friendly谁的访问权限低呢?
因为:protected权限的函数,可以在包内被任何类调用,还可以在包外包外类调用,
而friendly函数只能在包里面调用,所以protected的访问范围更大,也就是其权限就高。
friendly 的权限低。
所以排序为:
public > protected > friently > private
3.对于接口而言
里面的方法如果没有修饰符默认都是public的。
所以默认继承的访问权限就只能够是public。不能是friendly
4.关于引用传递
在函数参数中,如果有对象的引用。则统统遵循如下原则。
传递过程,一律传递引用。
引用再使用的过程中可以改变所引用对象的值,但是如果,出了这个函数,
那么引用将继续指向原来的对象。
也即:函数传递中,引用本身的传递是传值,引用指向的对象在函数调用前后不发生变化
5.一个null的引用也可以直接的调用类的static成员而不会出现任何错误
6.In order for the Java Collections to work properly (and everything else in Java), the equals() and hashCode() methods must be compatible. Here, compatible means that if equals() reports that two instances are the same, then the hashCode() of both instances must be the same value.
7.静态成员应该以静态方法访问,但是也可以用对象名.静态变量名来访问
8.移位运算符:
int a = -1;
a = a >>> x;
如果是整型,它是根据 x mod 32来移位的。如果x=32则不移位。
如果x=1则和x=31 的移位结果一样。
9. 请注意:%(modulus)是可以用在浮点数上的。
取余就是不停的减,直到结果小于除数,结果就是余数
10。当访问变量的时候,用的是引用,当访问函数的时候,用的是对象。
特别适用于父类的引用,子类的对象的情况。
这个引用在使用变量的时候,肯定是父类的,倘若没有就会报错
11.try也可以不跟catch,跟finally就成了
12.倘若HashMap里面有了重复元素,则根据key来调用的是最后一个
13.关于子类函数抛出异常问题。

定理----------原则定理---------用于父类的代码,应该可以不加修改的用于子类
由此延伸一下定理:
定理一:如果子类函数抛出异常,父类覆写函数后,可以抛出异常也可以不抛出异常
定理二:如果子类函数没有抛出异常,则父类覆写函数后,一定不能够抛出异常。
关于Assertion的论述:
AssertionError 是 Error的子类,在一个方法的Throw语句中,我们并不一定要强制抛出它。
既然Error和它的子类不一定要强制抛出,那么我们就可以在自己的子类抛出它而不管其父类方法抛出什么东西。
这一点就像RunTimeException。
14。关于线程。
线程的调用是没有时间的。你不知道什么时候操作系统去调用和执行某个线程的,因此在线程里面去修改某一个值
该值是否真的变化了是不确定的。因为鬼才知道线程是否执行了?
15。方法里面的变量是不会主动初始化的。
16。byte可以有负数的,因此其范围为:-128到127
17。实现接口Runnable的类,一定要实现方法run,run是没有任何参数的
18.数组作为参数传递给函数的时候,如果函数内部改变了数组的元素的值,那么函数调用结束
数组的值为新值。
19.wait(),notify()都是object的实例方法,start(),run(),toString是Thread的实例方法。
sleep()是Thread的静态方法
20.==这种条件运算符比赋值运算=的优先级要高,所以......
21.
Collection, Set, SortedSet, List, Map and SortedMap. The most basic interface is Collection. Three interfaces extend Collection: Set, List, and SortedSet. The other two collection interfaces, Map and SortedMap, do not extend Collection, as they represent mappings rather than true collections.
22.
All the variables in an interface are implicitly static and final. Any methods in an interface have no body(implicitly abstract), so may not access any type of variable.
23.
向下转型的概念澄清:
class Base {}
class Sub extends Base {}

public class MyClass
{
 public static void main(String argv[])
 {
  Base b = new Base();
  Sub s = (Sub)b;
 }
}
这里
Sub b= (Sub)b;
在编译期没有问题,但是执行期肯定会报错的。因为b本身是一个基类对象。所以向下转型会出问题。
但是修改
 Base b = new Base();
为 Base b = new Sub();
就没有任何问题了。因为这样的话b本身就是个Sub对象
24.
Object 的equal方法,只是在两个引用是完完全全的同一个对象时结果才为真。
否则的话,统统为false,这点上,StringBuffer是完全一样的。
25.
java -Dorg.xml.sax.driver=com.nc.xml.SAXDriver SurveyReader
(注意,-D 后面 不 应该有空格。)
26.
倘若父类的没有默认构造函数,则子类构造函数一定需要显式的调用父类的构造函数,
否则编译不会通过。还有,如果子类所有的构造函数都是私有的,则该类不能够被继承
27。
请注意,8进制数是没有8的。
28。
关于hashCode和equal的原则问题
(1) Whenever two objects are equal according to the equals(Object o) method, then calling the hashCode method on each of the two objects must produce the same integer result.
(2) Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer.
29.
may not意思是:不能,不准
30.
构造函数里面调用方法的时候,也是动态的。
如果父类构造函数调用了一个方法,子类也覆写了这个方法,则当生成子类对象的时候,必然会因为调用父类构造函数而调用
子类这个方法。注意,只要是方法调用,就一定是动态类型识别
31.
关于assert
assert expression1:expression2;
如果expression1为false的话,抛出异常,内容为:expression2
为true的话,继续执行程序,不执行expression2。
If expression1 (which must be a boolean expression) is evaluated to true, the expression2 will not be evaluated
32.
 If two objects are equal, the hash codes returned by them are same;but converse is NOT true. If two objects are not equal, their hash codes could still be same.
33.
当你在比int更小的任何型别(char,byte,short)上进行任何数学运算或位运算时,运算之前先被晋升为int,最后所得的结果也会是
int型别。因此如果你要将结果赋值给较小性别,你就要进行转型动作。
34.
float赋值:
    float a = 2;
    float c = 2f;
    float b = 1.2f;这样是合法的
   float b = 1.2;不合法。
原因,默认的带小数的是double,所以这样也行:
float b = (float)1.2;
35。
外覆类,除了String Buffer,equals比较的都是内容。所以只要内部的值一样,返回结果都是true
36.
this是个非static变量,不可以在main里面直接调用
37.
不能在方法内部定义static变量
38
147题目做到了第61题。
85分通过,心里面不胜欢喜!弄明白了很多概念


TAG: java Public

Jopa的个人空间 引用 删除 gegur2008   /   2008-04-22 23:51:05
我把 147 和 104 的题综合了一下,从个人的观点做了一些解析。也把其中的一些错误纠正了一些,多数题都通过了上机实测。但个人能力有限,对答案的正确性仍然不敢保证全都正确,所以请各位自行处理。

其中一例:

1)public class Foo{

2) public static void main(String args[]){

3) try{return;}

4) finally{ System.out.println("Finally");}

5) }

6) }




what is the result?

A. The program runs and prints nothing.

B. The program runs and prints “Finally”.

C. The code compiles, but an exception is thrown at runtime.

D. The code will not compile because the catch block is missing.

Answer:b

try......catch......finally 的问题。程序中如果遇到 return ,则 finally 块先被执行,然后再执行 retrun ,而 finally 块后面的语句将不被执行。如果遇到 System.exit(1) ,则 finally 块及其后的语句都不执行,整个程序退出,还执行什么呀。
 

评分:0

我来说两句

我的栏目

日历

« 2024-04-27  
 123456
78910111213
14151617181920
21222324252627
282930    

我的存档

数据统计

  • 访问量: 7756
  • 日志数: 9
  • 建立时间: 2008-04-14
  • 更新时间: 2008-04-27

RSS订阅

Open Toolbar