JAVA基礎1

1、dos命令行常用命令
dir:列出當前目錄下的所有文件
mkdir XX:當前目錄下創建名字爲XX的文件夾
rd XX:刪除當前目錄下名字爲XX的文件夾,只能刪除空的文件夾
cd abc\op:直接進入abc目錄下的op目錄下
del 1.txt:刪除文件。同時還能刪除目錄(此目錄不是空的)。

exit:退出dos命令行


2、JAVA語言的跨平臺性
-----> Windows操作系統 -----> Win版的JVM
Java程序 -----> Linux操作系統   -----> Linux版的JVM
-----> Mac操作系統     -----> Mac版的JVM
總結:JVM虛擬機是依賴於平臺的,而我們的JAVA程序卻不依賴於平臺,實現跨平臺。


3、JRE和JDK
JRE:java運行時環境,包含java虛擬機(JVM)和java程序所需的核心類庫。
JDK:java開發工具包,包含JRE和java的開發工具。這個就是提供給開發人員使用的。
所謂的開發工具類似於編譯器javac.exe等。
總結:使用JDK開發完成java程序後,交給JRE裏的JVM來運行程序。


4、環境變量中Path的配置
在dos命令行中輸入javac,系統首先在當前目錄下找javac.exe這個可執行文件,如果
有就馬上執行,如果沒有,系統就根據Path中配的路徑去找,找到就運行,找不到就
會報此命令不是系統內部命令之類的。因此在Path中需加入 E:\jdk1.6.0_25\bin;
此時,我們在dos的任何目錄下,輸入javac都會找到這個命令。


5、環境變量配置小技巧
比如在環境變量中新建,變量名:JAVA_HOME 變量值:E:\jdk1.6.0_25
接着在Path中就不需要加完整的E:\jdk1.6.0_25\bin;
而應該是這樣:%JAVA_HOME%\bin; 這種方式是動態獲取


6、classpath的配置
當使用javac編譯後會生成XX.class文件,我們只能在XX.class這個文件的目錄下執行
java XX來運行java程序。假如我們想在其他的目錄下執行XX.class文件,那麼這個時候
就需要配置classpath了,道理和Path是一樣的。Path裏面的路徑是讓系統找到javac和
java這個可執行文件,而classpath裏的路徑是讓系統找到某個.class文件。


如果要臨時配置classpath的話,可以在dos命令窗口中輸入set classpath=E:\java_pro
classpath和上面配置Path的最大區別在於,系統找class文件時是先找classpath路徑下
的。還有要注意set classpath=E:\java_pro;和set classpath=E:\java_pro的區別,有
分號結束代表如果在classpath路徑下找不到特定的class文件就在當前目錄下找。而
沒有分號的就只能在classpath指定的路徑下找,找不到就報錯。
其實dos窗口中執行命令java Test的真正過程是:首先在當前目錄下找java.exe文件,
沒有的話就去Path指定的路徑中去找,找到後,就啓動JVM。然後JVM就去classpath指定
路徑中找Test.class文件,如果找到就成功運行,如果找不到就看classpath後面有沒有
分號結束,如果沒有分號結束又找不到的話就報錯。如果有分號結束,就繼續去當前路徑
下去找,找到則運行,找不到則報錯。當然,還有可能的是我們沒有設置classpath,
這種情況下JVM只能在當前目錄下找了。


7、標識符
由0-9數字、A-Z、a-z、$、_這五類組成,而且不能以數字開頭。大小寫敏感。
包名:      aaabbb
類名接口名:AaaBbb
變量名和函數名:aaaBbb
常量名:AAA_BBB


8、類型轉換
整數默認是int類型,小數默認是double
boolean不能和任何類型進行轉換,其值也只有true和false
byte、short、char之間不能進行轉換
byte、short、char進行運算必須轉爲int。需不需要強轉就要看進行運算中是不是至少有一個是變量

byte b = 3;
b = (byte)(b + 2); //必須強制轉換才合理,因爲b+2的結果是int類型

b = 3+2;//合理,3+2都是常量,值是固定的。只要其結果不超出byte範圍,它們會自動強轉

byte、short、char==>int==>long==>float==>double //轉換的方向,double爲最高級
//例如:int和float相加,那麼其結果必然爲float。int和int相加,結果必然爲int
char c = 156;
byte b = (byte)c;  //必須強制轉換,因爲有可能精度丟失
System.out.println(b);  //結果爲-100,156的二進制位10011100,在b看來是負數,那麼首先還原是減1,10011011,取反得到01100100,再加個減號,就是-100

-6在內存中是這樣的,首先換算成6--->110,取反1111 1001,加1,1111 1010。和上面的換算是反過來的。


9、關於除法和求餘的問題
5/2 ==> 2   5.0/2 ==> 2.5  5/2.0 ==> 2.5  (-5)/2.0 ==> -2.5
5%2 ==> 1   5.0%2 ==> 1.0  5%2.0 ==> 1.0  (-5.0)%2 ==> -1.0
5%(-2.0) ==> 1.0   //得出結論,帶負號求餘的結果是看被餘數,忽視餘數的負號


10、字符串和任何類型相連接,結果肯定是字符串類型
System.out.println("5+5=" + 5 + 5);  //結果爲 5+5=55  首先字符串和第一個5相連接
//結果爲"5+5=5" 然後和第二個5相連接,最後結果就出來了。
System.out.println("5+5=" + (5 + 5)); //結果爲 5+5=10  首先運算最裏的括號,
//結果爲10,然後再和字符串相連接


11、轉義字符
\n:換行
\r:回車,Window裏的按下回車實際上是兩個字符\r\n
\t:製表
\b:退格
System.out.println("\"hello\""); ==> 打印出帶雙引號的"hello"


12、關於+=的一個小細節
short s = 5;
s = s + 5;  //運行會報錯,因爲右邊的結果爲int
s += 5;  //運行沒有問題
//s = s + 5; 實際上是進行了兩次運算,首先相加,其次把相加的結果賦值給s
//s += 5; 這個實際上只進行了一次的賦值運算,把相加後的結果直接賦值給s
//並且系統自帶強制轉換的功能,所以效率更高。


13、位運算符
&和&&的區別是,與和短路與,與是兩邊都運算,短路與是如果判斷左邊就能得到結果就不運算右邊
^異或,不同的是true,相同的是false.比如true^true的結果是false
>>:有符號右移,原來的最高位是什麼,往右移動後空缺的新的高位就補什麼
>>>:無符號右移,補0
~取反碼


14、數組的定義和初始化
(1)靜態初始化
int[] arr = {1,5,3,8,6};        //以下兩種方式等價
int[] arr = new int[]{1,5,3,8,6};   //[]不能寫長度
(2)動態初始化
int[] arr = new int[3];  //這種方式初始化是先讓系統分配內存,後自己再初始化
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
//其實無論那一種方式初始化,arr變量是分配在棧裏,通過變量裏的地址可以找到
//堆裏的一片區域,該區域劃分爲3塊,分別裝着數字1,2,3
//堆內存裏的變量都有默認初始化值


15、選擇排序,思想是首先拿第一個位置,依次和後面位置進行比較。這樣下來,就會把最小的或者最大的數值移到了第一個位置。緊接着從第二個位置開始,拿該位置的數值和後面的繼續進行比較。

for(int i=0; i<array.length-1; i++){
for(int j=i+1; j<array.length; j++){
if(array[i] > array[j]){
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}


16、冒泡排序,思想是

第一輪:拿下標爲0的內容和下標爲1的內容進行比較,小的往左移
接着拿下標爲1的內容和下標爲2的內容進行比較,小的往左移
。。。。。這一輪比較完成後,最大的值會移到最右邊了
第二輪:同上,拿下標爲0的內容和下標爲1的內容進行比較,小的往左移
這一輪就不需要比較最後一個的了,因爲已經固定了。
。。。。。這一輪比較完成後,次大的值就會移到次右邊的了

for(int i=0; i<array.length-1; i++){

for(int j=0; j<array.length-1-i; j++){

temp = array[i];
array[i] = array[j];
array[j] = temp;

}

}


17、開發中常用的排序方法

Arrays.sort(array); //這樣就能得到一個從小到大的排序,是JAVA自帶的排序方法

要想得到一個從大到小的排序,在該結果的基礎上,倒敘把內容輸入到一個新的數組就可以了


18、數組查找

方式一,普通的查找,對數組無排序要求

for(int i=0; i<array.length; i++){

if(search == array[i]){

return i;

}

}

return -1;


方式二,二分法查找,數組必須是有序的。

public static int search(int[] array, int key){
int min = 0;
int max = array.length-1;
int mid = (min+max)/2;

while(true){
if(key > array[mid]){
min = mid + 1;
} else if(key < array[mid]){
max = mid - 1;
} else {
break;
}
mid = (min+max)/2;
if(array[mid] == key){
break;
} else if(min == max){
mid = -1;
break;
}
}
return mid;
}


19、二維數組

int[][] arr = new int[2][3]; //第一維必須確定,第二維可寫可不寫
arr.length; ==>結果是2    arr[0].length; ==>結果是3
//注意:至於二維數組的靜態和動態初始化和一維的思想一致。
(1)靜態初始化
int[][] arr = {{1,2},{3,4,5},{6,7}};
int[][] arr = new int[][]{{1,2},{3,4,5},{6,7}};//同樣最右邊的兩個[]不能寫數字
(2)動態初始化
int[][] arr = new int[2][]; //第二維不寫的時候,初始化用下面的方式
arr[0] = new int[3];
arr[1] = new int[2];
int[][] arr = new int[2][3]; //第二維寫上的時候,可以直接賦值
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 4;
arr[1][1] = 5;
arr[1][2] = 6;
總結:動態初始化中,第二維不寫的時候沒辦法直接賦值的原因在於,內存都還沒分配好,
怎麼可能直接賦值呢?


發佈了41 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章