通過實例帶你重新溫習java語言,這些基礎java知識你都瞭解嗎?

目錄

1. 配置java編譯環境

2. java基本語法

3. 流程控制與數組

4. 類

5. 集合類的使用

實例1:使用switch結構計算每個月的天數(考慮閏年)

實例2:找到1000以內所有的素數,並且保存到數組中去

實例3:實現一個學生類,需要包含姓名、性別、學號和年齡等屬性

實例4:抽象類的繼承


1. 配置java編譯環境

 針對Windows64位: 

    鏈接:https://pan.baidu.com/s/1q7p6YbKSyxl4k90DEeBQVw 
    提取碼:fwmy

 (1)安裝配置jdk

   通過以下步驟配置PATH環境變量:

(2)下載、安裝IntelliJ IDEA

   兩種模式下的視圖轉換:File — settings — color Scheme(Default與Darcula)

 

(3)建立java源代碼輸出“Hello World”

public class Hello {
    public static void main(String[] args){
       System.out.println("Hello World.");
    }
}
Hello World.

Process finished with exit code 0

(4)通過命令提示窗口運行

  • 命令javac和java都是JDK軟件包自帶的,通過javac命令產生一個.class文件。

2. java基本語法

(1)java程序的構成

  • 邏輯構成

    程序頭包的引用:主要引用JDK軟件包自帶的包,也可以是自己定義的類,引用之後程序體中就可以自由應用包中的類的方法與屬性。

    類的定義:可以有多個類的定義,但必須有一個主類,這個主類是程序運行的路口點,在java源程序中,主類的名字同文件名一致。

  • 物理構成

   語句一行以分號結束。

   括號{}界定語句序列。

   空白指的是語句之間、塊內部、或者塊之間的空白行。

  • 註釋語句

行註釋以//開始的行。

塊註釋以/*...*/開始和結束。

  • 標識符、關鍵字和轉義符

標識符:

有字母、數字、下劃線(_)、美元符號組成,其中美元符號用的比較少。

標識符從一個字母、下劃線、美元符號開始。

java語言中對大小寫比較敏感。

標識符沒有最大長度限制。

標識符定義不能是關鍵字。

關鍵字:

java語言中自帶的用於標誌數據類型名(如:double)。

轉義符:

擁有特殊含義的字符見下表。

(2)數據類型

  • java數據類型

  • 整數類

採用三種進制:十六進制、八進制、十進制。

十進制:2

八進制:o45

十六進制:oxBACA

具有缺省int。

用字母L或l表示長整型。

所有java中編譯語言中的整數類型都是有符號的數字。

  • 文本類

必須包含單引號引用的文字。

代表一個16 bit Unicode字符。

  • 浮點類

默認類型爲double,有f和d兩種形式。

  • 邏輯類

boolean數據類型有兩種:true和false

如:boolean f=true;

(3)變量與常量

  • 常量:是指整個運行過程中不在發生改變的量。
  • 變量:變量得聲明也指變量的創建。

(4)運算符和表達式

  • 算術運算符

+(加)、-(減)、*(乘)、/(除)、%(取模運算)、++(增量運算符)、--(減量運算符)

  • 關係運算符

==(等於)、!=(不等於)、>(大於)、<(小於)、>=(大於等於)、<=(小於等於)

  • 布爾邏輯運算符

  • 位運算符

~(位求反)、&(按位與)、|(按位或)、^(按位異或)、<<(左移)、>>(右移)、>>>(不帶符號右移)

  • 賦值運算符

  • 其它操作符及其表達式

三目運算符:(?:):

表達式:x?y:z;

判斷x是否爲真,如果爲真則選y,如果爲假則選z。

對象運算符:instanceof

  • 優先級

3. 流程控制與數組

(1)if-else語句

if(布爾表達式)

{

語句塊1;

}

else

{

語句塊2;

}

布爾表達式:返回爲true時,執行語句1;返回爲false時,執行語句2;

(2)switch語句

switch(表達式1)
{
case 表達式2:
    語句;
    break;
case 表達式3:
    語句;
    break;
default:
    語句;
    break;
}
  • 表達式1的值必須與整型兼容。
  • break表示要跳出這一分支。
  • case分支要執行程序語句。

(3)for循環語句

for(初始化表達式;測試表達式;步長){

語句;

}

  • 首先運行初始化表達式。
  • 然後計算測試表達式,爲真時,執行語句塊,如果爲假,結束for循環。
  • 最後執行步長。

(4)while循環

while(布爾表達式){

語句;

}

布爾表達式爲true執行語句,否則跳出。

(5)do語句

do{

語句;

}while(布爾表達式);

(6)數組

  • 首先是一個對象。
  • 存放相同的數據類型。
  • 所有數組下標默認值0開始,且訪問時候不可以超出定義上限。
  • 聲明格式

   數據類型 標識符[]

   如:int tab[];聲明數據類型爲整型的數組tab。

  • 創建數組

   由於數組是一個對象,所以用關鍵字new來創建一個數組。

tab=new int[10]; 創建存儲10個整型數據的數組tab。

   創建完成後,賦值:

  • 每個元素賦值:tab[0]=1

                                tab[1]=3;

                                 .......

                                tab[9]=9;

  • 直接聲明的時候說明其值

    int tab[]={1,2,3,4,5}; 

4. 類

(1)類的定義與聲明

  • java編程是面向對象的,處理最小的完整單元爲對象。
  • 類由類聲明和類體構成,類體又有變量和方法構成。
  • 類聲明的基本格式

   訪問說明符 class 類名 extends 超類名 implements 接口名

  • 訪問說明符public或者省略。
  • 類名:用戶自定義類名。
  • 超類名:是指已經存在的類名。
  • 接口名:接口
  • 類體

   成員變量格式:訪問說明符 數據類型 變量名

  • 訪問說明符有:public、private、protected。
  • public:省略時候默認的公有類型。可以由外部對象進行訪問。
  • private:私有類型,只允許在類的內部的方法和使用,若從外部訪問,則需要建立函數,間接的訪問。
  • protected:受保護類型,子類訪問受到控制。

方法:類的操作定義,標誌着類的動態特徵。

訪問說明符 數據類型 方法名(數據類型1 變量名1,數據類型2 變量名2)

  • 使用new進行創建類

(2)類的單繼承性

  java語言中允許用externs關鍵字從一個類擴展出一個新類,新類繼承超類的成員變量和方法,並且可以覆蓋。

(3)特殊變量

  兩個特殊變量:super和this

  • super

  類聲明中用關鍵字extends擴展了其超類後,super用在擴展類中引用其它超類中的成員變量。

  • this

   指向當前變量或者實例。

(4)構造函數

  類中的構造函數用來初始化一個類。

(5)包

聲明包的格式:Package 包名;

Package爲關鍵字,包名爲標識符。

Package語句要作爲程序非註釋語句的第一行。

包內的類名唯一。

引用包中類時,使用import語句。格式import 包名.類名

5. 集合類的使用

(1)List接口

  • List接口

    List接口擴展了Collection,可以包含重複元素。元素是有順序的,每個元素都有一個index值(從0開始)標明元素在列表中的位置。在聲明時可以帶有一個泛型參數,即List<E> 。實現List接口的主要類有Vector、ArrayList和LinkedList等。Vector和ArrayList以類似數組的形式進行存儲,因此它的隨機訪問速度極快。LinkedList的內部實現是鏈表,適合於在鏈表中間需要頻繁進行插入和刪除操作。

ArrayList/Vector常用方法:

  • void add(Object obj) ,添加一個對象
  • boolean addAll(Collection col),添加整個集合,如果接收者對象的結果有變化,則返回true
  • int size() ,返回元素的個數。
  • boolean isEmpty(),如果不含元素,則返回true
  • Object get(int pos),返回指定位置的元素
  • void set(int pos, Object obj),用參數對象替換指定位置的對象
  • boolean remove(Object obj),去除給定對象的第一次出現,如果找到了對象,則返回true。去除一個對象後,其後面的所有對象都依次向前移動。
  • Object remove(int pos),去除給定位置的元素,並返回被去除的對象
  • boolean removeAll(Collection<?> col),從接收者對象中去除所有在參數對象中出現的元素,如果接收者對象的結果有變化,則返回true
  • void clear() ,去除所有的元素
  • boolean contains(Object obj),返回是否包含指定的對象,如果包含則返回true;否則,返回false
  • boolean containsAll(Collection<?> col),返回是否包含參數col中的所有對象
  • int indexOf(Object obj),返回給定對象在Vector /ArrayList中第一次出現的位置,如不存在,則返回-1

(2)Set接口

  • Set接口

Set接口擴展了Collection接口,禁止重複的元素,是數學中“集合”的抽象。實現它的兩個主要類是哈希集合(HashSet)及樹集合(TreeSet)。

(3)Map接口

  • Map接口

Map用於存儲“關鍵字”(key)和“值”(value)的元素對,其中每個鍵映射到一個值,當需要通過關鍵字實現對值的快速存取時使用。兩個主要實現類:TreeMap、HashMap。

Map接口常用方法:

  • int size(),返回Map中的元素個數
  • boolean isEmpty(),返回Map中是否包含元素,如不包括任何元素,則返回true
  • boolean containsKey(Object key),判斷給定的參數是否是Map中的一個關鍵字(key)
  • boolean containsValue(Object val),判斷給定的參數是否是Map中的一個值(value)
  • Object get(Object key),返回Map中與給定關鍵字相關聯的值(value)
  • Collection values(),返回包含Map中所有值(value)的Collection對象
  • Set keySet(),返回包含Map中所有關鍵字(key)的Set對象
  • Set entrySet(),返回包含Map中所有項的Set對象
  • Object put(Object key, Object val),將給定的關鍵字(key)/值(value)對加入到Map對象中。其中關鍵字(key)必須唯一,否則,新加入的值會取代Map對象中已有的值
  • void putAll(Map m),將給定的參數Map中的所有項加入到接收者Map對象中
  • Object remove(Object key),將關鍵字爲給定參數的項從Map對象中刪除
  • void clear(),從Map對象中刪除所有的項

(4)Iterator接口

  • Iterator接口

Iterator接口是一個遍歷集合元素的工具,並具有從正在遍歷的集合中去除對象的能力。具有如下三個實例方法, 

  • hasNext(),判斷是否還有元素
  • next(),取得下一個元素
  • remove(),去除一個元素。注意是從集合中去除最後調用next()返回的元素,而不是從Iterator類中去除

(5)Collections類

  • Collections類

Collections類提供了對集合的操作,包括

  • 排序算法sort

對List重新排序,使其中的元素按照某種次序關係升序排列。有兩種形式,簡單形式只是將元素按照自然次序排列,第二種形式需要一個附加的Comparator對象作爲參數,用於規定比較規則,可用於實現反序或特殊次序排序。

  • 洗牌算法shuffle

其作用與排序算法恰好相反,它打亂List中的任何次序。也就是說以隨機方式重排元素,任何次序出現的機率都是相等的。在實現偶然性遊戲的時候,這個算法很有用。

  • reverse:將一個List中的元素反向排列
  • fill:用指定的值覆寫List中的每一個元素,這個操作在重新初始化List時有用

copy:接受兩個參數,目標List和源List,將源中的元素複製到目標,覆寫其中的內容。目標List必須至少與源一樣長,如果更長,則多餘的部分內容不受影響。

實例1:使用switch結構計算每個月的天數(考慮閏年)

(1)解析

  閏年是可以整除4,但不可以整除100的數,或者直接可以整除400。

  java.util.Scanner是Java5的新特徵,主要功能是簡化文本掃描、獲取控制檯輸入。

  通過new Scanner(Sysem.in)創建一個Scanner,控制檯會一直等待輸入,直到敲回車結束,把所輸入的內容傳給Scanner,作爲掃描對象。

 next() 每次取到一個間隔符前面的數據。  

 nextInt() 是取next() 然後把字符串解析成一個int數字。

 英語:閏年(Leap year)

(2)代碼實現

import java.util.Scanner;
public class test {
    //判斷是否爲閏年
    public static boolean isLeapyear(int year){
     return((year%4==0)&&(year%100!=0)||(year%400==0));
    }

    //輸出具體年份月份的天數
    public static int days(int year,int month){
        int day;
        switch(month){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
                 day=31;
                 break;
            case 2:day=isLeapyear(year)?29:28;
                 break;
            default:
                day=30;
                break;

        }
        return day;
    }

    //程序執行開始
    public static void main(String[] args){
        int year,month;
        Scanner s=new Scanner(System.in);
        System.out.print("請輸入年份:");
        year=s.nextInt();
        System.out.print("請輸入月份:");
        month=s.nextInt();
        System.out.print(year+"年"+month+"月的天數是"+(days(year,month)));
    }
}

(3)結果展示

請輸入年份:2020
請輸入月份:4
2020年4月的天數是30
Process finished with exit code 0

實例2:找到1000以內所有的素數,並且保存到數組中去

(1)解析

質數是指在大於1的自然數中,除了1和它本身以外不再有其他因數的自然數,質數也稱爲素數。通過循環遍歷2至n/2,若中間的任意一個數能被n整除,則n不是質數,返回false;若所有的數均不能被n整除,則返回true。

英語:素數(prime)

(2)代碼實現

public class text1 {
    //判斷給定的數是不是素數
    public static boolean isprime(int n){
        int i;
        for(i=2;i<=n/2;i++){
            if((n%i)==0){
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args){
        int[] primes=new int[1000];
        int i,count=0,j;
        for(i=2;i<=1000;i++){
            if(isprime(i))
            {
              primes[count]=i;
              count++;
            }
        }

        for(j=0;j<count;j++){
            System.out.println(primes[j]);
        }

    }
}

實例3:實現一個學生類,需要包含姓名、性別、學號和年齡等屬性

(1)題目要求 

題目:實現一個學生類,需要包含姓名、性別、學號和年齡等屬性。要求:

  1. 無參數和有參數的構造函數
  2. 各個屬性(不包括學號)的set和get方法
  3. 使用類變量實現學號的自增
  4. 使用枚舉類型表示性別
  5. 實現toString()方法
  6. 編寫main函數進行測試

(2)代碼實現

  枚舉類型:Gender.java

public enum Gender {
    MALE,
    FEMALE
}

  實現要求:Student.java

public class Student {
    private String name;
    private int no;
    private int age;
    private Gender g;
    private static int count=0;

    public String getName(){
        return name;
    }
    public String setName(String name){
        return this.name=name;
    }

    public int getAge(){
        return age;
    }
    public int setAgeint (int age){
        return this.age=age;
    }

    public Gender getG(){
        return g;
    }
    public void setG(Gender g){
        this.g=g;
    }

    public int getNo(){
        return no;
    }

    Student(String name,int age,Gender g){
        this.name=name;
        this.age=age;
        this.g=g;
        count++;
        no=count;
    }
    Student(){
        this("",18,Gender.MALE);
    }

    public String toString(){
        return name+","+g+","+age+","+no;
    }
}

  測試代碼:text.java

public class text {
    public static void main(String[] args){
        Student s1=new Student("zhang san",20,Gender.MALE);
        Student s2=new Student("li hong",21,Gender.FEMALE);
        Student s3=new Student("wang ming",23,Gender.MALE);

        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
    }
}

  運行結果:

zhang san,MALE,20,1
li hong,FEMALE,21,2
wang ming,MALE,23,3

Process finished with exit code 0

實例4:抽象類的繼承

(1)題目

題目:抽象類的繼承

  1. 編寫抽象類Shape,包含抽象方法void draw()。
  2. 從類Shape派生兩個類Rectangle和Circle。
  3. 在main函數中分別實例化Rectangle和Circle的對象,賦值給Shape類的引用變量,並調用其draw方法。

(2)實現過程

  • 新建一個工程,命名爲Shape。
  • 在工程中新建一個類,命名爲Shape,Shape類爲抽象類,包含抽象方法draw,實現代碼爲:
public abstract class Shape {
    abstract void draw();
}
  • 新建Rectangle類,從Shape類派生並實現抽象方法draw,實現代碼爲:
public class Rectangle extends Shape {
    void draw(){
        System.out.println("Draw rectangle.");
    }
}
  • 新建Circle類,從Shape類派生並實現抽象方法draw,實現代碼爲:
public class Circle extends Shape {
    void draw(){
        System.out.println("Draw circle.");
    }
}
  • 新建ShapeTester類,此類是本工程的主類,包含程序入口函數main,實現代碼爲:
public class ShapeTester {
    public static void main(String[] args){
        Shape s=new Rectangle();
        s.draw();
        Shape r=new Circle();
        r.draw();
    }
}

(3)結果顯示

Draw rectangle.
Draw circle.

Process finished with exit code 0

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章