Java认证之精辟总结

类别:Java 点击:0 评论:0 推荐:
Java认证之精辟总结

  1.switch里面只能是short,int,char,byte的. 
  2.if (a="a") 编译错, if(a=false)编译ok,原因是a=false的a代表了个boolean值
  3.这种写法Outer.Inner i = new Outer().new Inner(); OK!
  4.文件里, 8 默认是int, 8.0默认是double
  5.八进制是 0开头,不是O(英文o)
  6.byte -128~127 ,-128是二进制的多少?
  7. -1>>32还是-1, -1>>>32为什么还是-1?
  8. char c='c'; String s ="s"; s+=c;结果是 sc!!!
  9. boolean b1=true; boolean b2=true; System.out.println(b1|b2); 结果是true.编译没错!
  10.java的默认import包有哪些?

  
类和对象(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

本文地址:http://com.8s8s.com/it/it15790.htm