常見API整理【static關鍵字、數組工具類Arrays、Math類】

(一)、static關鍵字

1. 靜態static關鍵字概述

在這裏插入圖片描述

2. 定義和使用格式

  • static 修飾成員變量時,該變量稱爲類變量。該類的每個對象都共享同一個類變量的值。任何對象都可以更改該類變量的值,但也可以在不創建該類的對象的情況下對類變量進行操作。
  • 類變量:使用 static關鍵字修飾的成員變量。
  • 定義格式:
  • static 數據類型 變量名;

比如說,基礎班新班開班,學員報到。現在想爲每一位新來報到的同學編學號(sid),從第一名同學開始,sid爲1,以此類推。學號必須是唯一的,連續的,並且與班級的人數相符,這樣以便知道,要分配給下一名新同學的學號是多少。這樣我們就需要一個變量,與單獨的每一個學生對象無關,而是與整個班級同學數量有關。所以,我們可以這樣定義一個靜態變量numberOfStudent,代碼如下:

public class Student {
		private String name;
		private int age;
		// 學生的id
		private int sid;
		// 類變量,記錄學生數量,分配學號
		public static int numberOfStudent = 0;

		public Student(String name, int age) {
			this.name = name;
			this.age = age;
			// 通過 numberOfStudent 給學生分配學號
			this.sid = ++numberOfStudent;
		}

		// 打印屬性值
		public void show() {
			System.out.println("Student : name=" + name + ", age=" + age + ", sid=" + sid);
		}
	}
	public class StuDemo {
		public static void main(String[] args) {
			Student s1 = new Student("張三", 23);
			Student s2 = new Student("李四", 24);
			Student s3 = new Student("王五", 25);
			Student s4 = new Student("趙六", 26);
			s1.show(); // Student : name=張三, age=23, sid=1
			s2.show(); // Student : name=李四, age=24, sid=2
			s3.show(); // Student : name=王五, age=25, sid=3
			s4.show(); // Student : name=趙六, age=26, sid=4
		}
	}

3. 靜態方法

static修飾成員方法時,該方法稱爲類方法。靜態方法在聲明中有static,建議使用類名來調用,而不需要創建類的對象。調用方式非常簡單。

  • 類方法:使用 static關鍵字修飾的成員方法,習慣稱爲靜態方法。
  • 定義格式:
修飾符 static 返回值類型 方法名(參數列表){
	//執行語句
}
  • 靜態方法調用的注意事項:
    ①、靜態方法可以直接訪問類變量和靜態方法。
    ②、靜態方法不能直接訪問普通成員變量或成員方法。反之,成員方法可以直接訪問類變量或靜態方法。
    ③、靜態方法中,不能使用this關鍵字。

【注意】:靜態方法只能訪問靜態成員。【原因】:因爲在內存當中是先有的靜態內容;後有的非靜態內容。

4. 調用格式

  • 一旦使用static修飾成員方法,那麼這就成爲了靜態方法。靜態方法不屬於對象,而是屬於類的。

  • ①、如果沒有static關鍵字,那麼必須首先創建對象,然後通過對象才能使用它。
    ②、如果有了static關鍵字,那麼不需要創建對象,直接就能通過類名稱來使用它。

  • 無論是成員變量,還是成員方法。如果有了static,都推薦使用類名稱進行調用。
    靜態變量:類名稱.靜態變量
    靜態方法:類名稱.靜態方法

  • 被static修飾的成員可以並且建議通過類名直接訪問。雖然也可以通過對象名訪問靜態成員,原因即多個對象均屬於一個類,共享使用同一個靜態成員,但是不建議,會出現警告信息。

格式:

// 訪問類變量
類名.類變量名;

// 調用靜態方法
類名.靜態方法名(參數);

調用演示,代碼如下:
首先、創建一個MyClass的類。

public class MyClass {
	public void method() {
		System.out.println("這是一個普通的成員方法。");
	}
	public static void methodStatic() {
		System.out.println("這是一個靜態方法。");
	}
}

然後再創建一個類,進行調用MyClass類中的方法。

public class Demo02Static {
	public static void main(String[] args) {
		MyClass obj = new MyClass();//首先創建對象
		//然後才能使用沒有static關鍵字的內容
		obj.method();
		
		//對於靜態方法來說,可以通過對象名進行調用,也可以直接通過類名稱來調用
		obj.methodStatic();//正確,不推薦;這種寫法在編譯之後也會被javac翻譯成爲" 類名稱.靜態方法名 "
		MyClass.methodStatic();//正確,推薦
		
		//對於本來當中的靜態方法,可以省略類名稱
		myMethod();
		Demo02Static.myMethod();//與上面的調用完全等效
	}
	
	public static void myMethod() {
		System.out.println("自己的方法!!");
	}
}

運行結果如下:

這是一個普通的成員方法。
這是一個靜態方法。
這是一個靜態方法。
自己的方法!!
自己的方法!!

5. 靜態static的內存圖

在這裏插入圖片描述

6. 靜態代碼塊

  • 特點:當第一次用到本類時,靜態代碼塊執行唯一的一次。
  • 靜態內容總是優先於非靜態,所以靜態代碼塊比構造方法先執行
  • 靜態代碼塊的典型用途:用來一次性地對靜態成員變量進行賦值。
  • 靜態代碼塊:定義在成員位置,使用static修飾的代碼塊{ }。
    位置:類中方法外。
    執行:隨着類的加載而執行且執行一次,優先於main方法和構造方法的執行。

格式:

public class ClassName{
	static {
		// 執行語句
	}
}

作用:給類變量進行初始化賦值。用法演示,代碼如下:

public class Game {
	public static int number;
	public static ArrayList<String> list;
		static {
		// 給類變量賦值
		number = 2;
		list = new ArrayList<String>();
		// 添加元素到集合中
		list.add("張三");
		list.add("李四");
	}
}

(二)、數組工具類Arrays

  • java.util.Arrays是一個與數組相關的工具類,裏面提供了大量靜態方法,用來實現數組常見的操作
  • public static String toString(數組):將參數數組變成字符串(按照默認格式:[元素1,元素2,元素3,…])
  • public static void sort(數組):按照默認升序(從小到大)對數組的元素進行升序。
int[] intArray = {10,20,30};
//將int[]數組按照默認格式變成字符串
String intStr = Arrays.toString(intArray);
System.out.println(intStr);//[10, 20, 30]
		
int[] array1 = {2,1,3,10,6};
Arrays.sort(array1);
System.out.println(Arrays.toString(array1));//[1, 2, 3, 6, 10]
		
String[] array2 = {"aaa","bbb","ccc"};
Arrays.sort(array2);
System.out.println(Arrays.toString(array2));//[aaa, bbb, ccc]

注意:
1.如果是數值,sort默認按照升序從小到大
2.如果是字符串,sort默認按照字母升序
3.如果是自定義的類型,那麼這個自定義的類需要有Comparable或者Comparator接口的支持。

(三)、Math類

  • java.lang.Math類包含用於執行基本數學運算的方法,如初等指數、對數、平方根和三角函數。類似這樣的工具類,其所有方法均爲靜態方法,並且不會創建對象,調用起來非常簡單。

1. 基本運算方法

  • public static double abs(double a):返回 double 值的絕對值。
double d1 = Math.abs(5); //d1的值爲5
double d2 = Math.abs(5); //d2的值爲5
  • public static double ceil(double a) :返回大於等於參數的最小的整數。
double d1 = Math.ceil(3.3); //d1的值爲 4.0
double d2 = Math.ceil(3.3); //d2的值爲 ‐3.0
double d3 = Math.ceil(5.1); //d3的值爲 6.0
  • public static double floor(double a) :返回小於等於參數最大的整數
double d1 = Math.floor(3.3); //d1的值爲3.0
double d2 = Math.floor(3.3); //d2的值爲‐4.0
double d3 = Math.floor(5.1); //d3的值爲 5.0
  • public static long round(double a) :返回最接近參數的 long。(相當於四捨五入方法)
long d1 = Math.round(5.5); //d1的值爲6.0
long d2 = Math.round(5.4); //d2的值爲5.0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章