写点什么

我敢说这是全网最详细的基础讲解,附源码实例,没人学不明白

用户头像
小Q
关注
发布于: 2020 年 12 月 23 日

之前有粉丝后台跟我说,作为一个初学者,真的是不清楚该如何去进行学习,直接上 ssm 框架也看不明白,那我作为这么一个宠粉的人,怎么可能让粉丝有这样的顾虑啊,今天真的是基础到极点了,分享我这边的相应的一些代码实例,因为在代码的备注中已经写的很清楚了,所以基本不会再通过文字进行讲解


文章首发公众号:Java 架构师联盟,每日更新技术好文,后面也会开源我的代码仓库,毕竟现在还比较单薄


注释+源码+结果,这边应该展示的很清楚,也比较好理解,不过,一定要自己去实践一下,不实践再简单的技术理解起来也不容易



而向多线程什么的学习实例,我这边之前的文章也整理过,大家可以去查看,每一个都带着相应的源码展示


好了,话不多说,看正题


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); }}
复制代码


发布于: 2020 年 12 月 23 日阅读数: 34
用户头像

小Q

关注

还未添加个人签名 2020.06.30 加入

小Q 公众号:Java架构师联盟 作者多年从事一线互联网Java开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果能为您提供帮助,请给予支持(关注、点赞、分享)!

评论

发布
暂无评论
我敢说这是全网最详细的基础讲解,附源码实例,没人学不明白