您现在的位置: IT技术文档中心 >> 文档资源 >> 编程语言及开发环境 >> Java >> 文档正文
Java认证之精辟总结
作者:未知 文章来源:互联网 点击数: 更新时间:2007-7-19 1:53:00
3.switch里面只能是short,int,char,byte的.
4.if (a="a") 编译错, if(a=false)编译ok,原因是a=false的a代表了个boolean值
6.这种写法Outer.Inner i = new Outer().new Inner(); OK!
7.文件里, 8 默认是int, 8.0默认是double
8.八进制是 0开头,不是O(英文o)
9.byte -128~127 ,-128是二进制的多少?????????????
11. -1>>32还是-1, -1>>>32为什么还是-1???????????????????
12. char c=´c´; String s ="s"; s+=c;结果是 sc!!!
13. boolean b1=true; boolean b2=true; System.out.println(b1|b2); 结果是true.编译没错!
?????java的默认import包有哪些???????
AWT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. 所有组件flowLayout会被压缩为它们的最小尺寸
2. BorderLayout的North,South,West,East,Center就是这个样子,四个单词大小写区分,必须这么写,否则错?????????
2.1如果只是add,而不写东南西北中,默认是中
2.2如果不加component到中,那中就空着
2.3如果某个方位有个component,如果你还往上面加component,后来的会覆盖原来的
3. applet,panel默认布局是flowlayout
4. frame,dialog默认布局是borderlayout
5. 各种awe类的继承关系,frame,window,component,...??????????
6. window,frame,dialog不能被嵌入到容器里.注意:window!
7. action event作用于button和textfeild的回车时刻
8. item event作用于list,choice,checkbox的选择改变时刻
9. 如果容器不可见,新layout管理器后前的component将跟随这个新的layout变化,如果容器可见,这些component将不受后来的layout影响
10.gridLayout里的component尺寸一样
11.gridBagLayout里,component可以占用多个grid
12.System.exit();在Applet里面不允许调用.
AWT事件
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.事件类有
(symantic)语义事件:ActionEvent,AdjustEvent,ItemEvent,TextEvent
低级事件:ComponentEvent,ContainerEvent,FocusEvent,InputEvent,KeyEvent,MouseEvent,PaintEvent,WindowEvent
2.监听器:
ActionListener,AdjustListener,CompentListener,ContainerListener,FocusListener,ItemListener,
KeyListener,MouseListener,MouseMotionListener,TextListener,WindwosListener, 共11个Listener,
七个adpter,少的4个是ActionLisenter,AdjustListener,ItemListener,TextListener,它们只有一个方法.
3,鼠标MouseListener有5个方法:clicked,pressed,released,entered,exited
4.鼠标MouseMotionListener有2个方法:mouseDragged,mouseMoved

类和对象(Class and Object)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0.最外层的类可以声明成final: "$file a":< final class a{}> ok!,但是不能是private和static的.
1.overload是同类里同样的方法名,override是父子的继承
2.override的返回结果必须一样,否则编译错哦
The return type of an overriding method is identical to the return type of the method it overrides.
2.1 override的modifier可以扩大,但是不能缩小.比如父类private void test(){} 子类:public void test(){} ,没问题;如果反了,就死翘翘了!
3.super.super(),靠,错的,没这么写的
4.static和非static之间永远无法override!
5. 看程序
public class A{
void test1() throws BaseEx{hi();}
void hi(){System.out.println("say hi,a");}
}
class AA extends A{
void hi(){System.out.println("say hi,aa");}
}
class test{
static void main(String b[]) throws Exception{
A a = new AA();
a.test1();
}
}
结果是,"say hi,aa",这说明什么?说明,方法永远跟着类的原来面目走;而,变量恰恰相反!
6.一个非抽象方法死活也别想override成一个抽象方法
7.override的子类的方法抛出的的异常只能是父类方法抛出异常的子异常类,或者无!
8.构造器不能是native,final,static,synchronized的,可以是public,private,什么都没有的,呵呵
9.构造器函数里还可以写return呢,但后面什么都不许有,甚至null(这不是废话吗,哈哈)
10.构造器不能返回值.这大家都知道,但如果有个"构造器"反值了,别紧张,它就不是构造器喽,只是个普通函数
11.super();this();这两个函数只能在构造函数里调用.
12,成员变量声明时候赋值,比构造函数还早.int i=1; ealier than Test(){}
13.方法的参数变量可以是final.
14. hashCode返回一个int
15. void wait() throws InterruptException wait扔InterruptException异常
16. java.lang.Void 是void的包装类
17. Byte,Interger,Double...所有的跟数有关的包装类都是继承于Number

接口Interface)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.接口的所有方法默认都是public,abstract和non-static的
2.接口的所有变量默认都是public,static,final的.所以,接口的变量不能改值,在它的实现类里.
3.接口的实现类实现的方法必须和接口的方法抛出同样的异常,不许是子类,这和override不一样!同样,如果接口方法没有抛,实现方法也不能抛.
4.实现类实现的方法必须显式的声明成public,什么都不写都不行,啊!!!
5.接口不能声明成final,要不它怎么被实现呢(这好像又是废话啊
6.一个类实现两个接口,如果两个接口有相同的方法,实现类就实现这个方法,没问题的.
内嵌类Inner Class)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.内嵌类可以访问outer类的任何变量,包括私有的.
2.静态inner类,只能访问outer类的任何static变量
2.1内嵌类可以是final,abstract的
3.我靠,方法内的内嵌类不能为static: void test(){ static class A{}} XXXXX!!!!
4.我靠,方法内的内嵌类也不能带任何modifier,void test(){ public class A{}} XXXXX!!!!
5.我靠,方法内的内嵌类只能访问方法内的final变量,但是,可以访问outer类的任何变量.
6.匿名类不能有构造器,但声明时候带参数,相当于构造器的参数传递.
class ABC{}
class ABCD{private ABCD(int i){}}
ABC test3(){return new ABC(){};}
ABCD test4(){return new ABCD(3){};}
interface iii{}
iii test5(){return new iii(){};}
//class BCD extends ABCD{} compile error,因为,
看上面就知道,new iii(){};实际上匿名类实现了iii接口;new ABC(){};实际上是匿名类继承了ABC.
8.???
class A {private A(){System.out.println("a!");}}
class B extends A{}
我靠,没错!B实例的时候会主动调用父类A的构造,即使是private的,看来也没问题!!!
9.内部类可以有synchronized方法,那么锁是这个内部类,跟外部类没一点关系,内外分别的,在锁的问题上.
10.外部类不能通过this被访问,this这时候应该指的是内部类,享用外部类的成员就直接用,不用加任何限定词
11.如何用this呢?请看:
class Outer{ int i;
class Inner{
class InnerInner{
void Test(){
Outer.this.i=1;
}
}
}
}
看见了吧,类名.this.变量名,可以引用到i,第一次看到吧,嘿嘿,孤陋寡闻.
12.注意这两种写法都可以
Class Outer.Inner i = new Outer().new Inner();
或者, Class o= new Outer(); Class Outer.Inner i=o.new Inner();
线程Thread)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
?????去看Thread的API!!!!
1.线程启动必须通过start函数.
2.run函数不许也只能是public的.
3.线程有优先级从1到10,通过Thread.setPriority(int);来改变,不能超过10,否则会出现运行异常
4.线程优先级默认是5,即NORM_PRIORITY.????????NORM_PRIORITY是Thread的静态变量吗?
5.????Thread.yeild();是静态方法,所以,使用格式是Thread.yield();她强迫当前的进程放弃CUP.
6.sleep(1000),是说线程睡觉1秒,然后,进入Ready状态,注意,不是运行状态,它还要等OS来调度来获得CUP.

java.lang.*;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.数组的科隆: int ia[][]={{1,2},null}; int ib[][]=(int[][])ia.clone();
2.什么是NaN?????然后看ceil(NaN),floor(NaN),...
3.Math.floor(-1.1f);//-2.0
Math.ceil(-1.1f);//-1.0
Math.round(-1.6d)//-2
4.0= 5.Math,Interger,Boolean...等类型包装类都是final的,不可继承
6.int round(float); long round(double);唉,round永远返回不了小数点
7.static double ceil(double)
8.static double floor(double)注意,ceil,floor的只有这个double版本,什么都转成double!
9.static double sin(double 弧度); 还有cos,tan
10. new String; ?可以是byte[];char[];String;StringBuffer
11. String的一些函数: int length(); char charAt(int); String toUpperCase(); String toLowerCase();
12. String("Abc").equals(String("abc"))不相等的,不然就不会有boolean equalsIgnoreCase(String)函数
13."012345678"是一个串的顺序号码,indexOf(´1´),indexOf("1")都返回1,subString(1,5)是2345,嘿嘿:是"[)"的感觉
14, trim()连tab都退毛,"\t\n java ",trim()一下就只剩下"java"了
15. 关于对象的科隆,去喳喳API??????????????????????
16. "abcd".trim(),"abcd" + new String("ef")都是合理的写法
17. StringBuffer的3个构造器: ()初始化容量为16,(int 初始化容量),(String),初始化容量为串长加上16
18. StringBuffer的一些函数: String toString(); append();reverse();insert();delete(int start,int end);deleteCharAt(int);setLength(int newLength);
19. String s=""; StringBuffer sb=new StringBuffer(); if (s==sb){}编译错!因为,s,sb类型不一样,不能比较
集合:
1.各接口和类的关系,只有最后一个是类
Collection:List:vector,ArrayList,LinkedList
Map:SortedMap:TreeMap
Collection:Set:SortedSet:TreeSet
Map:HashTable
Collection:Set:HashSet
基础Base)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.java application的main可以不是public的.但必须是static的
2.一个文件只能有一个public类,而且还得跟文件名一样,包括大小写
3.变量只能是字母,$,_开头,接下来的第二个可以是,数字
4.ch\u0061r=´a´; char \u0063=´b´; char c=´\u0063´;都是合法的
5.1e-5d,合法.e-5d不合法,必须有前面的系数
6.int[] i[]={null{1,2}}正确! int i[]={1,2,3,} 正确!","和没有的效果一样
7.局部array,跟变量一样,使用前要初始化
8.main方法可以为final
操作符和分配符(Operator and Assignment)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.System.out.printl(1+2+"3");//33 System.out.printl("1"+2+3);//123
2.int i=0; i=i++;i=i++;i=i++; 结果,i=0!
3.int i[]; index=0; i[index]=index=5; 结果是,i[0]=5;!!!
4.byte b=10;可以,因为,10可以被自动从int转成byte
5.接下来,byte b=b+10;不可以!!因为,10+b后的int无法被自动从int转成byte,问我,我也不知道为什么!靠!
6.byte b1 = 4; byte b2 = 6; b1 = b1 + b2;错!编译错!b1 + b2后,必须强制转成byte,b1x1+b2);
7.XOR 一样的为0,不一样为1 1,1=0;0,0=0;1,0/0,1=1
8. x == Float.NaN编译错,应该是Float.IsNaN
9. x == Double.POSITIVE_INFINITY编译可以
10.-1是1111.... 1111,<<永远右补零,>>正补零,负补一,>>>恒补零
10.1 -1>>多少位都是-1 ; 1<<31变成了最小负数,1000....0000
11.最大正数是01111....1111
12.最小负数是1000....0000(-2147483648)
13. a instanceof b,b必须是类/接口,不能是实例
--------补充------------------------------
1. byte,short,char 都存在 var = -var;编译错误,因为,这时候的-var已经自动转成个int类型了
2. int/0会扔出ArithmeticException
double,float/0得INF或者-INF
0/0得NaN
3. int a-b-c;是不符合命名规则的变量名????编译会出错.
4. char a=´\u0001´;对! char b=\u0001;编译错!
5. boolean b1,b2,b3,b4,b5;
b1 = b2==b3;
b1 = b2<=b3 && b4==b5;
b1 = b2==b3==true
都是对的!靠!变态!
b1 = b2==b3==b4 XXXXXXX编译错!
6. 1>>1 是0
7. %= <<= =>> =>>>都是合法符号
8. --1-10*4 这种写法没错,就是 (--1)-10*4
9. k=1;++k + k++ + +k ;结果是7,相当于 (++2)+(2++)+(+3)
10.标号不能标示声明.
hi:
if {
break hi;
//break hi1;不行,不能向后调转
}
//hi1:不行,不能放在声明前
int i;
hi1:
i=1;
11.public static void main(String s[]) throws Exception{}可以噢,main可以扔出异常
12. hi:
if(b==true){break hi;}
break 标号,可以用在if里面.别的任何都不行,包括break,continue 标号.
13.int x = i*-j; 我靠,没问题的!!!编译没错! int x = i*j++ + +i++; 这个也没问题,
变量修饰符(Modifier)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.最外面一层的类不能声明成protect和pravite的
2.同一个类的两个实例之间可以访问彼此的私有方法和私有变量,酷
3.protect和无修饰符的具体区别???????关于外包可以访问被子类访问的是哪个?
4.成员变量被修饰成final后,必须声明时候就赋初值或者在构造器里面赋初值,别指望她可以得到default值.
5.抽象方法不能是static的!!!
6.静态方法将随着类的变化而变化,看例子:
class Parent{
static void test(){System.out.println("hi,parent")};
}
class Child extends Parent{
static void test(){System.out.println("hi,child")};
}
Parent p = new Child();
p.test(); //打出来的是hi,parent!
7.静态方法可以通过类的实例调用.
new Child().test(); 和 Child.test(); 都OK!
8.transient只能用在类的成员变量上,不能用在方法里.
9.transient变量不能是final和static的
10.native方法可以是private,abstractd的
流程控制
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1。不可到达的语句声明为错:while(false){} ;for(;false{};if(false){}都无法编译
2。for(第一部分;的第一部分可以用来声明或者赋值,但不能两者都
3。byte b; switch { case 200: // 200 not in range of byte,因为200超过b的范围,将编译错误
4。带标签的continue回达到标签的位置,从新进入紧接在标签后面的循环
5。带标签的break会中断当前循环,并转移到标签标示的的循环的末尾
转型和上溯(Converting and Casting)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Binary operators convert the smaller(less precise) operand to the type of the larger(more precise) operand.
All operators will convert things smaller than ints to ints or larger. This includes char ´s!
1.byte,char,short默认转成int
2.byte->short->int->long->float->double
char^
这是默认可以转型的方向,反了必须要显式cast! 特别注意:long->float是默认的,别看long64,float32,嘿嘿
还有就是看得出来,char和 byte,short之间无法互相默认转换
3.float f=1/3; OK!float f=1.0/3.0;编译出错,因为1.0/3.0结果是double的,噢噢~,错喽!!
4.int i=1; byte b=i;错!需要显式cast.
final i=1; byte b=i;就ok! 我也不知道为什么,final就可以.而且,据我实验只有int和byte的关系这样,其他不行.
5.int i[]; Object[] obj=i;错! Object obj=i;对! 数组只能转成Object,而不能是Object[]
6.int i[]; Object[] obj;i=(int[])obj; 对! 对象可以通过显式来转成一个数组.

I/O
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.File类的一些重要方法:isFile();isDirectory();String[] list();exists();getAbsolutePath();getParent();
2.通过delete();mkdir();rename(File newname);可以操纵文件,但是却改变不了文件的内容
2.1 File类无法改变当前目录,除非重新创建一个File对象.
3.InputStreamReader(InputStream in,String encodingName);
OutputStreamReader(OutputStream in,String encodingName);
Encoding: 8859_1是Latin-1,包含ASCII
4.关闭close一个流,就自动调用了flush.
5.System.in,System.out,System.err,由JVM自动创建
6.RandomAccessFile(File file,String mode);mode有,r,rw
 
  • 上一篇文档:
  • 下一篇文档:
  • 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 版权申明 | 雁过留声 | 会员中心 |