java采用Unicode自符编码,一个char自符占两个字节.

解决方案 »

  1.   

    OOP的三种机制,各自的特点,还有如何实现一个带有事件处理的GUI,线程方面是否清楚呢?
      

  2.   

    接口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=<double random()<1
    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必须是类/接口,不能是实例
      

  3.   

    --------补充------------------------------
    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