<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-4  評論-4  文章-1  trackbacks-0

    1.關鍵字和保留字:
    abstract   boolean  break  byte  case  catch char  class  const  continue  default  do double   else extends  final   finally  float  for goto  if  implements  import  instanceof int  interface  long   native   new  package  private   protected public  return short static
    stricfp  super   switch synchronized  this throw enum throws transient  try void volatile  while assert
    其中很容易搞混或忽略的是:null、true、false、volatile、native、stricftp、assert、enum、synchronized 、transient、goto(保留字)、const(保留字)
    native:指出方法是與平臺相關的語言(如C)編寫的
    stricftp:用在方法或類的前面,指出在所有表達式中的浮點數將尊守嚴格的FP限制規定
    synchronized:指出方法只能同時被一個線程訪問  
    transient:防止字段被永遠串行化。當串行化對象時,總是跳過transient字段
    volatile:指出變量可能改變,失去同步,因為它被用在多個線程中。
    注意:
    (1)在java語言中,英文字母大小寫敏感。所以要注意所有的關鍵字與保留字都是小寫的,null是關鍵字,但NULL不是關鍵字;
    (2)注意true與false在java中也是關鍵字;
    (3)const:不要用于聲明常量,請使用public static finalgoto:在java語言中作為保留字,沒有使用,因為這個語句被認為是有害的.
    (4)注意SIZEOF\Friend不是java中的關鍵字,不要跟C++搞混。

    2.變量命名規則:每個變量的第一個字符必須是字母、美元符號或下劃線;特殊符號只能用$,其它特殊字符中有特殊用途的不能出現在字母中,如:+,-,/,*,@,%,^,&,~,#等。以下是正確命名:Java, _java, $java, my_java,java2.以下是錯誤命名:2java,@java,oh!,%java,java#,#java,^java, my-java,my=java等。

    3.整數類型:聯想8421碼就可以記住了。

    byte

    8-bit

            -128    ~

    +127

    Byte

    short

    16-bit

           -215      ~

    +215 – 1

    Short

    int

    32-bit

           -231     ~

    +231 – 1

    Integer

    long

    64-bit

           -263    ~

    +263 – 1

    Long

    值得注意的是八進制中不可用8和9兩個數字,如果用了,編譯將出錯,如:018,程序在編譯時就會出現“interger number too large"。所以沒事就不要打葷,在整數前面亂加0。

    4.在表達式中放大類型轉換是屬于自動類型轉換,而縮小類型轉換是強制類型轉換,但存在數據丟失的危險。道理很簡單,小水杯中的水倒進大水杯中肯定沒有任何安全問題,相反,大水杯的水倒進小水杯存在裝不了所有的水的危險。所以:byte->short->int->short->float->double 這樣的順序是屬于放大且自動類型轉換,而反過來就是縮小且需要強制類型轉換。一般的數據類型轉換中要注意的:char也可以放大且自動類型轉換成int;boolean數據類型無法轉換成其他幾各數據類型,而其他數據類型也無法轉換成boolean數據類型,切記!!
    注意:float f = 1.0; //報錯,1.0默認是double,縮小類型需要強制轉換,可改成float f = (float)1.0或float f = 1.0f; float f = 12;//正確,放大類型,int自動轉換為float.
    對于整數來講,通過算術表達式計算完的結果只會變成int類型!!Why ?因為怕運算后的結果會超出原來數據類型的范圍!!
    經典的面試題:
    short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1 += 1;有什么錯
    ?
    short s1 = 1; s1 = s1 + 1;
    s1+1 運算結果是 int 型,需要強制轉換類型)

    short s1 = 1; s1 += 1;
    (可以正確編譯)

    5.位運算符中:&,|,^,~,前三個可以兩邊都是數字或boolean,~不可為boolean,只能是數字: ~ aInt= -aInt - 1;int a 左移n位(放大)等價于a*2^n,右移n位(縮小)等價于a/2^n.

    6.swtch-case  只能接收byte、short、int和char類型變量的判斷,注意不可使用long類型,網上很多人都把long類型算進去,這是不對的,使用long類型編譯時會有報錯,至于為什么不可是long呢?(我現在也想不通,你有什么看法,請告知,謝謝!)除了這四個之外,其它的類型都不可用switch表達式中,簡言之,只有能夠自動轉換成int類型的數據類型才行。注意,單個case后面如果沒有break的話,程序會往下執行一直遇到break跳出switch.

    7.聲明一個數組的正確形式:int i[][] ; int[][] i; int[] i[];聲明當中不可確定具體的數組個數。如以下聲明是錯誤的形式:int i[3][]; int[3] i;int i[3][3]

    8.定義一個數組后,數組會自動初始化為相應的類型初始值,int[] a = new int[5];
    a[3] = 0; char[] c = new char[5];c[3] = '\u0000'(終端輸出時是空白行)。類中方法級的變量必須先初始化。不然不可以使用,哪怕是Sytem.out.println(string)這樣的方法。但數組除外,在方法級中可以直接使用,因為JVM會自動先初始化數組,所以是安全的。說到這,涉及到初始化的問題:
    e.g.
    public class Test {
        String s2;
        static String s3;
        public Test() {
            System.out.println(s2); //正確,類中屬性會自動初始化為null
        }

        public static void main(String[] args) {
            String s1;
            System.out.println(s1); //編譯錯誤,s1未初始化。

            char[] c = new char[5];
            System.out.println(c[3]);//正確,數組已先初始化

            System.out.println(s3);//正確,靜態String類型初始化為null 
            System.out.println(s2); //編譯錯誤,靜態方法不可調用非靜態屬性
        }
    }

    9.調用equals()方法時要注意的地方:如果自定義類時沒有overide Object里面的方法equals()那么調用equal()時將默認調用 Object里面的equals().同樣,這跟hasCode()和toString()方法也有類似的情況。
    e.g.
    (1)沒有改寫equals()方法時:
    public class Test {
        int i;
        public static void main(String[] args) {
            Test t1 = new Test();
            Test t2 = new Test();
            t1.i = t2.i= 100;
            System.out.println(t1.equals(t2)); //輸出false
        }
    }
    (2)改寫equals()方法后:
    public class Test {
        int i;
        public boolean equals(Object obj) {
            Test aInt = (Test)obj;
            return this.i == aInt.i;
        }
        public static void main(String[] args) {
            Test t1 = new Test();
            Test t2 = new Test();
            t1.i = t2.i= 100;
            System.out.println(t1.equals(t2)); //輸出true
        }
    }
    這是為什么呢?難道Ojbect里面的方法equals()就沒有實現比較功能嗎?我們可以用JDK源代碼里看看Object里的equals()是怎樣寫的:   
    public boolean equals(Object obj) {
     return (this == obj); 
    }
    // 注意這里是比較是否同一個引用!上例中由于t1和t2不是同一個引用,所以就會返回false了。但如果不是自定義類,而是一個封裝類,比如Integer類里面是實現了equals()方法了的,那么如果對象中的值若相等的話,用equal()方法比較就會相等。
    e.g
    public class Test {
        public static void main(String[] args) {
            Integer aInt = new Integer(100);
            Integer bInt = new Integer(100);
            System.out.println(aInt.equals(bInt)); //true
        }
    }
    why? 看看Interger類的源代碼就清楚了:
    public boolean equals(Object obj) {
            if (obj instanceof Integer) {
                return value == ((Integer)obj).intValue();
            }
            return false;
    }
    這個問題對于初學者是最容易搞混的。建議看到類似的程序看看JDK的源代碼,我覺得,這時看源代碼反而比看幫助文檔來得更直接了當,也更容易明白個中源由。

    .......待續

    posted on 2007-03-24 15:50 心中海 閱讀(631) 評論(0)  編輯  收藏 所屬分類: J2SE
    主站蜘蛛池模板: 中文字幕精品无码亚洲字| 伊人亚洲综合青草青草久热| 18gay台湾男同亚洲男同| 中文字幕无码日韩专区免费| 在线亚洲精品自拍| 中文字幕视频在线免费观看| 亚洲精品白浆高清久久久久久| 中文字幕免费视频精品一| 国产l精品国产亚洲区在线观看| 97人妻精品全国免费视频 | 亚洲六月丁香六月婷婷蜜芽| 无码国产精品一区二区免费16| 亚洲一区二区三区夜色| 91免费播放人人爽人人快乐| 亚洲色大成网站www| 免费jjzz在线播放国产 | 暖暖在线视频免费视频| 亚洲尹人香蕉网在线视颅| 欧洲乱码伦视频免费| 亚洲AV无码一区二区三区性色 | 国产精品一区二区三区免费| 亚洲午夜久久久影院伊人| 三年片在线观看免费大全电影| 亚洲成人免费在线观看| 免费观看一级毛片| 国产精品偷伦视频免费观看了| 亚洲国产综合精品中文第一区| 无码中文字幕av免费放| 美景之屋4在线未删减免费 | 久操免费在线观看| 亚洲一区二区三区91| 四虎免费久久影院| 无码人妻AV免费一区二区三区| 亚洲砖码砖专无区2023| 狠狠亚洲狠狠欧洲2019| 国产在线观看免费观看不卡| 无码的免费不卡毛片视频| 亚洲黄色片免费看| 亚洲成a人片在线播放| 国产成人免费在线| 一道本不卡免费视频|