javaSE語言基礎學習筆記

 這兩天看javaSE語言基礎,看到一些以前沒太注意的問題,在此記錄一下。

問題1:

package com.ccit.yichu;
public class LightSpeed {
    /**
     * 本實例主要測試整型變量的溢出
     * 本程序計算光1000天所走的公里數
     * 在本程序中將 second和distance的類型改成int程序不會報錯,但結果是-127631360,原因是:
     * 對於類的成員變量,整型變量的默認初始值爲0,但是在方法中聲明的局部變量沒有默認值,
     * 所以程序在編譯的時候他們並沒有被初始化,所以這是不存在溢出的問題,
     * 但是當程序運行時變量second和distance是int類型,無法表示25920000000000,發生了溢出,所以結果是錯的
     * @param args
     */
                                                                                                                                                                     
    public static void main(String[] args) {
        int speed=300000;
        int days=1000;
        long second;
        long distance;
        second=days*24*60*60*365;
        distance=speed*second;
                                                                                                                                                                         
        System.out.println("光1000天走"+distance+"公里");
    }
}


問題2:

package com.ccit.bijiao;
public class Denghao {
    /**
     * 本程序主要驗證"=="和"equals()"函數在進行字符串比較時是否等價
     * 結果是不等價的
     * 注:String不是基本類型,而是引用類型,所以兩個字符串相等(也就是"==")意味着兩個引用指向同一空間
     * 所以e和f儘管有長度相等,類型相同,值也相等,但是運算結果依然爲false
     * e.equals(f)意味着e和f長度相等,類型相同,值也相等,但不一定指向同一空間
     * @param args
     */
    public static void main(String[] args) {
        String a="aaa";
        String b="aaa";
        String c,d;
        c="aaa";
        d="aaa";
        String e=new String("aaa");
        String f=new String("aaa");
                                                                                                                                                                   
        System.out.println("a==b----------"+(a==b));
        System.out.println("a.equals(b)----------"+a.equals(b));
        System.out.println("c==d----------"+(c==d));
        System.out.println("c.equals(d)----------"+c.equals(d));
        System.out.println("e==f----------"+(e==f));
        System.out.println("e.equals(f)----------"+e.equals(f));
    }
}


問題3:

public class Test {
    /**本程序測試怎麼將結果輸出到文本文件中,要用到IO的知識
     * 課本中的意思是在dos命令中運行javac編譯java文件
     * 然後運行java來運行Test.class文件,
     * 格式爲:java Test>>F:\result.txt
     * 就可以將本程序的運行結果輸出到F:\result.txt中
     * 注意:本文件在默認包中的時候才能運行成功,
     * 對於Yest文件只能編譯成功但是不能運行,
     * 會報找不到類的異常。
     * 但是爲什麼會這樣,現在還不明白?!!
     *
     * @param args
     */
    public static void main(String[] args) {
        String a="hello world!";
                                                                                                                                                              
        System.out.printf(a);
    }
}

今天請教了老師上述問題,所以來做一下補充:

我的Yest.java(Test打錯了,呵呵)文件在com.ccit.print包下,所以用java運行.class文件的時候它就會自動去找com.ccit.print.Yest這個文件,所以我們在運行這個文件的時候應當在com的上一層目錄輸入:java com.ccit.print.Yest,這時就能成功運行。但是當我們進到com\ccit\print目錄下,再運行java Yest就會報錯。

然而當編譯的時候我們進入com\ccit\print目錄下輸入javac Yest.java就能編譯成功,如果我們在com的上層目錄輸入javac com.ccit.print.Yest.java就會報“找不到文件:com.ccit.print.Yest.java”的錯誤。

說完了,好囉嗦,呵呵。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章