1. 程式人生 > 其它 >學習Java的第五天 | 定義方法 | 引用資料型別——類 | 訪問許可權-修飾符 | 全域性變數與區域性變數 | toString | 構造方法 | 方法過載

學習Java的第五天 | 定義方法 | 引用資料型別——類 | 訪問許可權-修飾符 | 全域性變數與區域性變數 | toString | 構造方法 | 方法過載

技術標籤:筆記java

前面提到的,氣泡排序,二分查詢,我們有時候寫程式碼可能不止要查到一種陣列的資料,這時候我們就很需要想迴圈那樣的結構,來幫我們解決程式碼冗餘的情況。
我們前面使用的main方法,是一個java程式的入口,我們可以把我們的氣泡排序、二分查詢的方法的程式碼,寫在方法裡,不是方法套方法哦,這是不允許的。

1 定義方法

定義方法,可以這樣分類:
1 、方法的( ) ,括號中如果有填入形參,就是 有參方法(形參) ,沒有的話,就是 無參方法()
2、方法是否有返回值,且根據返回值的型別選擇 如果是無返回值,就是void ,如果返回int,就用int,如果是有返回值型別的,切記要加上return。

下面來分析一下二分查詢的這個程式碼

public class Test02 {
    public static void main(String[] args) {
        int[] array = new int[10000];
        for (int i = 0; i < array.length; i++) {
            array[i] = i;
        }
        //後半部分,是給二分查詢方法傳入主方法的資料,前半部分是,得到其返回值
        //不然我們只調用了這個方法,就沒有去得到我們想要的值,無論是沒有找到的-1
        //還是找到的那個值,就沒有意義
int r = search(array,8888); System.out.println(r); } //返回值型別為 int 型別 ,且是有參方法 public static int search(int[] arr, int a){ int start = 0; int end = arr.length - 1; while(start<=end){ int middle = (start + end)/2; if (arr[middle]
== a){ //如果要查詢的這個數就是中間值,我們主方法中需要這個值,我們得返回 return middle; }else if (a > arr[middle]){ start = middle + 1 ; }else if (a < arr[middle]){ end = middle - 1 ; } } //如果陣列找不到這個值,就返回-1,以告訴程式設計師。 return -1; } }

2 引用資料型別——類

在java中只要建立了一個類,就是一個數據型別,類是一個模板,只有特徵,沒有具體資料
根據類在每個特徵上輸入對應的值,就會形成資料。

在java中 建立資料 需要用到關鍵詞——new

//這個cat是物件,就是類中的一個例項
Cat cat = new Cat();
public void Cat(){
	public String name ;
	public int age ;
	public String type ;
}

建立了特徵後,需要對其進行賦值,如果不賦值,也會有預設值,預設值參考第四天的內容

cat.name = "胖熊";
cat.age = 1 ;
cat.type = "英短";

獲取一條具體的資料

System.out.println(cat.name+cat.age+ "歲" +cat.type);

在給特徵賦值的時候,有可能會涉及到一些判斷,比如說,沒有負歲數的物件,所以,對其特徵賦值的時候,我們可以在類裡的歲數的特徵,對其進行判斷

set方法進行賦值的時候,引數本來就是給屬性複製的,賦值時候,變數名要加字尾,不能和屬性重名,這裡涉及一個區域性變數與全域性變數的重名問題

public void setAge(int age) {
    if (age > 0){
        this.age = age;
    }else {
        age = 0 ;
    }
}

3 訪問許可權-修飾符

雖然我們對特徵進行判斷,但是在訪問特徵的時候,我們現在使用的方式是點訪問,就還是可以隨心所欲的將貓咪設成不可能是歲數。相對的,有另一種比較安全訪問private,這種修飾符下的特徵則需要通過特殊的方式進行訪問,就不會隨便接受不合理的賦值了

public class Cat {
    private String name;
    private int age;
    private String type;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age > 0){
            this.age = age;
        }else {
            age = 0 ;
        }
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}
public class Test01 {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.setName("胖熊");
        cat.setAge(1);
        cat.setType("英短 純白");
        System.out.println(cat.getName()+cat.getAge()+ "歲" +cat.getType());
    }
}

private修飾的特徵叫屬性,屬性私有化,給私有屬性賦值和取值的方式就是 set get

4 全域性變數與區域性變數

如果寫在類中特徵的屬性的作用範圍就是當前類——全域性變數 類中定義
如果變數在方法內定義或者方法引數上定義 作用範圍就是當前方法——區域性變數 方法中定義
區域性變數距離使用的變數近
全域性變數距離使用的變數遠
區域性變數是方法中的一個引數
全域性變數是類中的一個屬性
this關鍵字區別區域性變數和全域性變數 this.當前變數=值
在我們的案例中,現在使用的是哪個物件 this就是誰 ,誰現在呼叫了set方法 this就是誰

public void setAge(int age) {
        if (age > 0){
            this.age = age;
        }else {
            age = 0 ;
        }
        //類中的當前物件
        System.out.println(this);
    }
public static void main(String[] args) {
        Cat cat = new Cat();
        cat.setName("胖熊");
        cat.setAge(1);
        cat.setType("英短 純白");
        //System.out.println(cat.getName()+cat.getAge()+ "歲" +cat.getType());

        System.out.println(cat);

        Cat cat1 = new Cat();
        cat1.setAge(1);
        System.out.println(cat1);
    }
輸出:
Demo.Cat@1b6d3586
Demo.Cat@1b6d3586
Demo.Cat@4554617c
Demo.Cat@4554617c

5 toString

在上面的程式碼中,我們獲取一個物件的全部資料的時候,我們會自己拼接起來,實際上在java中,有一個toString方法,在物件被列印的時候,會被預設呼叫。

@Override
public String toString() {
    return "Cat{" +
            "name='" + name + '\'' +
            ", age=" + age +
            ", type='" + type + '\'' +
            '}';
}
public class Test01 {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.setName("胖熊");
        cat.setAge(1);
        cat.setType("英短 純白");
        System.out.println(cat);
    }
}
輸出:
Cat{name='胖熊', age=1, type='英短 純白'}

6 構造方法

只要我們創造了類,在類中就會有一個預設的無參構造方法,這個構造方法就是為了給我們進行物件的建立

public Cat() {
}

只要我們自己寫了構造方法,其預設的構造方法就會失效。
現在寫一個帶參的構造方法,有了這個構造方法,建立物件的時候,就會指引我們如何建立,我們就按照格式創造就可以,邊創造邊賦值。

//帶參構造方法
public Cat(String name, int age, String type) {
        this.name = name;
        this.age = age;
        this.type = type;
    }

在這裡插入圖片描述

Cat cat = new Cat("胖熊",1,"英短 純白");

7 方法過載

一個類中不能有兩個相同的方法,但是我們在創造物件的時候,不想要它因為我們的有參構造方法的存在而報錯,可以使用方法過載

在一個類中,方法名相同,引數列表不同 就是方法過載
引數列表不同可以是以下表現:
1、引數的個數不同 無參 有參
2、引數的順序不同 String int int String
3、引數的型別不同 int String