博客 / 詳情

返回

Y 分鐘速成 Java

源代碼下載: LearnJava-zh.java

Java 是一個通用的程序語言, 包含併發, 基於類的面向對象等特性閲讀更多

// 單行註釋
/*
多行註釋
*/
/**
JavaDoc(Java文檔)註釋是這樣的。可以用來描述類和類的屬性。
*/

// 導入 java.util中的 ArrayList 類
import java.util.ArrayList;
// 導入 java.security 包中的所有類
import java.security.*;

// 每個 .java 文件都包含一個public類,這個類的名字必須和這個文件名一致。
public class LearnJava {

    // 每個程序都需要有一個main函數作為入口
    public static void main (String[] args) {

        // 使用 System.out.println 來輸出到標準輸出
        System.out.println("Hello World!");
        System.out.println(
            "Integer: " + 10 +
            " Double: " + 3.14 +
            " Boolean: " + true);

        // 如果要在輸出後不自動換行,可以使用System.out.print方法。
        System.out.print("Hello ");
        System.out.print("World");


        ///////////////////////////////////////
        // 類型與變量
        ///////////////////////////////////////

        // 用 <type> <name> 來聲明變量
        // 字節類型 - 8位補碼錶示
        // (-128 <= 字節 <= 127)
        byte fooByte = 100;

        // 短整型 - 16位補碼錶示
        // (-32,768 <= 短整型 <= 32,767)
        short fooShort = 10000;

        // 整型 - 32位補碼錶示
        // (-2,147,483,648 <= 整型 <= 2,147,483,647)
        int fooInt = 1;

        // 長整型 - 64位補碼錶示
        // (-9,223,372,036,854,775,808 <= 長整型 <= 9,223,372,036,854,775,807)
        long fooLong = 100000L;
        // L可以用來表示一個數字是長整型的。
        // 其他的數字都默認為整型。

        // 注意:Java中沒有無符號類型

        // 浮點型 - 即 IEEE 754 規定的32位單精度浮點類型
        float fooFloat = 234.5f;
        // f用來表示一個數字是浮點型的。
        // 否則會被默認當做是雙精度浮點型。

        // 雙精度浮點型 - 即 IEEE 754 規定的64位雙精度浮點類型
        double fooDouble = 123.4;

        // 布爾類型 - true 與 false
        boolean fooBoolean = true;
        boolean barBoolean = false;

        // 字符類型 - 16位 Unicode編碼字符
        char fooChar = 'A';

        // 用 final 可以使一個常量不可更改
        final int HOURS_I_WORK_PER_WEEK = 9001;

        // 字符串
        String fooString = "My String Is Here!";

        // \n 代表一個新的換行
        String barString = "Printing on a new line?\nNo Problem!";
        // \t 代表一個新的製表符
        String bazString = "Do you want to add a tab?\tNo Problem!";
        System.out.println(fooString);
        System.out.println(barString);
        System.out.println(bazString);

        // 數組
        // 數組在聲明時大小必須已經確定
        // 數組的聲明格式:
        //<數據類型> [] <變量名> = new <數據類型>[<數組大小>];
        int [] intArray = new int[10];
        String [] stringArray = new String[1];
        boolean [] booleanArray = new boolean[100];

        // 聲明並初始化數組也可以這樣:
        int [] intArray = {9000, 1000, 1337};

        // 隨機訪問數組中的元素
        System.out.println("intArray @ 0: " + intArray[0]);

        // 數組下標從0開始並且可以被更改
        intArray[1] = 1;
        System.out.println("intArray @ 1: " + intArray[1]); // => 1

        // 其他數據類型
        // ArrayLists - 類似於數組,但是功能更多,並且大小也可以改變
        // LinkedLists
        // Maps
        // HashMaps

        ///////////////////////////////////////
        // 操作符
        ///////////////////////////////////////
        System.out.println("\n->Operators");

        int i1 = 1, i2 = 2; // 多重聲明可以簡化

        // 算數運算
        System.out.println("1+2 = " + (i1 + i2)); // => 3
        System.out.println("2-1 = " + (i2 - i1)); // => 1
        System.out.println("2*1 = " + (i2 * i1)); // => 2
        System.out.println("1/2 = " + (i1 / i2)); // => 0 (0.5 truncated down)

        // 取餘
        System.out.println("11%3 = "+(11 % 3)); // => 2

        // 比較操作符
        System.out.println("3 == 2? " + (3 == 2)); // => false
        System.out.println("3 != 2? " + (3 != 2)); // => true
        System.out.println("3 > 2? " + (3 > 2)); // => true
        System.out.println("3 < 2? " + (3 < 2)); // => false
        System.out.println("2 <= 2? " + (2 <= 2)); // => true
        System.out.println("2 >= 2? " + (2 >= 2)); // => true

        // 位運算操作符
        /*
        ~       取反,求反碼
        <<      帶符號左移
        >>      帶符號右移
        >>>     無符號右移
        &       和
        ^       異或
        |       相容或
        */

        // 自增
        int i = 0;
        System.out.println("\n->Inc/Dec-rementation");
        // ++ 和 -- 操作符使變量加或減1。放在變量前面或者後面的區別是整個表達
        // 式的返回值。操作符在前面時,先加減,後取值。操作符在後面時,先取值
        // 後加減。
        System.out.println(i++); // 後自增 i = 1, 輸出0
        System.out.println(++i); // 前自增 i = 2, 輸出2
        System.out.println(i--); // 後自減 i = 1, 輸出2
        System.out.println(--i); // 前自減 i = 0, 輸出0

        ///////////////////////////////////////
        // 控制結構
        ///////////////////////////////////////
        System.out.println("\n->Control Structures");

        // If語句和C的類似
        int j = 10;
        if (j == 10){
            System.out.println("I get printed");
        } else if (j > 10) {
            System.out.println("I don't");
        } else {
            System.out.println("I also don't");
        }

        // While循環
        int fooWhile = 0;
        while(fooWhile < 100)
        {
            //System.out.println(fooWhile);
            //增加計數器
            //遍歷99次, fooWhile 0->99
            fooWhile++;
        }
        System.out.println("fooWhile Value: " + fooWhile);

        // Do While循環
        int fooDoWhile = 0;
        do
        {
            //System.out.println(fooDoWhile);
            //增加計數器
            //遍歷99次, fooDoWhile 0->99
            fooDoWhile++;
        }while(fooDoWhile < 100);
        System.out.println("fooDoWhile Value: " + fooDoWhile);

        // For 循環
        int fooFor;
        //for 循環結構 => for(<起始語句>; <循環進行的條件>; <步長>)
        for(fooFor=0; fooFor<10; fooFor++){
            //System.out.println(fooFor);
            //遍歷 10 次, fooFor 0->9
        }
        System.out.println("fooFor Value: " + fooFor);

        // Switch Case 語句
        // switch可以用來處理 byte, short, char, 和 int 數據類型
        // 也可以用來處理枚舉類型,字符串類,和原始數據類型的包裝類:
        // Character, Byte, Short, 和 Integer
        int month = 3;
        String monthString;
        switch (month){
            case 1:
                    monthString = "January";
                    break;
            case 2:
                    monthString = "February";
                    break;
            case 3:
                    monthString = "March";
                    break;
            default:
                    monthString = "Some other month";
                    break;
        }
        System.out.println("Switch Case Result: " + monthString);


        ///////////////////////////////////////
        // 類型轉換
        ///////////////////////////////////////

        // 數據轉換

        // 將字符串轉換為整型
        Integer.parseInt("123");//返回整數123

        // 將整型轉換為字符串
        Integer.toString(123);//返回字符串"123"

        // 其他的數據也可以進行互相轉換:
        // Double
        // Long
        // String

        // 類型轉換
        // 你也可以對java對象進行類型轉換, 但其中會牽扯到很多概念
        // 在這裏可以查看更詳細的信息:
        // http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html


        ///////////////////////////////////////
        // 類與函數
        ///////////////////////////////////////

        System.out.println("\n->Classes & Functions");

        // (Bicycle類定義如下)

        // 用new來實例化一個類
        Bicycle trek = new Bicycle();

        // 調用對象的方法
        trek.speedUp(3); // 需用getter和setter方法
        trek.setCadence(100);

        // toString 可以把對象轉換為字符串
        System.out.println("trek info: " + trek.toString());

    } // main 方法結束
} // LearnJava 類結束


// 你也可以把其他的非public類放入到.java文件中


// 類定義的語法:
// <public/private/protected> class <類名>{
//    //成員變量, 構造函數, 函數
//    //Java中函數被稱作方法
// }

class Bicycle {

    // Bicycle 類的成員變量和方法
    public int cadence; // Public: 任意位置均可訪問
    private int speed;  // Private: 只在同類中可以訪問
    protected int gear; // Protected: 可以在同類與子類中訪問
    String name; // default: 可以在包內訪問

    // 構造函數是初始化一個對象的方式
    // 以下是一個默認構造函數
    public Bicycle() {
        gear = 1;
        cadence = 50;
        speed = 5;
        name = "Bontrager";
    }

    // 以下是一個含有參數的構造函數
    public Bicycle(int startCadence, int startSpeed, int startGear, String name) {
        this.gear = startGear;
        this.cadence = startCadence;
        this.speed = startSpeed;
        this.name = name;
    }

    // 函數語法:
    // <public/private/protected> <返回值類型> <函數名稱>(<參數列表>)

    // Java類中經常會用getter和setter來對成員變量進行操作

    // 方法聲明的語法:
    // <作用域> <返回值類型> <方法名>(<參數列表>)
    public int getCadence() {
        return cadence;
    }

    // void返回值函數沒有返回值
    public void setCadence(int newValue) {
        cadence = newValue;
    }

    public void setGear(int newValue) {
        gear = newValue;
    }

    public void speedUp(int increment) {
        speed += increment;
    }

    public void slowDown(int decrement) {
        speed -= decrement;
    }

    public void setName(String newName) {
        name = newName;
    }

    public String getName() {
        return name;
    }

    //返回對象屬性的方法
    @Override
    public String toString() {
        return "gear: " + gear +
                " cadence: " + cadence +
                " speed: " + speed +
                " name: " + name;
    }
} // Bicycle 類結束

// PennyFarthing 是 Bicycle 的子類
class PennyFarthing extends Bicycle {
    // (Penny Farthings 是前輪很大的 Bicycle, 並且沒有齒輪)

    public PennyFarthing(int startCadence, int startSpeed){
        // 通過super調用父類的構造函數
        super(startCadence, startSpeed, 0, "PennyFarthing");
    }

    // 你可以用@註釋來表示需要重載的方法
    // 瞭解更多的註釋使用方法,可以訪問下面的地址:
    // http://docs.oracle.com/javase/tutorial/java/annotations/
    @Override
    public void setGear(int gear) {
        gear = 0;
    }

}

更多閲讀

下面的鏈接只是為了便於大家理解這些主題而給出的,對於具體的例子請大家自行Google

其他主題:

  • Java 官方教程
  • Java 訪問修飾符
  • 面向對象程序設計概念:

    • 繼承
    • 多態
    • 抽象
  • 異常
  • 接口
  • 泛型
  • Java代碼規範

有建議?或者發現什麼錯誤?在 Github 上開一個issue,或者發起 pull request!


原文由 Jake Prather 編寫,並由 0 個好心人 修改。
Translated by: Chenbo Li
© 2022 Jake Prather
本作品採用 CC BY-SA 3.0 協議進行許可。

user avatar zzd41 頭像 air_clou_d 頭像 y_lucky 頭像 tyhan 頭像 chamson_5eb23538190b0 頭像
5 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.