欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java后端笔记6

程序员文章站 2022-07-09 22:11:30
...

多态体现:定义夫类型,实现子类。例如 子类赋值给父类型

函数式编程
Lambda表达式:() -> { 代码块 }

符号 含义
() 参数。表达( 参数类型参数名[,…] ),单个参数时可省略
-> Lambda规定符号
{} 代码块。{代码块},单句代码可省略
package com.xiye.service;

/**
 * Create by xiye on 2019/11/25 15:13
 */
public interface Filter {
    //void filter();
    //void filter(Object o);
    void filter(Object o1, Object o2);
}

import com.xiye.service.Filter;

/**
 * Create by xiye on 2019/11/25 15:13
 */
public class Demo1_Lambda {
    /*Lambda表达
    *   由三部分组成:() -> {}
    *   ():表示参数。为空是无参,一个参数时可以省略括号,多个参数时,在括号内以逗号分隔。无须写参数类型,指定参数名即可
    *   ->:固定符号。
    *   {}:表示代码块。单句代码时,可以省略花括号和分号。
    *
    * 发现:
    *   使用lambda,形参元素不能有多个方法
    *   接口才能使用lambda表达式
    * */
    public static void main(String[] args) {
        //check(() -> System.out.println("无参λ表达式"));
        //check(o -> System.out.println("一个参数λ表达式"));
        //check((o1, o2) -> System.out.println("两个参数λ表达式"));
        check((o1, o2) -> {
            if (o1 == o2){
                System.out.println("两个对象一样");
            }
            System.out.println("两个参数λ表达式");
        });
    }

    public static void check(Filter filter) {
        filter.filter(new Object(), new Object());
    }
}

toString:默认是对象的地址,重写该方法,实现对象输出格式/内容
equals:Objects.equals(a, b);//可以比较内容是否相等;或者a.equals(b)也可以内容判断,而a==b是地址判断

package com.xiye.bean;

import java.util.Objects;

/**
 * Create by xiye on 2019/11/25 16:11
 */
public class Student {
    private String name;
    private int age;
    public Student() {}

    public Student(String name, int age) {
        this.name = name;
        this.age = 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;
    }

    @Override
    public boolean equals(Object o) {
        // 地址一样直接是true
        if (this == o) return true;
        // 空对象或者不是同一类型返回false
        if (o == null || getClass() != o.getClass()) return false;
        // 内容进行判断
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

import com.xiye.bean.Student;

/**
 * Create by xiye on 2019/11/25 16:10
 */
public class Demo2_equals {
    public static void main(String[] args) {
        Student stu1 = new Student("夕夜", 20);
        Student stu2 = new Student("夕夜", 20);

        System.out.println(stu1.equals(stu2));
        System.out.println(stu1);
    }
}

Date
构造器:new Date()、new Date(Long s)
格式化日期:SimpleDateFormat

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Create by xiye on 2019/11/25 16:17
 */
public class Demo3_Date {
    public static void main(String[] args) throws ParseException {
        // 2019/11/25 16:19:57.106 ----》 年月日 时分秒.毫秒
        DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SS");
        // 将日期对象格式化为字符串
        String time = df.format(new Date());
        System.out.println(time);

        // 将字符串格式化为日期对象
        Date date = df.parse(time);
        System.out.println(date);

        // 获取毫秒数
        long mill = new Date().getTime();
        System.out.println(mill);
        System.out.println(new Date(mill));

        // 判断
        String str = "2019-12-25 00:00:00";
        DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d1 = df1.parse(str);
        Date d2 = new Date();
       if (d1.after(d2)) {
            System.out.println(str + "是未来时间");
        }
        if (d1.before(d2)) {
            System.out.println(str + "是过去时间");
        }

    }
}


import java.util.Calendar;
import java.util.Date;

/**
 * Create by xiye on 2019/11/25 16:32
 */
public class Demo4_Calendar {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        // 设置
        calendar.set(Calendar.YEAR, 2035);

        System.out.println(calendar.get(Calendar.YEAR));
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

        // 运算
        calendar.add(Calendar.YEAR, 1);
        System.out.println(calendar.get(Calendar.YEAR));
        calendar.add(Calendar.YEAR, -10);
        System.out.println(calendar.get(Calendar.YEAR));

        // 获取日期
        Date date = calendar.getTime();
        System.out.println(date);
    }
}

拓展:System.currentTimeMillis比较常用,System.arraycopy不常用

/**
 * Create by xiye on 2019/11/25 16:53
 */
public class Demo5_System {
    public static void main(String[] args) {
        // 系统时间戳,其实Date()也是获取系统时间戳
        // 开始时间
        long start = System.currentTimeMillis();

        int[] arr1 = {1, 2, 3, 4, 5};
        int[] arr2 = {6, 7, 8, 9};

        // 从数据源arr1的索引值1开始,拷贝到目标源arr2的索引0开始的3个
        System.arraycopy(arr1, 1, arr2, 0, 3);
        // 输出
        for (int i = 0; i < arr1.length; i++) {
            System.out.print(arr1[i] + "\t");
        }
        System.out.println();
        for (int i = 0; i < arr2.length; i++) {
            System.out.print(arr2[i] + "\t");
        }
        System.out.println();
        // 结束时间
        long end = System.currentTimeMillis();
        System.out.println("耗时:" + (end - start) + "ms");
    }
}

StringBuilder、StringBuffer字符串缓存区容器,可变;String是常量,不可变。
StringBuilder线程不安全
StringBuffer线程安全,效率相对StringBuilder低一点
String效率最低,拼接时不断new对象

/**
 * Create by xiye on 2019/11/25 17:14
 */
public class Demo6_StringBuilder {
    public static void main(String[] args) {

        StringBuilder sb1 = new StringBuilder();
        sb1.append("StringBuilder");
        sb1.append("是可变的");
        System.out.println(sb1.toString());


        long start = System.currentTimeMillis();

        //String str = "";
        //StringBuffer sb = new StringBuffer();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 10000; i++) {
            //str += i;
            sb.append(i);
        }

        long end = System.currentTimeMillis();

        System.out.println(end - start);
    }
}

装箱与拆箱
装箱:将基本数据类型转换成对应的包装类型
拆箱:将包装类型转换成对应的基本数据类型

/**
 * Create by xiye on 2019/11/25 17:45
 */
public class Demo7_装箱拆箱 {
    public static void main(String[] args) {
        // 装箱:整型4转整型包装类型i
        Integer i = Integer.valueOf(4);
        // 拆箱:整型包装类型i转基本数据类型ii
        int ii = i.intValue();


        // JDK1.5之后,实现自动装箱与自动拆箱
        i = 5;          // 自动装箱
        ii = i + 2;     // 自动拆箱


        // 数值类型转换字符串类型常用方式是直接拼接空字符串
        String str = ii + "";
    }
}