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 + "";
}
}
上一篇: 密码验证合格程序
下一篇: InfiniBand网络