之前有粉絲後臺跟我說,作為一個初學者,真的是不清楚該如何去進行學習,直接上ssm框架也看不明白,那我作為這麼一個寵粉的人,怎麼可能讓粉絲有這樣的顧慮啊,今天真的是基礎到極點了,分享我這邊的相應的一些程式碼例項,因為在程式碼的備註中已經寫的很清楚了,所以基本不會再透過文字進行講解
註釋+原始碼+結果,這邊應該展示的很清楚,也比較好理解,不過,一定要自己去實踐一下,不實踐再簡單的技術理解起來也不容易
而向多執行緒什麼的學習例項,我這邊之前的文章也整理過,大家可以去檢視,每一個都帶著相應的原始碼展示
好了,話不多說,看正題
Java基礎之:OOP——抽象類package com.biws.testabstract;/** * @author :biws * @date :Created in 2020/12/22 21:14 * @description:抽象類測試 */public class Abstract_Test { public static void main(String[] args) { Cat cat = new Cat("小花貓"); cat.eat(); } } abstract class Animal { //抽象類 private String name; public Animal(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } //eat , 抽象方法 public abstract void eat(); } //解讀//1. 當一個類繼承了抽象類,就要把抽象類的所有抽象方法實現//2. 所謂方法實現,指的是 把方法體寫出, 方法體是空,也可以. class Cat extends Animal { public Cat(String name) { super(name); // TODO Auto-generated constructor stub } public void eat() { System.out.println(getName() + " 愛吃 <・)))><<"); } }
然後呢,我們看一下多型的實現
package com.biws.testabstract;/** * @author :biws * @date :Created in 2020/12/22 21:17 * @description:多型在抽象類中的實現 */public class AbstractPolArray { public static void main(String[] args) { //抽象類不可以例項化,但可以使用多型陣列 Animal1[] animal1 = new Animal1[2]; animal1[0] = new Dog1("小黑狗"); animal1[1] = new Cat1("小花貓"); //多型陣列的使用 for (int i = 0; i < animal1.length; i++) { show(animal1[i]); } } //這裡不用擔心會傳入一個Animal型別的例項,因為Animal不能例項化 //編譯器不會透過,所以只會傳入Animal的子類例項 public static void show(Animal1 a) { a.eat(); //多型的使用 if(a instanceof Dog1) { ((Dog1)a).watch(); }else if(a instanceof Cat1) { ((Cat1)a).catchMouse(); } }}abstract class Animal1{ private String name; public Animal1(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } //動物都有eat的動作,但我們並不知道每一個動物具體怎麼樣eat //所以這裡透過抽象提供了eat方法,需要子類來實現 public abstract void eat();}class Dog1 extends Animal1{ public Dog1(String name) { super(name); } @Override public void eat() { System.out.println(getName() + "啃骨頭......"); } public void watch() { System.out.println(getName() + "守家....."); }}class Cat1 extends Animal1{ public Cat1(String name) { super(name); } @Override public void eat() { System.out.println(getName() + "吃魚......"); } public void catchMouse(){ System.out.println(getName() + "抓老鼠....."); }}
最後舉個小例子總結一下
package com.biws.testabstract;/** * @author :biws * @date :Created in 2020/12/22 21:24 * @description:模板設計模式 */public class Abstract_Template { public static void main(String[] args) { Template sub = new Sub(); sub.caleTimes(); //實際是呼叫了Template中的caleTimes方法 Template subStringB = new SubStringB(); subStringB.caleTimes(); //這裡可以看到 StringBuffer在拼接字串時,遠遠優於String拼接的效率 }}abstract class Template{ //抽象類 public abstract void code(); //抽象方法 public void caleTimes(){ // 統計耗時多久是確定 //統計當前時間距離 1970-1-1 0:0:0 的時間差,單位ms long start = System.currentTimeMillis(); code(); //這裡的code在呼叫時,就是指向子類中已經重寫實現了的code long end = System.currentTimeMillis(); System.out.println("耗時:"+(end-start)); }}class Sub extends Template{ @Override public void code() { String x = ""; for(int i = 0;i < 10000 ; i++) { //拼接1W個hello 看處理時間 x += "hello" + i; } }}class SubStringB extends Template{ @Override public void code() { StringBuffer stringBuffer = new StringBuffer(); for(int i = 0;i < 10000 ; i++) { //拼接1W個hello 看處理時間 stringBuffer.append("hello" + i); } }}
Java基礎之:StringBuffer與StringBuilder簡單直白點,直接一套程式碼走起
package com.biws.string;/** * @author :biws * @date :Created in 2020/12/22 21:27 * @description:String_StringBuffer_StringBuilder對比 */public class String_StringBuffer_StringBuilder { public static void main(String[] args) { // TODO Auto-generated method stub String text = ""; //字串 long startTime = 0L; long endTime = 0L; StringBuffer buffer = new StringBuffer("");//StringBuffer StringBuilder builder = new StringBuilder("");//StringBuilder startTime = System.currentTimeMillis(); for (int i = 0; i < 80000; i++) { buffer.append(String.valueOf(i)); } endTime = System.currentTimeMillis(); System.out.println("StringBuffer的執行時間:" + (endTime - startTime)); startTime = System.currentTimeMillis(); for (int i = 0; i < 80000; i++) { builder.append(String.valueOf(i)); } endTime = System.currentTimeMillis(); System.out.println("StringBuilder的執行時間:" + (endTime - startTime)); startTime = System.currentTimeMillis(); for (int i = 0; i < 80000; i++) { text = text + i; } endTime = System.currentTimeMillis(); System.out.println("String的執行時間:" + (endTime - startTime)); }}
檢視一下執行結果
Java基礎之:Math & Arrays Math簡單粗暴,直接進行程式碼展示
package com.biws.testmath;/** * @author :biws * @date :Created in 2020/12/22 21:42 * @description:測試math類 */public class ClassTest { public static void main(String[] args) { //1.abs 絕對值 int abs = Math.abs(9); System.out.println(abs); //2.pow 求冪 double pow = Math.pow(-3.5, 4); System.out.println(pow); //3.ceil 向上取整,返回>=該引數的最小整數; double ceil = Math.ceil(-3.0001); System.out.println(ceil); //4.floor 向下取整,返回<=該引數的最大整數 double floor = Math.floor(-4.999); System.out.println(floor); //5.round 四捨五入 Math.floor(該引數+0.5) long round = Math.round(-5.001); System.out.println(round); //6.sqrt 求開方 double sqrt = Math.sqrt(-9.0); System.out.println(sqrt); //7.random 返回隨機數【0——1) //[a-b]:int num = (int)(Math.random()*(b-a+1)+a) double random = Math.random(); System.out.println(random); //小技巧:獲取一個 a-b 之間的一個隨機整數 int a = (int)(Math.random()*(15-7+1)+7); System.out.println(a); /* * 理解: * 1.Math.random() 是 [0,1)的隨機數 * 2.(Math.random()*(15-7+1) 就是[0,9) * 3.Math.random()*(15-7+1)+7 就是[7,16) * 4.(int)取整就是 [7,15] ,即[a,b]之間的隨機整數 */ }}
執行結果
Arrays正常的執行
package com.biws.testarray;import java.util.Arrays;import java.util.Comparator;/** * @author :biws * @date :Created in 2020/12/22 21:44 * @description:Array中常用排序方法 */public class TestArray1 { public static void main(String[] args) { Integer[] arr = { 25, 35, 11, 32, 98, 22 };// Arrays.sort(arr); //預設小到大排序 System.out.println(Arrays.toString(arr)); // 使用匿名內部類重寫compare方法,實現從大到小排序 Arrays.sort(arr, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { if (o1 > o2) { return -1; } else if (o1 < o2) { return 1; } else { return 0; } } }); System.out.println(Arrays.toString(arr)); }}
結果檢視
重寫之後的執行結果
package com.biws.testarray;import java.util.Arrays;import java.util.Comparator;/** * @author :biws * @date :Created in 2020/12/22 21:46 * @description:重寫array中的排序方法 */public class overwriteArraySort { @SuppressWarnings("unchecked") public static void sort(Integer[] arr, Comparator c) { Integer temp = 0;// 自動裝箱 for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (c.compare(arr[j] , arr[j + 1]) > 0) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } public static void main(String[] args) { Integer[] arr = { 35, 25, 11, 32, 98, 22 };// MyArrays.sort(arr);//不新增 Comparator介面物件為引數,就是簡單的氣泡排序方法 System.out.println(Arrays.toString(arr)); //新增匿名內部類物件為引數,就可以改變排序方式。用此方法可以很靈活的使用排序。 overwriteArraySort.sort(arr, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { //透過返回值的正負來控制,升序還是降序 //只有當返回值為1時,才會發生交換。例如這裡,o1 < o2時返回1 ,進行交換 //也就是需要前面的數,比後面的數大,即降序 if (o1 < o2) { return -1; } else if (o1 > o2) { return 1; } else { return 0; } } }); System.out.println(Arrays.toString(arr)); }}
結果
Java基礎之:大數package com.biws.bignum;import java.math.BigDecimal;import java.math.BigInteger;/** * @author :biws * @date :Created in 2020/12/22 22:03 * @description: */public class test { public static void main(String[] args) { BigInteger i1 = new BigInteger("1234567890"); BigInteger i2 = new BigInteger("200"); // 2.呼叫常見的運算方法 // System.out.println(b1+b2); 不能使用 這樣的 + 方法執行 // 並且,add 這些方法只能是大數於大數相加,BigInteger.add(BigInteger); System.out.println(i1.add(i2));// 加 System.out.println(i1.subtract(i2));// 減 System.out.println(i1.multiply(i2));// 乘 System.out.println(i1.divide(i2));// 除 BigDecimal b1 = new BigDecimal("1234567890.567"); BigDecimal b2 = new BigDecimal("123"); // 2.呼叫常見的運算方法 // System.out.println(b1+b2); 不能使用 + 號運算.. // 並且,add 這些方法只能是大數於大數相加,BigDecimal.add(BigDecimal); System.out.println(b1.add(b2));// 加 System.out.println(b1.subtract(b2));// 減 System.out.println(b1.multiply(b2));// 乘 //後面這個 BigDecimal.ROUND_CEILING 需要指定,是精度 //沒有這個引數,則會提示:錯誤 System.out.println(b1.divide(b2, BigDecimal.ROUND_CEILING));// 除 }}
檢視一下結果
Java基礎之:日期類日期類中所包含的方法有點多,所以在這裡我用junit方法進行測試,那是真的香 啊,節省了大量的程式碼編寫時間
package com.biws.TestDate;import org.junit.jupiter.api.Test;import java.time.*;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUnit;import java.util.Date;/** * @author :biws * @date :Created in 2020/12/22 22:06 * @description:測試全部date類方法 */public class allDateFunction { public static void main(String[] args) { // TODO Auto-generated method stub new allDateFunction().hi(); new allDateFunction().hello(); } // JUnit 測試單元 // 1. 配置快捷鍵 alt + J // 2. 如果要執行某個 測試單元,就選中方法名或游標定位在方法名,在執行 Junit // 3. 如果不選,就執行,就把所有的測試單元都執行 // 4.@Test,代表此方法是測試單元,可以單獨執行測試 @Test public void hi() { System.out.println("hi "); } @Test public void hello() { System.out.println("hello"); } @Test public void testLocalDate() { // 獲取當前日期(只包含日期,不包含時間) LocalDate date = LocalDate.now(); System.out.println(date); // 獲取日期的指定部分 System.out.println("year:" + date.getYear()); System.out.println("month:" + date.getMonth()); System.out.println("day:" + date.getDayOfMonth()); System.out.println("week:" + date.getDayOfWeek()); // 根據指定的日期引數,建立LocalDate物件 LocalDate of = LocalDate.of(2010, 3, 2); System.out.println(of); } // 測試LocalTime類 @Test public void testLocalTime() { // 獲取當前時間(只包含時間,不包含日期) LocalTime time = LocalTime.now(); System.out.println(time); // 獲取時間的指定部分 System.out.println("hour:" + time.getHour()); System.out.println("minute:" + time.getMinute()); System.out.println("second:" + time.getSecond()); System.out.println("nano:" + time.getNano()); // 根據指定的時間引數,建立LocalTime物件 LocalTime of = LocalTime.of(10, 20, 55); System.out.println(of); } // 測試LocalDateTime類 @Test public void testLocalDateTime() { // 獲取當前時間(包含時間+日期) LocalDateTime time = LocalDateTime.now(); // 獲取時間的指定部分 System.out.println("year:" + time.getYear()); System.out.println("month:" + time.getMonthValue()); System.out.println("day:" + time.getMonth()); System.out.println("day:" + time.getDayOfMonth()); System.out.println("hour:" + time.getHour()); System.out.println("minute:" + time.getMinute()); System.out.println("second:" + time.getSecond()); System.out.println("nano:" + time.getNano()); // 根據指定的時間引數,建立LocalTime物件 LocalDateTime of = LocalDateTime.of(2020, 2, 2, 10, 20, 55); System.out.println(of); } @Test public void testMonthDay() { LocalDate birth = LocalDate.of(1994, 7, 14); // 生日 MonthDay birthMonthDay = MonthDay.of(birth.getMonthValue(), birth.getDayOfMonth()); LocalDate now = LocalDate.now(); // 當前日期 MonthDay current = MonthDay.from(now); if (birthMonthDay.equals(current)) { System.out.println("今天生日"); } else { System.out.println("今天不生日"); } } // 判斷是否為閏年 @Test public void testIsLeapYear() { LocalDate now = LocalDate.now(); System.out.println(now.isLeapYear()); } // 測試增加日期的某個部分 @Test public void testPlusDate() { LocalDate now = LocalDate.now(); // 日期 // 3年前 的日期 LocalDate plusYears = now.plusDays(-1); System.out.println(plusYears); } // 使用plus方法測試增加時間的某個部分 // 時間範圍判斷 @Test public void testPlusTime() { LocalTime now = LocalTime.now();// 時間 LocalTime plusHours = now.plusSeconds(-500); System.out.println(plusHours); } // 使用minus方法測試檢視一年前和一年後的日期 @Test public void testMinusTime() { LocalDate now = LocalDate.now(); LocalDate minus = now.minus(1, ChronoUnit.YEARS); // LocalDate minus2 = now.minusYears(1); System.out.println(minus); } // 測試時間戳類:Instant ,相當於以前的Date類 @Test public void testInstant() { Instant now = Instant.now(); System.out.println(now); // 與Date類的轉換 Date date = Date.from(now); System.out.println(date); Instant instant = date.toInstant(); System.out.println(instant); } // 格式轉換 @Test public void testDateTimeFormatter() { DateTimeFormatter pattern = DateTimeFormatter.ofPattern("MM-dd yyyy HH:mm:ss"); // 將字串轉換成日期 LocalDateTime parse = LocalDateTime.parse("03-03 2017 08:40:50", pattern); System.out.println(parse); // 將日期轉換成字串 //LocalDateTime parse = LocalDateTime.now(); String format = pattern.format(parse); System.out.println(format); }}