JAVA學習(一)——基本語法


  tips:前端開發寫慣了弱類型語言,再來學強類型語言,真的是被各種修飾符、類型聲明給整的雲里霧里,而且java語法和javascript語言差別還是很大的,所以做好筆記,把一些需要注意的地方記下來是非常重要的,接下來就開始學習java啦。

 

 一、基本語法:

  1、大小寫敏感:Java是大小寫敏感的,這就意味着標識符Hello與hello是不同的。

  2、類名:對於所有的類來說,類名的首字母應該大寫。如果類名由若干單詞組成,那么每個單詞的首字母應該大寫,例如 MyFirstJavaClass 。

  3、方法名:所有的方法名都應該以小寫字母開頭。如果方法名含有若干單詞,則后面的每個單詞首字母大寫。

  4、源文件名:源文件名必須和類名相同。當保存文件的時候,你應該使用類名作為文件名保存(切記Java是大小寫敏感的),文件名的后綴為.java。(如果文件名和類名不相同則會導致編譯錯誤)。

  5、主方法入口:所有的Java 程序由public static void main(String args[])方法開始執行。

  備注一下:

  5.1、public static void main(String args[]){}:為java主函數,java虛擬機會自動尋找到main方法,然后開始執行后面的程序,java程序的規定的格式寫法;

     5.2、public:可外部訪問;

  5.3、static:標記為靜態函數,將該函數存儲在靜態存儲區,不需要實例化(new)即可使用;

     5.4、void:無返回值;

  5.5、String args[]:可在命令行通過此參數給函數傳值,可在其他類調用這個類的main函數時傳值。

public class MyFirstJavaProgram {
   /* 第一個Java程序.  
    * 它將打印字符串 Hello World
    */
    public static void main(String []args) {
       System.out.println("Hello World"); // 打印 Hello World
    }
} 

  

  二、類(class)

    1、局部變量

    2、成員變量:定義在類中,方法體之外的變量,和局部變量略有不同。

    3、類變量也聲明在類中,方法體之外,但必須聲明為static類型。

    4、構造方法:在創建一個對象的時候,至少要調用一個構造方法。構造方法的名稱必須與類同名,一個類可以有多個構造方法。

public class Puppy{
   public Puppy(){
   }

   public Puppy(String name){
      // 這個構造器僅有一個參數:name
   }
}

  

  三、類型

    1、基本數據類型(內置基本類型,引用類型)

    byte a = 100;—— byte數據類型是8位、有符號的,以二進制補碼表示的整數;

    short s = 1000;—— short數據類型是16位、有符號的以二進制補碼表示的整數;

    int a = 100000;—— int數據類型是32位、有符號的以二進制補碼表示的整數;

    long a = 100000L;—— long數據類型是64位、有符號的以二進制補碼表示的整數;(后面加了L)

    float f1 = 234.5f;—— float數據類型是單精度、32位、符合IEEE 754標准的浮點數;(小數,后面加了f)

    double d1 = 123.4;——  double數據類型是雙精度、64位、符合IEEE 754標准的浮點數;(小數)

    boolean one = true;——  boolean數據類型表示一位的信息;(true或false)

    char letter = ‘A’;—— char類型是一個單一的16位Unicode字符;

    Animal animal = new Animal(“giraffe”) ; —— 引用類型變量由類的構造函數創建,可以使用它們訪問所引用的對象;

    final double PI = 3.1415927;——  常量指不能改變的量。 在Java中用final標志,聲明方式和變量類似;

    

    2、變量類型(局部變量,實例變量,類變量)

    局部變量:

      1、訪問修飾符不能用於局部變量;(局部變量本身只能局部調用,外部沒法調用,所以不需要修飾符private ,public protend,但是能加final)

      2、局部變量是在棧上分配的。(由於進程的棧空間是有限的,所以要避免申請占用空間過大的局部變量,以及避免函數嵌套層數過多。這些都可能引起棧空間不夠導致程序崩潰。)

    實例變量:

      1、實例變量聲明在一個類中,但在方法、構造方法和語句塊之外;

      2、實例變量的值應該至少被一個方法、構造方法或者語句塊引用,使得外部能夠通過這些方式獲取實例變量信息;

      3、實例變量可以聲明在使用前或者使用后;(有點類型js的變量提升)

      4、訪問修飾符可以修飾實例變量;

      5、一般情況下應該把實例變量設為私有。通過使用訪問修飾符可以使實例變量對子類可見;

      6、實例變量具有默認值。數值型變量的默認值是0,布爾型變量的默認值是false,引用類型變量的默認值是null。變量的值可以在聲明時指定,也可以在構造方法中指定;(局部變量沒有默認值哦!)

    類變量(靜態變量):

      1、以static關鍵字聲明,必須在方法、構造方法和語句塊之外。

      2、無論一個類創建了多少個對象,類只擁有類變量的一份拷貝。

      3、靜態變量除了被聲明為常量外很少使用。常量是指聲明為public/private,final和static類型的變量。常量初始化后不可改變。

      4、靜態變量儲存在靜態存儲區。經常被聲明為常量,很少單獨使用static聲明變量。

      5、類變量被聲明為public static final類型時,類變量名稱必須使用大寫字母。如果靜態變量不是public和final類型,其命名方式與實例變量以及局部變量的命名方式一致。

 

  四、修飾符

    訪問修飾符(private、public、protected)

      1、private —— 只能被所屬類訪問,並且類和接口不能聲明為private。

      2、public —— Java程序的main() 方法必須設置成公有的,否則,Java解釋器將不能運行該類。

      3、protected —— 能被同一個包中的任何其他類訪問,也能夠被不同包中的子類訪問;不能修飾類和接口,方法和成員變量能夠聲明為protected,但是接口的成員變量和成員方法不能聲明為protected。

    非訪問修飾符(static、final、abstract、synchronized、volatile)

      1、static —— 局部變量不能被聲明為static變量;可以直接使用classname.variablename和classname.methodname的方式訪問。

      2、final —— final對象的引用不能改變,但是里面的值可以改變;final修飾符通常和static修飾符一起使用來創建類常量;類中的Final方法可以被子類繼承,但是不能被子類修改;final類不能被繼承。

      3、abstract —— 抽象類不能用來實例化對象;一個類不能同時被abstract和final修飾;抽象方法是一種沒有任何實現的方法,該方法的的具體實現由子類提供。抽象方法不能被聲明成final和static;任何繼承抽象類的子類必須實現父類的所有抽象方法,除非該子類也是抽象類;抽象方法的聲明以分號結尾,例如:public abstract sample();

例子:

public abstract class SuperClass{
    abstract void m(); //抽象方法
}
 
class SubClass extends SuperClass{
     //實現抽象方法
      void m(){
          .........
      }
}

      4、synchronized —— 方法同一時間只能被一個線程訪問。

      5、transient —— java虛擬機(JVM)將跳過transient修飾的實例變量。

      6、volatile —— volatile修飾的成員變量在每次被線程訪問時,都強迫從共享內存中重讀該成員變量的值。而且,當成員變量發生變化時,強迫線程將變化值回寫到共享內存。這樣在任何時刻,兩個不同的線程總是看到某個成員變量的同一個值。(看得有點暈)

 

  五、運算符(感覺所有語言都差不多,略)

  六、包裝類或抽象類

    Number類:內置數據類型,如:int、long、byte、double、float、short等對應了包裝類Integer、Long、Byte、Double、Float、Short等,它們都是抽象類Number的子類。(包裝類需要拆箱變成內置數據類型才能進行計算)

    Math類:Math 的方法都被定義為 static 形式,通過 Math 類可以在主函數中直接調用。

    Character類:對應了內置數據類型char。

    String類:String類是不可改變的,所以你一旦創建了String對象,那它的值就無法改變了。如果需要對字符串做很多修改,那么應該選擇使用StringBuffer & StringBuilder類。輸出格式化數字可以使用printf()和format()方法;

轉 換 符 說 明 示 例
%s 字符串類型 “mingrisoft”
%c 字符類型 ‘m’
%b 布爾類型 true
%d 整數類型(十進制) 99
%x 整數類型(十六進制) FF
%o 整數類型(八進制) 77
%f 浮點類型 99.99
%a 十六進制浮點類型 FF.35AE
%e 指數類型 9.38e+5
%g 通用浮點類型(f和e類型中較短的)  
%h 散列碼  
%% 百分比類型
%n 換行符  
%tx 日期與時間類型(x代表不同的日期與時間轉換符

    StringBuffer和StringBuilder類:StringBuilder相較於StringBuffer有速度優勢,所以多數情況下建議使用StringBuilder類。然而在應用程序要求線程安全的情況下,則必須使用StringBuffer類。(線程安全就是多線程訪問時,采用了加鎖機制,當一個線程訪問該類的某個數據時,進行保護,其他線程不能進行訪問直到該線程讀取完,其他線程才可使用。不會出現數據不一致或者數據污染。線程不安全就是不提供數據訪問保護,有可能出現多個線程先后更改數據造成所得到的數據是臟數據)。

    數組:

//數組聲明
dataType[] arrayRefVar; // 首選的方法 或 dataType arrayRefVar[]; // 效果相同,但不是首選方法

//數組創建
dataType[] arrayRefVar = new dataType[arraySize];

dataType[] arrayRefVar = {value0, value1, ..., valuek};

//foreach循環
public class TestArray {
   public static void main(String[] args) {
      double[] myList = {1.9, 2.9, 3.4, 3.5};       // 打印所有數組元素       
    for (double element: myList) {
         System.out.println(element);       
    }    
  }
}

 

    Array類:能方便地操作數組,它提供的所有方法都是靜態的;(fill:給數組賦值,sort:對數組排序,equals:比較數組中元素值是否相等,binarySearch:對排序好的數組進行二分查找法查找數組元素)

 

  七、異常處理

    1、異常捕獲:使用try和catch關鍵字可以捕獲異常;

try
{
   // 程序代碼
}catch(ExceptionName e1)
{
   //Catch 塊
}

    2、throws/throw關鍵字:如果一個方法沒有捕獲一個檢查性異常,那么該方法必須使用throws 關鍵字來聲明。throws關鍵字放在方法簽名的尾部;可以聲明拋出多個異常,多個異常之間用逗號隔開。

import java.io.*;
public class className
{
   public void withdraw(double amount) throws RemoteException,
                              InsufficientFundsException
   {
       // Method implementation
   }
   //Remainder of class definition
}

    3、finally關鍵字:無論是否發生異常,finally代碼塊中的代碼總會被執行;

 try{
    // 程序代碼
 }catch(異常類型1 異常的變量名1){
    // 程序代碼
 }catch(異常類型2 異常的變量名2){
    // 程序代碼
 }finally{
    // 程序代碼
 }

 

 

    最后,把上面的這些學懂,再來看java代碼,已經不像開始時的那樣陌生了,當然,還有一些知識點比較難,需要花更多的時間去學習研究,學得越多,越覺得java的知識體量很大,不過總算是入門了,再接再厲!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM