1.Math類
1.1 Math類概述
Math包含執行基本數字運算的方法
沒有構造方法,如何使用類中的成員呢? 看類的成員是否是靜態的,如果是,可以通過類名直接呼叫
1.2Math類的常用方法
public class MyMathDemo01 { public static void main(String[] args) { //返回引數的絕對值 System.out.println(Math.abs(88)); System.out.println(Math.abs(-88)); System.out.println("***********************"); //返回大於等於引數的最小的double值,等於一個整數 System.out.println(Math.ceil(12.65)); System.out.println(Math.ceil(12.15)); System.out.println("******************"); //返回小於或等於引數的最大double值,等於一個整數 System.out.println(Math.floor(12.45)); System.out.println(Math.floor(12.78)); System.out.println("*******************"); //按著四捨五入返回最接近引數的int System.out.println(Math.round(10.50F)); System.out.println(Math.round(10.15F)); System.out.println("*****************"); //返回連個int值中的較大值 System.out.println(Math.max(12,35)); System.out.println("*****************"); //返回連個int值中的較大值 System.out.println(Math.min(213,56)); System.out.println("**************"); //返回a的b次冪的值 System.out.println(Math.pow(2.0,5.0)); System.out.println("*************"); //返回值為double的正值, [0.0,1.0) System.out.println(Math.random()); System.out.println(Math.random()*100);//double型別的 System.out.println((int)(Math.random()*100));// 0-99的整數 System.out.println((int)(Math.random()*100)+1);// 0-100的整數 } }
public class MyMathDemo01 { public static void main(String[] args) { //返回引數的絕對值 System.out.println(Math.abs(88)); System.out.println(Math.abs(-88)); System.out.println("***********************"); //返回大於等於引數的最小的double值,等於一個整數 System.out.println(Math.ceil(12.65)); System.out.println(Math.ceil(12.15)); System.out.println("******************"); //返回小於或等於引數的最大double值,等於一個整數 System.out.println(Math.floor(12.45)); System.out.println(Math.floor(12.78)); System.out.println("*******************"); //按著四捨五入返回最接近引數的int System.out.println(Math.round(10.50F)); System.out.println(Math.round(10.15F)); System.out.println("*****************"); //返回連個int值中的較大值 System.out.println(Math.max(12,35)); System.out.println("*****************"); //返回連個int值中的較大值 System.out.println(Math.min(213,56)); System.out.println("**************"); //返回a的b次冪的值 System.out.println(Math.pow(2.0,5.0)); System.out.println("*************"); //返回值為double的正值, [0.0,1.0) System.out.println(Math.random()); System.out.println(Math.random()*100);//double型別的 System.out.println((int)(Math.random()*100));// 0-99的整數 System.out.println((int)(Math.random()*100)+1);// 0-100的整數 } }
2. System類
2.1 System類概述
System包含幾個有用的類欄位和方法,它不能被例項化
public class SystemDemo01 { public static void main(String[] args) { /*System.out.println("開始"); //終止當前執行的Java虛擬機器,非零表示異常終止 System.exit(0); System.out.println("結束");*/ //返回當前時間(以毫秒為單位) System.out.println(System.currentTimeMillis()); //據1970年共多少年 System.out.println(System.currentTimeMillis()*1.0/1000/60/60/24/365+"年"); //執行一個程式所用的時間 long start = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { System.out.println(i); } long end = System.currentTimeMillis(); System.out.println("共耗時"+(end - start) + "毫秒"); } }
3.Object類
3.1 Object類的概述
Object是類層次結構的根,每個類都可以將Object作為超類,所有類都直接或者間接的繼承自該類
構造方法: public Object()
為什麼說子類的構造方法預設訪問的是父類的無參構造方法?
因為他們的頂級父類只有無參構造方法
實體類
public class Student { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student() { } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
測試類
/* 建議所有子類重寫toString方法 */ public class ObjectDemo { public static void main(String[] args) { Student s = new Student(); s.setName("浪浪"); s.setAge(20); System.out.println(s);//未重寫toString()時,com.lang_01.Student@4554617c System.out.println(s.toString());//未重寫toString()時,com.lang_01.Student@4554617c /* public void println(Object x) { //x = s String s = String.valueOf(x); synchronized (this) { print(s); newLine(); } }*/ /* public static String valueOf(Object obj) { obj =x return (obj == null) ? "null" : obj.toString(); }*/ /*public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }*/ } }
3.2 Object類的常用方法
實體類
public class Student { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student() { } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } @Override public boolean equals(Object o) { /* this ----s1 o ---- s2 */ //判斷地址是否相同,如果相同,直接範湖true if (this == o) { return true; } //判斷引數是否為null //判斷物件是否來自一個類 if (o == null || getClass() != o.getClass()) { return false; } //向下轉型 Student student = (Student) o; //student = S2; //比較年齡是否相同 if (age != student.age) { return false; } //比較姓名是否相同 return name != null ? name.equals(student.name) : student.name == null; } @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + age; return result; } }
測試類
public class ObjectDemo01 { public static void main(String[] args) { Student s1 = new Student(); s1.setName("浪浪"); s1.setAge(20); Student s2 = new Student(); s2.setName("浪浪"); s2.setAge(20); //需求: 比較兩個物件的內容是否相同 System.out.println(s1 == s2);//false System.out.println(s1.equals(s2));//未重寫實體類中的equals()方法時,結果為:false /* public boolean equals(Object obj) { //this ---- s1 //obj ----- s2 return (this == obj); } */ } }
4.Arrays類
4.1 氣泡排序
排序:將一組資料按照固定的規則進行排列
-
如果有n個資料進行排序,總共需要比較n-1次
-
每一次比較完畢,下一次比較就會少一個資料
氣泡排序:一種排序的方式,對要進行排列的資料中相鄰的資料進行兩兩比較,將較大的資料放在後面,依次對所有資料進行操作,直至所有資料按照要求完成排序
public class ArrayDemo { public static void main(String[] args) { //定義一個陣列 int[] arr = {24, 45, 92, 14, 64}; System.out.println("排序前:"+ arrayToString(arr)); /*//第一次比較 for (int i = 0; i<arr.length-1;i++){ if (arr[i] > arr[i+1]){ int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } System.out.println("第一次比較後:"+arrayToString(arr)); //第二次比較 for (int i = 0; i<arr.length-1-1;i++){ if (arr[i] > arr[i+1]){ int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } System.out.println("第二次比較後:"+arrayToString(arr)); //第三次比較 for (int i = 0; i<arr.length-1-2;i++){ if (arr[i] > arr[i+1]){ int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } System.out.println("第三次比較後:"+arrayToString(arr)); //第四次比較 for (int i = 0; i<arr.length-1-3;i++){ if (arr[i] > arr[i+1]){ int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } System.out.println("第四次比較後:"+arrayToString(arr));*/ //優化後 for (int x = 0; x < 4; x++) { for (int i = 0; i < arr.length-1-x; i++) { if (arr[i]>arr[i+1]){ int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } } System.out.println("優化後:"+ arrayToString(arr)); } //把陣列中的元素按照指定的規則組成一個字串:【元素1,元素2】 public static String arrayToString(int[] arr){ StringBuilder sb = new StringBuilder(); sb.append("["); for (int i = 0; i < arr.length; i++) { if (i == arr.length-1){ sb.append(arr[i]); }else { sb.append(arr[i]).append(","); } } sb.append("]"); String s = sb.toString(); return s; } }
4.2 Arrays 類的概述和常用方法
工具類的設計思路:
-
構造方法用private修飾
-
成員用public static修飾
5.基本型別包裝類
5.1基本型別包裝類概述
將基本資料型別封裝成物件的好處在於可以在物件中定義更多的功能方法操作該資料常用的操作之一:用於基本型別與字串之間的轉換
5.2 Integer 類的概述和使用(列舉一種)
Integer:包裝一個物件中的原始型別int值
public class IntegerDemo { public static void main(String[] args) { //根據int值建立Integer 物件(過時)【不建議使用】 Integer i1 = new Integer(100); System.out.println(i1); //根據String值建立Integer物件(過時)【不建議使用】 //Integer i2 = new Integer("abc");//java.lang.NumberFormatException Integer i2 = new Integer("100"); System.out.println(i2); //返回表示指定的int值的Integer例項【推薦使用】 Integer i3 = Integer.valueOf(100); System.out.println(i3); //返回一個儲存指定值的Integer物件String【推薦使用】 Integer i4 = Integer.valueOf("1010"); System.out.println(i4); } }
5.3 int 和String的相互轉換
基本型別包裝類的最常見操作就是:用於基本型別和字串之間的相互轉換
1.int 轉換為 String
public static String valueOf(int i): 返回int引數的字串表示形式。該方法是String類中的方法
2.String 轉換為 int
public static int parseInt(String s): 將字串解析為int型別。該方法時Integer類中的方法
/* int和String的相互轉換 */ public class IntegerDemo { public static void main(String[] args) { //int -----String int number = 100; //方式1 String s1 = "" + number; System.out.println(s1); //方式2 String s2 = String.valueOf(number); System.out.println(s2); System.out.println("******************"); //String ------ int String s = "100"; //方式1 int i = Integer.valueOf(s); System.out.println(i); //方法2 int i1 = Integer.parseInt(s); System.out.println(i1); //方法3 String ---- Integer ---- int Integer x = Integer.valueOf(s); int i2 = x.intValue(); System.out.println(i2); }
字串中資料排列
需求:有一個字串:“91 26 79 65 20” ,請寫程式實現最終輸出結果是:“20 26 65 79 91”
思路:
1.定義一個字串
2.把字串中的數字資料儲存到一個int型別的陣列中
① 得到字串中每一個數字資料
public String[] split(String regex)
② 定義一個int陣列,把String[] 陣列中的每一個元素儲存到int陣列中
public static int parseInt(String s)
③ 對int陣列進行排序
④ 把排序後的int陣列中的元素進行拼接得到一個字串,這裡拼接採用StringBuilder來實現
⑤ 輸出結果
public class IntegerTest { public static void main(String[] args) { //定義一個字串 String s = "91 26 79 65 20"; //把字串中的數字資料儲存到一個int型別的陣列中 String[] strArray = s.split(" "); /*for (int i = 0; i < strArray.length; i++) { System.out.println(strArray[i]); }*/ //定義一個int陣列,把String[] 陣列中的每一個元素儲存到int陣列中 int[] arr = new int[strArray.length]; for (int i = 0; i<arr.length; i++){ arr[i] = Integer.parseInt(strArray[i]); } //對 int 陣列進行排序 Arrays.sort(arr); //排好序後的int陣列中的元素進行拼接得到一個字串,這裡拼接採用StringBuilder來實現 StringBuilder sb = new StringBuilder(); for (int i = 0;i<arr.length; i++){ if (i == arr.length-1){ sb.append(arr[i]); }else { sb.append(arr[i]).append(" "); } } String result = sb.toString(); System.out.println("result:"+result); } }
5.4 自動裝箱和拆箱
-
裝箱:把基本資料型別轉換為對應的包裝類型別
-
拆箱:把包裝類型別轉換為對應的基本資料型別
注意: 在使用包裝類型別的時候,如果做操作,最好先判斷是否為null
我們推薦的是,只要是物件,在使用前就必須進行不為null的判斷
public class IntegerDemo { public static void main(String[] args) { //裝箱: 把基本型別資料轉為對應的包裝型別 Integer i = Integer.valueOf(100); Integer ii = 100;//Integer.valueOf(100); //拆箱:把包裝型別轉換為對應的基本資料型別 //ii = ii.intValue() + 200; ii += 100; System.out.println(ii); Integer iii = null; if (iii!= null){ iii += 300;//不判斷會報錯,java.lang.NullPointerException } System.out.println(iii); } }
日期類
6.1 Date 類概述和構造方法
Date代表了一個特定的時間,精確到毫秒
public class MyDateDemo { public static void main(String[] args) { //分配一個Date物件,並初始化,以便它代表它被分配的時間,精確到毫秒 Date d1 = new Date(); System.out.println(d1); //分配一個Date物件,並將其初始化為表示從標準基準時間起指定的毫秒數 long date = 1000*60*60; Date d2 = new Date(date); System.out.println(d2); } }
6.2 Date 類的常用方法
public class MyDateDemo02 { public static void main(String[] args) { //建立日期物件 Date d = new Date(); //getTime()獲取的是時間物件從1970年1月1日 00:00:00:到現在 System.out.println(d.getTime()); System.out.println(d.getTime()*1.0/1000/60/60/24/365); //setTime(long time) 設定時間,給的是毫秒值 long time = System.currentTimeMillis(); d.setTime(time); System.out.println(d); } }
6.3 SimpleDateFormat 類概述
SimpleDateFormat是一個具體的類,用於以區域設定敏感的方式格式化和解析日期。我們重點學習日期格式化和解析
日期和時間格式由日期和時間模式字串指定,在日期和時間模式字串中,從'A' 到 'Z' 以及從 'a' 到 'z' 引號的字母被解釋為表示日期或時間字串的元件的模式字母
-
y 年
-
M 月
-
d 日
-
H 時
-
m 分
-
s 秒
6.4 SimpleDateFormat 的構造方法
6.5 SimpleDateFormat 格式化和解析日期
1. 格式化(從Date 到 String)
public final String format(Date date): 將日期格式化成日期/時間字串
2. 解析(從 String 到 Date)
public Date parse(String source): 從給定字串的開始解析文字以生成日期
public class SimpleDateFormatDemo { public static void main(String[] args) throws ParseException { //格式化: 從 Date 到 String Date d = new Date(); //SimpleDateFormat sdf = new SimpleDateFormat(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String s = sdf.format(d); System.out.println(s); System.out.println("****************"); //從 String 到 Date String ss = "2020-09-08 17:11:25"; SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); /* java.text.ParseException: 給它的型別 得和你設定的型別一樣才能解析到 */ Date dd = sdf2.parse(ss); System.out.println(dd); }
日期工具類
需求:定義一個日期工具類(DateUtils),包含兩個方法,把日期轉換為指定格式的字串;把字串解析為指定格式日期,然後定義一個測試類(DateDemo),測試日期工具類的方法
思路:
① 定義日期工具類(DateUtils)
② 定義一個方法dateToString,用於把日期轉換為指定格式的字串
-
返回值型別:String
-
引數:Date date,String format
③ 定義一個方法stringToDate,用於字串解析為指定格式的日期
-
返回值型別:Date
-
引數:String s , String format
④ 定義測試類DateDemo,呼叫日期工具類中的方法
時間工具類
/* 工具類 構造方法私有 成員方法靜態 */ public class DateUtils { public DateUtils() { } /* 定義一個方法dateToString,用於把日期轉換為指定格式的字串 返回值型別:String 引數:Date date,String format */ public static String dateToString(Date date, String format){ SimpleDateFormat sdf = new SimpleDateFormat(format); String s = sdf.format(date); return s; } /* 定義一個方法stringToDate,用於字串解析為指定格式的日期 返回值型別:Date 引數:String s , String format */ public static Date StringToDate(String s,String format) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat(format); Date d = sdf.parse(s); return d; } }
public class DateDemo { public static void main(String[] args) throws ParseException { //建立一個時間物件 Date d = new Date(); String s1 = DateUtils.dateToString(d,"yyyy年MM月dd日 HH:mm:ss"); System.out.println(s1); String s2 = DateUtils.dateToString(d,"yyyy年MM月dd日"); System.out.println(s2); String s3 = DateUtils.dateToString(d,"HH:mm:ss"); System.out.println(s3); System.out.println("**********************"); //需格式一致 String s = "2020-09-08 17:32:20"; Date dd = DateUtils.StringToDate(s,"yyyy-MM-dd HH:mm:ss"); System.out.println(dd); } }
6.6 Calendar 類概述
calendar為某一時刻和一組日曆欄位之間的轉換提供了一些方法,併為操作日曆欄位提供了一些方法
calendar提供了一個類方法getInstance用於獲取Calendar物件,其日曆欄位已使用當前日期和時間初始化:
calendar rightNow = Calendar.getInstance();
public class CalendarDemo { public static void main(String[] args) { //獲取物件 Calendar c = Calendar.getInstance();//多型的形式 //System.out.println(c); //public int get(int field) int year = c.get(Calendar.YEAR); int mouth = c.get(Calendar.MONTH)+1; //Calendar.MONTH 範圍是 0-11 int date = c.get(Calendar.DATE); System.out.println(year + "年" + mouth + "月" + date + "日"); } }
6.7 Calendar 的常用方法
public class CalendarDemo { public static void main(String[] args) { //獲取物件 Calendar c = Calendar.getInstance();//多型的形式 //System.out.println(c); //public int get(int field) /*int year = c.get(Calendar.YEAR); int mouth = c.get(Calendar.MONTH)+1; //Calendar.MONTH 範圍是 0-11 int date = c.get(Calendar.DATE); System.out.println(year + "年" + mouth + "月" + date + "日");*/ //add()根據日曆的規則,將制定的時間量新增或減去給定的日曆欄位 //需求一:3年前的今天 /*c.add(Calendar.YEAR,-2); int year = c.get(Calendar.YEAR); int mouth = c.get(Calendar.MONTH)+1; //Calendar.MONTH 範圍是 0-11 int date = c.get(Calendar.DATE); System.out.println(year + "年" + mouth + "月" + date + "日");*/ //需求2:10年後的5天前 c.add(Calendar.YEAR,10); c.add(Calendar.DATE,-5); int year = c.get(Calendar.YEAR); int mouth = c.get(Calendar.MONTH)+1; //Calendar.MONTH 範圍是 0-11 int date = c.get(Calendar.DATE); System.out.println(year + "年" + mouth + "月" + date + "日"); //set(int year,int month,int date) 設定當前日曆的年月日 c.set(2048,11,11); int y = c.get(Calendar.YEAR); int m = c.get(Calendar.MONTH)+1; int d = c.get(Calendar.DATE); System.out.println(y + "年" + m + "月" + d + "日" ); } }
二月天
需求:獲取任意一年的二月有多少天
思路:
①鍵盤錄入任意的年份
②設定日曆物件的年、月、日
-
年:來自於鍵盤錄入
-
月:設定為3月,月份是從0開始的,所以設定的值是2
-
日:設定為1日
③ 3月1日往前推一天,就是2月的最後一天
④獲取這一天輸出即可
public class calendarTest { public static void main(String[] args) { //從鍵盤錄入任意的年份 Scanner sc = new Scanner(System.in); System.out.println("輸入年份:"); int year = sc.nextInt(); //設定日曆物件的年、月、日 Calendar c = Calendar.getInstance(); c.set(year,2,1); //3月1日往前推一天,就是2月的最後一天 c.add(Calendar.DATE,-1); //獲取這一天輸出即可 int date = c.get(Calendar.DATE); System.out.println(year+"年的2月份有" + date + "天"); } }