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

366 篇文章 2 订阅
232 篇文章 5 订阅

之前有粉丝后台跟我说,作为一个初学者,真的是不清楚该如何去进行学习,直接上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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值