1. 程式人生 > 實用技巧 >Arrays類+Math類+三大特徵--繼承

Arrays類+Math類+三大特徵--繼承

Arrays類

概述

java.util.Arrays 此類主要是用來運算元組,裡面提供了很多的運算元組的API方法,如排序搜尋功能。其所有的方法均為靜態方法,呼叫起來非常簡單

運算元組的方法

  • public static String toString(int[] a);//返回指定陣列內容的字串表示形式
public static void main(String[] args){
    //初始化一個int型別的陣列  動態初始化只指定長度,不指定內容,而靜態初始化只指定內容,不指定長度,兩者不能混合使用
    int[] arr={12,345,112,78,489};
    //列印陣列,輸出記憶體地址值
    System.out.println(arr);//地址值
    //把陣列內容轉換成字串
    String str=Arrays.toString(arr);
    //列印字串,輸出陣列內容
    System.out.println(str);//[12,345,112,78,489] 內容順序不變
}
  • public static void sort(int[] arr):對指定的int陣列按照數字升序進行排序。從小到大
public static void main(String[] args){
    //定義一個int型別的陣列
    int[]arr={12,345,112,78,489};
    //輸出排序前的內容
    System.out.println(Arrays.toString(arr));//排序前[12,345,112,78,489]
    //升序排序
    Arrays.sort(arr);
    System.out.println(Arrays.toString(arr));//排序後
結果:[12,78,112,345,489]

練習:使用Arrays相關的A PI 方法,將一個隨機字串中的所有字元按照升序排序,倒序列印輸出

public static void main(String[] args){
    //定義一個int型別的陣列
    int[]arr={12,345,112,78,489};
    //輸出排序前的內容
    System.out.println(Arrays.toString(arr));//排序前[12,345,112,78,489]
    //升序排序
    Arrays.sort(arr);
    System.out.println(Arrays.toString(arr));//排序後
結果:[12,78,112,345,489]
  • public static int binarySearch(int[] arr,int Key):
    此時key指的是要搜尋的值,而方法返回值宣告的int指的是搜尋值對應的索引值。
    注:使用binarySearch()方法,搜尋陣列當中的元素時,陣列必須是有序的。【升序】
      得到的索引值是排序之後的新的陣列的索引值;如果沒有找到對應的元素值,得到的索引值是負值。
public static void main(String[] args){
    //定義一個int型別的陣列
    int[] arr={10,20,5,30,40,15,18}
    //對arr陣列進行排序
    Arrays.sort(arr);
    //搜尋5這個數值在arr陣列當中的索引值
    int index=Arrays.binarySearch(arr,5);//-1
    //列印輸出index的值
    System.out.println("s在arr陣列當中的索引值為:"+index);
}
  • public static void fill(int[]arr,int val):將指定的int值分配給指定int 型陣列的每個元素
public static void main(String[] args){
    //定義一個int陣列
    int[] arr={10,20,5,30,40,15,18};
    //想要把100元素值分配給arr陣列
    Arrays.fill(arr,100);//填滿陣列當中的每個元素
    //列印輸出
    System.out.println(Arrays.toString(arr))//[100,100,100,100,100,100,100]
}

Math類

概述

  java.util.Math包含了用於執行基本數學運算的方法,如指數,冪次方,對數,平方根,三角函式等運算。裡面的方法均是靜態方法,並且也不需要建立物件,呼叫起來也是非常方便。

基本運算的方法

  • public static double abs(double a):返回double值的絕對值.
double d1=Math.abs(-5.3);//d1的值為5.3
double d2=Math.abs(5.3);//d2的值為5.3
double d3=Math.abs(0.0);//d3的值為0.0
  • public static double ceil(double a): 返回大於等於引數的最小整數。往上取整
double d1=Math.ceil(5.3)//d1的值為6.0
double d2=Math.ceil(5.9)//d2的值為6.0
double d3=Math.ceil(-5.9)//d3的值為-5.0
  • public static double floor(double a):返回小於等於引數的最大整數。往下取整
double d1=Math.floor(5.9)//d1的值為5.0
double d2=Math.floor(5.1)//d2的值為5.0
double d3=Math.floor(-5.9)//d3的值為-6.0
  • public static int round(double a):返回最接近引數的int型別值。(相當於四捨五入運算)。
long d1=Math.round(5.5);//d1的值為6
long d2=Math.round(5.4)//d2的值為5
long d3=Math.round(-5.5)//d3的值為-5
long d4=Math.round(-5.6)//d4的值為-6

練習:使用Math相關的a p i方法,計算在-0.8到5.9之間,絕對值大於6或者小於2.1的整數有多少個,分別是哪些數字

public static void main(String[] args){
    double max=5.9;
    double min=-10.8;
    int count=0;//統計個數
    //開始遍歷迴圈 獲取整數
    for(int i=Math.ceil(min);i<=Math.floor(Max);i++){
        //判斷條件
        if(Math.abs(i)>6||Math.abs(i)<2.1){
            System.out.println((int)i+" ");
            count++;
        }
    }
    //列印輸出個數
    System.out.println("滿足條件整數個數為:"+count); 
}

繼承

概述

如果多個類中存在相同的屬性和行為時,將這些內容抽取到單獨的一個類中,那麼多個類就無需再定義這些屬性和行為,只要去繼承這個單獨的類即可。
其中,多個類稱為子類,派生類,單獨的那一個類稱為父類,超類(superclass),基類
繼承描述的是事物之間的所屬關係,這種關係是:is-a的關係,在繼承關係中,子類就是一個父類。也就是說,子類可以被當作父類看待
繼承是多型的前提,如果沒有繼承就沒有多型。

​ 父類也可以稱為基類、超類

​ 子類也可以稱為派生類

​ 繼承關係當中的特點:

​ 1.子類可以擁有父類的內容

​ 2.子類還可以擁有自己專有的內容

定義:

繼承:就是子類繼承父類的屬性和行為,使得子類物件具有與父類相同的屬性、相同的行為。子類可以直接訪問父類中的【非私有】的屬性和行為。

好處:

  • 可以提高程式碼複用性。
  • 類與類之間可以產生一種關係,是【多型】的前提。

繼承的格式

通過‘extends’關鍵字,可以宣告一個子類繼承另一個父類:

public class FuClass{
    //....
}
public class ZiClass extends FuClass{
    //.... 
}

程式碼演示:

/*
定義一個員工類Employee,父類

*/
public class Employee{
  String name;//name屬性
    int id;//工號屬性
    //定義一個員工的工作方法
    public void work(){
        System.out.println(name+"努力的工作")
    }
}
/*
    定義講師類theather  繼承 員工類Employee
*/
public class teacher extends Employee{
    //定義講師類中的專有的方法
    public void teach(){
        System.out.println(name+"在教課");
    } 
    
}
/*
定義一個測試類
*/
public class TestExtendsDemo01{
 public static void main(String[] args){
     //建立一個講師類
     Teacher t=new Tercher();
     //為該員工類的name屬性賦值
     t.name="小張";
     
     //呼叫該員工中的講課的方法
     t.teach();
     //呼叫Teacher類繼承過來的work()方法
     t.work();
     //為該員工類的name屬性賦值
     assistant.name="小王";
     //呼叫Assistant類繼承過來的work方法
     assistant.work();
 }      
}

繼承後的特點----成員變數

當類之間產生了關係後,其中各類中的成員變數有哪些影響?

成員變數不重名

如果子類父類中定義的成員變數名字不重名,這時的訪問沒有任何影響。

public class Fu{
    //定義一個變數
    int num=10;  
}
public class Zi extends Fu{
    //定義一個變數
    int num2=20;
    //定一個子類的成員方法
    public void show(){
        //訪問父類中的成員變數 num
        System.out.println("父類中的成員變數num="+num);//10繼承過來的,可以直接訪問
        //訪問子類中的成員變數 num2
        System.out.println("子類中的成員變數num2="+num2);//20
    }
}
public class TestExtendsField{
 public static viod main(String[] args){
     //建立子類的物件
     Zi zi=new Zi();
     //呼叫子類的方法
     zi.show();     
 }   

}
//演示結果
//10
//20
成員變數重名

如果子類父類中出現重名的成員變數,這時的訪問是有影響的。程式碼演示

public class Fu{
    //定義父類中的成員變數
    int num=10;
}
public class Zi extends Fu{
    //定義子類中的成員變數
      int num=20;
    //定義子類中的成員方法
    
    public void show(){
         //訪問父類中的成員變數 num
        System.out.println("父類中的成員變數num="+num);//20
        //訪問子類中的成員變數 num2
        System.out.println("子類中的成員變數num2="+num);//20
    }
    
    
}
 //結果展示
//20
//20

在父子類的繼承關係中,如果成員變數重名了,則建立子類物件時,訪問有兩種方式:

1.直接通過子類物件訪問成員變數:等號左邊是誰,就優先用誰,如果沒有會向上找

2.間接通過成員方法訪問成員變數:該方法屬於誰,就優先用誰,沒有則繼續向上找。

字父類中出現了重名的成員變數時,在子類中想要訪問父類中的非私有成員變數,需要使用super關鍵字,修飾父類的成員變數,類似於this操作。

使用格式:

super.父類的成員變數名;

子類方法中的程式碼需要修改

public class Zi extends Fu{
//定義子類中的成員變數
      int num=20;
    //定義子類中的成員方法
    
    public void show(){
         //訪問父類中的成員變數 num
        System.out.println("父類中的成員變數num="+super.num);//10
        //訪問子類中的成員變數 num2
        System.out.println("子類中的成員變數num2="+num);//20
}
    //結果展示
    //10
   //20

每個類的每個非靜態方法,都會隱含一個this關鍵字,當在方法中使用本類屬性時,都會隱含地使用this關鍵字
備註:Fu類中的成員變數是非私有的,子類中可以直接訪問,若父類中的成員變數私有了,子類不能直接訪問。通常編碼時,我們遵循的是封裝的原則,使用private關鍵字修飾成員變數,那麼如何訪問父類中的私有成員變數呢?可以藉助於父類中的提供的公共的setxxx和getxxx方法

繼承後的特點--------成員方法