最近看很多算法書,比較不錯的有不少都是java語言描述,所以用一天時間快速研究并整理java? ,參考資料:java入門經典
Call this file "Example2.java".
class Example2 {
public static void main(String args[]) {
int a; //聲明變量
a = 100; //賦值
if(a = 100) print(a); // if(condition) statement;
int x ;
char y = 'x';
byte z = 22;
int d = 3, e, f = 5;
for(x = 0; x<10; x = x+1) // for(initialization; condition; iteration) statement;
System.out.println("This is x: " + x);
}
}
java文件名和類名要相同,運行Java解釋器實際上是指定你想要解釋器運行的類的名字,它會自動搜索包含該名字且帶有.class擴展名的文件。如果找到,它將運行含在該指定類中的代碼。
所有的Java應用程序都通過調用main( )開始執行。關鍵字public是一個訪問說明符(access specifier),它允許程序員控制類成員的可見性。如果一個類成員前面有public,則說明該成員能夠被聲明它的類之外的代碼訪問(與public相對的是private,它禁止成員被所屬類之外的代碼訪問)。在本例中,main( )必須被定義為public類型因為當程序開始執行時它需要被它的類之外的代碼調用。
關鍵字static允許調用main( )而不必先實現該類的一個特殊實例
關鍵字void僅通知編譯器main()不返回任何值
Java是區分大小寫的。
即使一個方法不需要參數,你仍然需要在方法名后面放置一對空括號。main( )僅是解釋器開始工作的地方。一個復雜的程序可能包含幾十個類,但這些類僅需要一個main( )方法以供解釋器開始工作。
java?數據類型
整數:該組包括字節型(byte),短整型(short),整型(int),長整型(long),
它們有符號整數。
浮點型數:該組包括浮點型(float),雙精度型(double),它們代表有小數精度
要求的數字。
字符:這個組包括字符型(char),它代表字符集的符號,例如字母和數字。
布爾型:這個組包括布爾型(boolean),它是一種特殊的類型,表示真/假值。
在Java中,字符串實際上是對象類型。因為Java對字符串是作為對象實現的,因此,它有廣泛的字符串處理能力,而且功能既強又好用。
變量作用域和生存期
大多數其他計算機語言定義了兩大類作用域:全局和局部。在JAVA中不適用。
程序塊被包括在一對大括號中。一個程序塊定義了一個作用域(scope)。這樣,你每次開始一個新塊,你就創建了一個新的作用域。你可能從先前的編程經驗知道,一個作用域決定了哪些對象對程序的其他部分是可見的,它也決定了這些對象的生存期。
方法定義的作用域以它的左大括號開始。但是,如果該方法有參數,那么它們也被包括在該方法的作用域中。?if?for?這些都是方法。
作為一個通用規則,在一個作用域中定義的變量對于該作用域外的程序是不可見。
作用域可以進行嵌套。例如每次當你創建一個程序塊,你就創建了一個新的嵌套的作用域。這樣,外面的作用域包含內部的作用域。這意味著外部作用域定義的對象對于內部作用域中的程序是可見的
變量在其作用域內被創建,離開其作用域時被撤消。
如果一個聲明定義包括一個初始化,那么每次進入聲明它的程序塊時,該變量都要被重新初始化
類型轉換
下列2個條件都能滿足將一種類型的數據賦給另外一種類型變量時,將執行自動類型轉換
這2種類型是兼容的。
目的類型數的范圍比來源類型大
例如,int型的范圍比所有byte型的合法范圍大,因此不要求顯式強制類型轉換語句
對于拓寬轉換,數字類型,包括整數(integer)和浮點(floating-point)類型都是彼此兼容的
數字類型和字符類型(char)或布爾類型(bollean)是不兼容的
不兼容類型的強制轉換
int a;
byte b;
// ...
b = (byte) a;
當把浮點值賦給整數類型時一種不同的類型轉換發生了:截斷(truncation)。你知道整數沒有小數部分。這樣,當把浮點值賦給整數類型時,它的小數部分會被舍去
class Conversion {
public static void main(String args[]) {
byte b;
int i = 257;
double d = 323.142;
System.out.println("\nConversion of int to byte.");
b = (byte) i;
System.out.println("i and b " + i + " " + b);
System.out.println("\nConversion of double to int.");
i = (int) d;
System.out.println("d and i " + d + " " + i);
System.out.println("\nConversion of double to byte.");
b = (byte) d;
System.out.println("d and b " + d + " " + b);
}
}
表達式中類型的自動提升
byte a = 40;
byte b = 50;
byte c = 100;
int d = a * b / c;
//中間項結果a*b很容易超過它的任何一個byte型操作數的范圍。為處理這種問題,當分
析表達式時,Java自動提升各個byte型或short型的操作數到int型。這意味著子表達式a*b使
用整數而不是字節型來執行
自動類型提升的問題
byte b = 50;
b = b * 2; // Error! Cannot assign an int to a byte!
該程序試圖將一個完全合法的byte型的值50*2再存儲給一個byte型的變量。但是當表達
式求值的時候,操作數被自動地提升為int型,計算結果也被提升為int型。這樣,表達式的
結果現在是int型,不強制轉換它就不能被賦為byte型
byte b = 50;
b = (byte)(b * 2); //正解
類型提升一直以最高級的類型為目標提升。
數組
聲明數組
int month_days[];? //type var-name[ ];
聲明并初始化為0
month_days = new int[12];? //array-var = new type[size];
賦值
month_days[0] = 31;
month_days[1] = 28;
聲明并初始化
int month_days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31,30, 31 };
二維數組
int twoD[][] = new int[4][5];
第二種聲明形式以下兩種等價
int al[] = new int[3];
int[] a2 = new int[3];
Java不支持或不允許指針因為這樣做將允許Javaapplet(小應用程序)突破Java運行環境和主機之間的防火墻?后面說解決方案。
運算符
+ - * / % ++ += -= *= /= %= --
關系運算符
== != > < >= <=
邏輯運算符 & |? ^? || && ! &= |= ^= == != ?:
注意java有三元運算
expression1 ? expression2 : expression3
ratio = denom == 0 ? 0 : num / denom;
if(condition)
statement;
else if(condition)
statement;
else if(condition)
statement;
else
statement;
switch (expression) {
case value1:
// statement sequence
break;
case value2:
// statement sequence
break;
.
.
.
case valueN:
// statement sequence
break;
default:
// default statement sequence
}
表達式expression必須為byte,short,int或char類型。每個case語句后的值value必須是與表達式類型兼容的特定的一個常量(它必須為一個常量,而不是變量)。重復的case值是不允許的
switch可以嵌套
三種循環
while(condition) {
// body of loop
}
do {
// body of loop
} while (condition);
for(initialization; condition; iteration) {
// body
}
Java允許你在for循環的初始化部分和反復部分聲明多個變量,每個變量之間用逗號分開。
for(a=1, b=4; a
break,continue和return?都支持