# [X分鐘速成Y](http://learnxinyminutes.com/)
## 其中 Y=java
源代碼下載:?[LearnJava-zh.java](http://learnxinyminutes.com/docs/files/LearnJava-zh.java)
Java是一個通用的程序語言, 包含并發, 基于類的面向對象等特性?[閱讀更多](http://docs.oracle.com/javase/tutorial/java/index.html)
~~~
// 單行注釋
/*
多行注釋
*/
/**
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 [] y = {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 Bi450635425cycle() {
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返450635425回值函數沒有返回值
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 官方教程](http://docs.oracle.com/javase/tutorial/index.html)
* [Java 訪問修飾符](http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)
* [面向對象程序設計概念](http://docs.oracle.com/javase/tutorial/java/concepts/index.html):
* [繼承](http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)
* [多態](http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html)
* [抽象](http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html)
* [異常](http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html)
* [接口](http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html)
* [泛型](http://docs.oracle.com/javase/tutorial/java/generics/index.html)
* [Java代碼規范](http://www.oracle.com/technetwork/java/codeconv-138413.html)