JAVA開發環境和語法基礎

第一章 Java開發環境

1.Java的跨平臺原理

         java的編程過程爲:java源程序(.java文件)經過java編譯程序編譯後生成java字節碼文件,即(.class文件),然後交給java虛擬機執行,java虛擬機中經過java字節碼解釋程序執行後在交給操作系統。

         windows下c編程過程:c源程序(.c文件)經過c編譯程序編譯後生成windows下可執行文件(即.exe文件),.exe文件就可以再操作系統上直接運行。

        由此可見java相對於c的跨平臺性主要是在實現了java解釋器的平臺上可以對任何編譯過的java字節碼文件解釋執行。此外,java兼顧解釋性和編譯性語言的特點,java源文件轉換成.class字節碼文件的過程是編譯型的,.class文件在操作系統上運行的過程則是解釋型的。

2.classpath和path的區別

        path環境變量的作用是設置共操作系統去尋找和執行應用程序的路徑,即,若操作系統在當前目錄下沒有找到我們想要執行的程序和命令時,操作系統就會按照path環境變量指定的目錄依次去查找,以最先找到的爲準;classpath的作用類型path環境變量的作用,只是它是供Java虛擬機使用,Java虛擬機按照classpath環境變量指定的目錄順序去查找這個類,以最先找到爲準,但設置classpathjava虛擬機將不在當前目錄查找。(要想讓java虛擬機即在classpath指定的路徑下查找,又在當前目錄查找,設置時可以在class環境變量中加一個“.”,如:“set classpath=C:\mydir;.”)。

3.設置classpath路徑時注意事項

      在配置java環境變量的時候經常因爲空格而導致錯誤。比如如下兩種錯誤:

      ①set classpath =c:\mydir;等號和classpath之間有空格,這樣本來是設置classpath的值變成了設置“classpath+空格”的值;

      ②set classpath= c:\mydir;等號和路徑名之間有空格,把路徑變成了“空格+C:\mydir”,導致了路徑設置的錯誤。

       還有一種是路徑裏有空格,因爲windows允許帶空格的目錄名,但java不允許,java對空格和中文敏感。

4.快速得到路徑字符串的方法

       可以在windows操作系統的文件夾選項對話框中,選中“地址欄中顯示全路徑”,選項,在進入某個目錄後可以Ctrl+C複製路徑;也可以將目錄下的某個文件拖入到運行對話框,也可以得到路徑。

       得到路徑後在運行對話框中要到左上角點擊後出來標記後才能操作。

        在命令行窗口中,經常要用到cd命令進入子目錄後其他目錄,如果目錄的名稱比較長,可以只輸入目錄名中的部分字符,其他字符用*代替,如可以用cd tos*進入toshiba_bak目錄。

    

4.java中常見dos命令行

dir : 列出當前目錄下的文件以及文件夾

md : 創建目錄

rd : 刪除目錄

cd : 進入指定目錄

cd.. : 退回到上一級目錄

cd/ : 退回到根目錄

del : 刪除文件

exit : 退出dos命令行

設置環境變量的時候注意:在環境變量的名字裏面,空格也算是名字的組成部分,

查看系統的環境變量的方法是用set命令即可查看所有的環境變量名和取值,也可以加環境變量的名字來查看具體的環境變量的值,如:set path即可查看path環境變量的取值。

classpath環境變量的值就是指定class文件的一系列的路徑,java虛擬機會沿着classpath環境變量中所指定的目錄,依次查找這個類文件。可以讓指定class文件在不同的盤符下運行。

                                                                                                                                 第二章 Java語法基礎

二.Java語言基礎組成

1 關鍵字

被Java語言賦予了特殊含義的單詞(所有字母都小寫如if,false,null)

2 標識符

在程序中自定義的一些名稱。(數字不可以開頭,不可以使用關鍵字。)

Java中的名稱規範:

包名:多單詞組成時所有字母都小寫。xxxyyyzzz

類名接口名:多單詞組成時,所有單詞的首字母大寫。XxxYyyZzz

變量名和函數名:多單詞組成時,第一個單詞首字母小寫,第二 個單詞開始每個單詞首字母大寫。xxxYyyZzz

常量名:所有字母都大寫。多單詞時每個單詞用下劃線連接。XXX_YYY_ZZZ

3 註釋

4 常量和變量

表達式的數據類型自動提升:(自動類型轉換要是兩種類型彼此兼容的類型)

所有的byte型,short型,char型的值將被提升到int型再參與運算。
        如果有一個操作數是long型,計算結果就是long型。
       如果有一個操作數是float型,計算結果就是float型。
      如果有一個操作數是double型,計算結果就是double型。

System.out.println('a'+1')打印結果是98而System.out.println(" "+'a'+1')打印結果是“a1‘。

上述規則使用與變量不合用與常量,char i='a';int a= i+5;編譯可以通過,但int a=‘a’+3;則通不過

浮點數在內存中的表現形式:用二進制的指數形式表示一個浮點數的格式

float:把4個字節(32位)分爲三部分,最高位代表符號位,接下來的8位代表冪指數,剩下的23位代表有效數字。

因爲浮點數是有精度的,所以程序中一般不能用“==”來做比較,一般用大於小於來比較。

小數常量的默認類型是double型的,所以float  f=3.5;編譯報錯,應改爲float f=3.5f;

字符串常量:

String類對象中的內容一旦被初始化就不能改變。
       String類的對象是一個常量對象,當我們需要爲String的對象重新賦值的時候,Java虛擬機會重新分配一塊內存存放新產生的String類型的對象,然後將新分配的那塊內存的首地址引用賦值給那個變量。而原來的對象不受任何影響,如果原來的對象沒有被引用,那麼在適當的時候會被垃圾回收器回收。

針對String的“+”和“+=”操作符,是Java中唯一被重載的操作符。在Java中,不允許程序員重載操作符。

在Java中,如果想要讓一個對象所佔據的內存成爲垃圾內存,可以將對象設置爲null,切斷他們的引用關係。

StringBuffer和StringBuilder是可變的字符串序列。StringBuffer是線程安全的,而StringBuilder不是線程安全的。
       字符串常量(如: String str = "hello";)實際上是一種特殊的匿名String對象,每次使用字符串常量的時候,如果內存中已經存在具有相同內容的匿名String對象,java虛擬機就不再創建一個新的匿名String對象,而是讓所有內容相同的字符串常量共享同一個匿名String對象。
       從而就可以讓多個內容相同的引用變量指向同一個匿名String對象,這樣就可以節約內存空間。

在windows系統下,按回車會產生兩個字符“\r\n”。

變量:內存中的一個存儲區域

該區域有自己的名稱(變量名)和類型(數據類型)

該區域的數據可以在同一類型範圍內不斷變化。

5 運算符

算術運算符(*/%,+-),位運算符,比較運算符(<><=>=,==!=),邏輯運算符(&,^,|,&&,||),賦值運算符。(優先級從高到底)

移位運算的注意事項及小技巧:

移位運算符適用類型有byte、short、char、int、long

boolean和String型不能強轉爲int型.int x=(int)true;編譯報錯。但char型可以。
       對低於int型的操作數將先自動轉換爲int型再移位。 
       對於int型整數移位a>>b,系統先將b對32取模,得到的結果纔是真正移位的位數。例如:a>>33和a>>1結果是一樣的,a>>32的結果還是a原來的數字。
       對於long型整數移位時a>>b ,則是先將移位位數b對64取模。

在做int型移位運算時.當所以移位數大於等於32時,系統會先用這個位數對32進行取模.如題.先取模---即32%32=0,所以a>>32相當於a>>0.還是本身.

同理對long型,當移位數大於等於64時,就要先對64取模.
       移位不會改變變量本身的值。如a>>1;在一行語句中單獨存在,毫無意義 。
       x>>1的結果和x/2的結果是一樣的,x<<2和x*4的結果也是一樣的。
       總之,一個數左移n位,就是等於這個數乘以2的n次方,一個數右移n位,就是等於這個數除以2的n次方。
       請思考:如何用程序實現求2的x次方。答案:y = 1 << x;

三元運算符

z = (x>y)?x:y;

6 語句

switch語句

格式:

switch(表達式)

{

case 取值1:

執行語句;

break;

case 取值2:

執行語句;

break;

…...

default:

執行語句;

break;

}

switch語句判斷條件可接受int, byte, char, short型,不可以接受其他類型。 寫switch語句的時候,一定要記住break;的編寫。如果一個case語句後面沒有break語句則它後面沒有匹配的case語句也會被執行。
while() {
 //dosomething;
}     //注意,這裏不需要分號結束。

do {
 //dosomething;
} while(表達式);   //注意,這裏需要有分號結束語句。

continue語句只能出現在循環語句while,do,for的子語句塊中,無標號的continue語句的作用是跳過當前循環的剩餘語句,接着執行下一次循環。

public class MyClass{

    public static void main(String argv[]){

       int i;

       int j;

       outer: for (i = 1; i < 3; i++)

           inner: for(j = 1; j < 3; j++) {

                  if (j == 2)

                  continue outer;

                  System.out.println

("Value for i = " +i + " Value for j = " +j);

}

    }

}

輸出:

Value for i = 1 value for j = 1

Value for i = 2 value for j = 1

7 函數

函數就是定義在類中的具有特定功能的一段獨立小程序。 

函數也稱爲方法。在同一個類中國允許同時存在一個以上的同名函數,只要他們的參數個數或類型不同即可,這種情況下該函數就叫被重載。

  在C,C++,Java中,一對大括號中間的部分就是一個代碼塊,代碼塊決定其中定義的變量的作用域。代碼塊決定了變量的作用域,作用域決定了變量的可見性和存在時間。

C和C++中,{{}} ,外括號和內括號中可以定義名字相同的變量,只是不屬於同一個變量,但java不允許。

        在一個函數或函數裏面的代碼塊中定義的變量稱爲局部變量,局部變量在函數或代碼塊被執行時創建,在函數或代碼塊結束時被銷燬。局部變量在進行取值操作前必須被初始化或進行過賦值操作,否則編譯出錯。

         如:

        public class Test{

            public static void main(String [] args)

                 {

                          int  x;//應改爲int x=0;

                          x=x+1;

                         System.out.println("x is "+x);

                  }

        }

 3.關於函數的返回值void

        比如一個打印字符串的函數,不用返回任何結果,name就用void作爲返回值類型,意思是”不知道是什麼類型,可定義函數時又非要填寫一個返回值類型,就用它充數吧“。

8 數組

同一種類型數據的集合。其實數組就是一個容器。

定義數組的方法以及靜態初始化方法:

①int x[]=new int[100];(可以用x=null將數組x不指向任何數組對象。)   int ix[]={1,2,3,4};

②int 【】x; x=new int[100];(注意:int [] x;中方括號位於變量名之前)    int is[]=new int[]{1,2,3,4}

java中無論用任何方式定義數組都不能指定其長度。如:int a[5];是錯誤的。

多維數組定義:

① int xx[][];

②int [][] xx; xx=new int[3][];

③int xx[][]=new int [2][3];數組對象正好是一個x*y形式的規則矩陣。

④int [] [] xx={{3,2,4},{1,5},{6}};

⑤int [] x[]=new int[10][10];相當於x[]是一個普通字符。

數組中常見兩個錯誤:空指針NullPointerException異常和數組越界ArrayIndexOutBoundsException異常。

數組引用對象的length屬性可以返回數組的長度,但注意與js中區別,不是用length()方法。

內存結構:

棧內存

用於存儲局部變量,當數據使用完,所佔空間會自動釋放。

堆內存

數組和對象,通過new建立的實例都存放在堆內存中。

每一個實體都有內存地址值。

實體中的變量都有默認初始化值。用new int【100】產生的數組對象中的每個元素的初始值都是0.

實體不在被使用,會在不確定的時間內被垃圾回收器回收。

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