目录

1 日期与时间

1.1 Date类

1.2 Date类

1.3 练习--秒杀活动

1.4 Calender

1.5 JDK8新增API

1.5.1 概述

1.5.2 LocalDate、LocalTime、 LocalDateTime

2 包装类

3 正则表达式

3.1 概述

3.2 案例

3.3 爬取信息

4 Arrays类

4.1 Arrays类概述

4.2 排序

5 常见算法

5.1 选择排序

5.2 二分查找

6 Lambda表达式枚举

6.1 Lambda概述

6.2 Lambda表达式的省略规则


1 日期与时间

1.1 Date类

Date类概述

  • Date类的对 象在Java中代表的是当前所在系统的此刻日期时间。

Date的构造器
public Date()        创建一个Date对象,代表的是系统当前此刻日期时间。

Date的常用方法
public long getTime()        获取时间对象的毫秒值

        //获取当前时刻Date date = new Date();System.out.println(date);//Tue Jul 19 18:10:07 CST 2022//获取时间毫秒 和之前学的System.currentTimeMillis()一样long time = date.getTime();System.out.println(time);long time1 = System.currentTimeMillis();System.out.println(time1);System.out.println("=====================");//等于加了一小时一分time += (60 * 60 + 60)*1000;Date d = new Date(time);System.out.println(d);

1.2 Date类

SimpleDateFormat类作用

  • 可以对Date对象 或时间毫秒值格式化成我们喜欢的时间形式。
  • 也可以把字符串的时间形式解析成日期对象。

SimpleDateFormat的构造器

public simpleDateFormat()        构造一个SimpleDateFormat,使用默认格式
public simpleDateFormat(String pattern)        构造一个SimpleDateFormat,使用指定的格式

SimpleDateFormat的格式化方法

public final String format(Date date)        将日期格式化成日期/时间字符串
public final String format(Object time)        将时间毫秒值式化成日期/时间字符串

格式化的时间形式的常用的模式对应关系如下:

2020-11-11 13:27:06                yyyy-MM-dd HH:mm:ss
2020年11月11日13:27:06        yyyy年MM月dd日HH:mm:ss

package com.itzw.d2_simpledateformat;import java.text.SimpleDateFormat;
import java.util.Date;public class Test01 {public static void main(String[] args) {//获取当前日期Date date = new Date();System.out.println(date);//格式化日期对象--最终的格式    EEE表示星期几    a表示上午还是下午SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a");String rs = sdf.format(date);System.out.println(rs);System.out.println("===============================");long time = System.currentTimeMillis();//不仅可以接对象,还可以接时间毫秒值String rs2 = sdf.format(time);System.out.println(rs2);}
}

SimpleDateFormat解析字符串时间成为8期对象

public Date parse(String source)        从给定字符串的开始解析文本以生成日期

package com.itzw.d2_simpledateformat;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Test02 {public static void main(String[] args) throws ParseException {String timeStr = "2022年7月1日 13:30:20";//目的:在此时间基础上往后加2天6小时5分SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//将字符串日期转换为日期类型的对象Date d = sdf.parse(timeStr);System.out.println(sdf.format(d));//往后加2天6小时5分long time = d.getTime() + (2 * 24 * 60 * 60 + 6 * 60 * 60 + 5 * 60) * 1000;System.out.println(sdf.format(time));}
}

1.3 练习--秒杀活动

需求

  • 小贾下单并付 款的时间为: 2020年11月11日0:03:47
  • 小皮下单并付款的时间为: 2020年11月11日0:10:11
  • 用代码说明这 两位同学有没有参加上秒杀活动?

分析

  • 判断下单时间是否在开始到结束的范围内。
  • 把字符串形 式的时间变成毫秒值。
package com.itzw.d2_simpledateformat;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Test03 {public static void main(String[] args) throws ParseException {String startTime = "2022-7-19 19:00:00";String endTime = "2022-7-19 19:10:00";String xiaoJia = "2022-7-19 19:06:20";String xiaoPi = "2022-7-19 19:10:21";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date d1 = sdf.parse(startTime);Date d2 = sdf.parse(endTime);Date d3 = sdf.parse(xiaoJia);Date d4 = sdf.parse(xiaoPi);if (d3.before(d2)&&d3.after(d1)){System.out.println("小贾秒杀成功!!!");}else{System.out.println("小贾秒杀失败。。。。");}if (d4.before(d2)&&d4.after(d1)){System.out.println("小皮秒杀成功!!!");}else{System.out.println("小皮秒杀失败。。。。");}}
}

1.4 Calender

Calender是一个抽象类

Calendar常用方法

方法名                                                         说明
public int get(int field)                                取日期中的某个字段信息。
public void set(int field, int value)              修改日历的某个字段信息。
public void add(int field, int amount)         为某个字段增加/减少指定的值
public final Date getTime()                        拿到此刻日期对象。
public long getTimeInMillis( )                    拿到此刻时间毫秒值

        //拿到系统此时的日历对象Calendar cal = Calendar.getInstance();System.out.println(cal);int year = cal.get(Calendar.YEAR);System.out.println(year);System.out.println(cal.get(Calendar.MONTH) + 1);System.out.println(cal.get(Calendar.DAY_OF_MONTH));System.out.println(cal.get(Calendar.DAY_OF_YEAR));

1.5 JDK8新增API

1.5.1 概述

  • 从ava 8开始,java.time包提供了新的日期和时间API,主要涉及的类型有:

LocalDate:不包含具体时间的日期。
LocalTime:不含日期的时间。
LocalDateTime:包含了日期及时间。
Instant:代表的是时间戳。
DateTimeFormatter用于做时间的格式化和解析的
Duration:用于计算两个“时间”间隔
Period:用于计算两个“日期”间隔

  • 新增的API严格区分了时刻、本地日期、本地时间,并且,对日期和时间进行运算更加方便。
  • 其次,新API的类型几乎全部是不变类型( 和String的使用类似),可以放心使用不必担心被修改。

1.5.2 LocalDate、LocalTime、 LocalDateTime

  • 他们分别表示日期,时间,日期时间对象,他们的类的实例是不可变的对象。
  • 他们三者构建对象和API都是通用的
        //1.获取本地日期对象LocalDate nowDate = LocalDate.now();System.out.println("今天的日期是:" + nowDate);System.out.println(nowDate.getYear());System.out.println(nowDate.getMonth());System.out.println(nowDate.getDayOfMonth());System.out.println(nowDate.getDayOfWeek());

关于时间的使用不想看了,用到再说吧。。。

2 包装类

包装类

  • 其实就是8种基本数据类型对应的引用类型。

基本数据类型                        引用数据类型
byte                                            Byte
short                                           Short
int                                               Integer E
long                                            Long
char                                           Character
float                                           Float
double                                       Double
boolean                                     Boolean

为什么提供包装类?

  • Java为了实现一切皆对象,为8种基本类型提供了对应的引用类型。
  • 后面的集合和泛型其实也只能支持包装类型,不支持基本数据类型。

自动装箱:基本类型的数据和变量可以直接赋值给包装类型的变量。
自动拆箱:包装类型的变量可以直接赋值给基本数据类型的变量。
包装类的特有功能

  • 包装类的变量的默认值可以是null,容错率更高。
  • 可以把基本类型的数据转换成字符串类型(用处不大)

        调用toString()方法得到字符 串结果。
        调用Integer.toString(基本类型的数据)。

  • 可以把字符串类型的数值转换成真实的数据类型(真的很有用)

Integer.parselnt( “字符串类型的整数”)
        Double.parseDouble( “字符串类型的小数”)。

package com.itzw.d5_integer;public class Test01 {public static void main(String[] args) {int a = 1;Integer a1 = 1;System.out.println(a);System.out.println(a1);//int b = null;Integer b1 = null;//可以赋空值//可以将字符串转为数值String c = "123";int c1 = Integer.parseInt(c);//用valueof也可以,而且是通用的Integer c2 = Integer.valueOf(c);System.out.println(c1+1);System.out.println(c2+1);String d = "99.9";double d1 = Double.parseDouble(d);double d2 = Double.valueOf(d);System.out.println(d1+1);System.out.println(d2+1);}
}

3 正则表达式

3.1 概述

  • 正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。

正则表达式初体验

  • 需求:假如现在要求校验一个qq号码是否正确,6位及20位之内,必须全部是数字。
  • 先使用目前所学知识完成校验需求;然后体验一下正则表达式检验。
package com.itzw.d6_regex;public class Test01 {public static void main(String[] args) {String qq1 = "36597589263";String qq2 = "365975a9263";String qq3 = null;String qq4 = "3659";System.out.println(checkQQ(qq1));System.out.println(checkQQ(qq2));System.out.println(checkQQ(qq3));System.out.println(checkQQ(qq4));System.out.println(checkQQ2(qq1));System.out.println(checkQQ2(qq2));System.out.println(checkQQ2(qq3));System.out.println(checkQQ2(qq4));}//正则表达式public static boolean checkQQ2(String qq){return qq != null && qq.matches("\\d{6,20}");}//传统方法public static boolean checkQQ(String qq){//如果是空直接返回false,判断个数if (qq == null || qq.length() > 20 || qq.length() < 6)return false;//判断是否全部是数字for (int i = 0; i < qq.length(); i++) {char c = qq.charAt(i);if (c < '0' || c > '9')return false;}return true;}
}

3.2 案例

检测手机号、座机号和邮箱

package com.itzw.d6_regex;import java.util.Scanner;public class Test02 {public static void main(String[] args) {//目标: 检验手机号     邮箱      座机号//checkPhone();//checkEmail();checkTel();}//座机号public static void checkTel(){Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入座机号:");String tel = sc.next();//X?表示X有或没有//021784327  021-784327if (tel.matches("0\\d{2,6}-?\\d{5,20}")){System.out.println("座机号注册成功!");}else {System.out.println("座机号册失败。。。");}}}//邮箱public static void checkEmail(){Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入邮箱:");String email = sc.next();//\\d表示数字,{9}表示九位,\\w表示数字字母下划线_//124231@qq.com   e4144@123.com  31314@14.com.cnif (email.matches("\\w{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]{2,20}){1,2}")){System.out.println("邮箱注册成功!");}else {System.out.println("邮箱注册失败。。。");}}}//手机号public static void checkPhone(){Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入手机号:");String phone = sc.next();//\\d表示数字,{9}表示九位if (phone.matches("1[3,9]\\d{9}")){System.out.println("手机号注册成功!");}else {System.out.println("手机号注册失败。。。");}}}
}

3.3 爬取信息

package com.itzw.d6_regex;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Test03 {public static void main(String[] args) {String rs = "来黑马程序学习Java,电话020-43422424, 或者联系邮箱" +"itcast@itcast.cn,电话18762832633,0203232323" +"邮箱bozai@itcast.cn, 400-100-3233 ,4001003232";//1.定义爬虫规则,字符串形式String regex = "(1[3,9]\\d{9})|(\\w{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]{2,20}){1,2})" +"|(0\\d{2,6}-?\\d{5,20})|(400-?\\d{3,9})";//2.把爬虫规则编译成匹配对象Pattern pattern = Pattern.compile(regex);//3.得到内容匹配器对象Matcher matcher = pattern.matcher(rs);//4.开始找while (matcher.find()){String group = matcher.group();System.out.println(group);}}
}

4 Arrays类

4.1 Arrays类概述

  • 数组操作工具类,专门用于操作数组元素的。

Arrays类的常用API

方法名                                                           说明
String toString(类型[] a)                      返回数组内容
void sort(类型[] a)                               对数组进行默认升序排序
<T> void sort()                                    使用比较器对象自定义排序
int binarySearch(int[] a, int key)          二分搜索数组中的数据,存在返回索引,不存在返回-1

演示:

package com.itzw.d7_arrays;import java.util.ArrayList;
import java.util.Arrays;public class Test01 {public static void main(String[] args) {int[] arr = {6,18,2,99,3,1,34};//返回数组内容System.out.println(Arrays.toString(arr));//排序,默认升序Arrays.sort(arr);System.out.println(Arrays.toString(arr));//二分查找,必须在排序后查找,返回对应值的下标,找不到返回应该在的位置+1的相反数System.out.println(Arrays.binarySearch(arr, 18));System.out.println(Arrays.binarySearch(arr,10000));}
}

4.2 排序

Arrays类的排序方法

  • public static void sort(类型[] a)        对数组进行默认升序排序
  • public static <T> void sort(类型[] a, Comparator<? super T> c)      使用比较器对象自定义排序

自定义排序规则

  • 设置Comparator接 口对应的比较器对象,来定制比较规则。

如果认为左边数据大于右边数据返回正整数
如果认为左边数据小于右边数据返回负整数
如果认为左边数据等于右边数据返回0

package com.itzw.d7_arrays;import java.util.Arrays;
import java.util.Comparator;public class Test02 {public static void main(String[] args) {int[] arr = {6,18,2,99,3,1,34};Arrays.sort(arr);//默认升序System.out.println(Arrays.toString(arr));//但我想降序//首先数组是引用类型数组Integer[] arr2 = {6,18,2,99,3,1,34};//第二个参数是一个比较器,修改比较规则就可以了Arrays.sort(arr2, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2 - o1;}});System.out.println(Arrays.toString(arr2));//对自己床架的对象进行排序Student[] s = new Student[3];s[0] = new Student("张麻子",44,180.8);s[1] = new Student("马邦德",46,182.8);s[2] = new Student("张牧之",45,179.8);Arrays.sort(s, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {//return o1.getAge() - o2.getAge();//double类型的要换个方法return Double.compare(o2.getHeighe(),o1.getHeighe());//降序}});System.out.println(Arrays.toString(s));}
}class Student{private String name;private int age;private double heighe;public Student(){}public Student(String name, int age, double heighe) {this.name = name;this.age = age;this.heighe = heighe;}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;}public double getHeighe() {return heighe;}public void setHeighe(double heighe) {this.heighe = heighe;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", heighe=" + heighe +'}';}
}

5 常见算法

5.1 选择排序

选择排序的思想

  • 每轮选择当前位置,开始找出后面的较小值与该位置交换

选择排序的关键

  • 确定总共需要选择几轮:数组的长度-1.
  • 控制每轮从以前位置为基准,与后面元素选择几次。
package com.itzw.d8_sort;import java.util.Arrays;public class SelectSort {public static void main(String[] args) {//选择排序int[] arr = {5,1,3,2};for (int i = 0; i < arr.length - 1; i++) {for (int j = i + 1; j < arr.length; j++) {int temp;if (arr[i] > arr[j]){temp = arr[i];arr[i] = arr[j];arr[j] = temp;//1532}}}System.out.println(Arrays.toString(arr));}
}

5.2 二分查找

数组的二分查找的实现步骤是什么样的?

  • 定义变量记录左边和右边位置。
  • 使用while循环控制查询 (条件是左边位置<: =右边位置)
  • 循环内部获取中间元素索引
  • 判断当前要 找的元素如果大于中间元素,左边位置=中间索引+1
  • 判断当前要 找的元素如果小于中间元素,右边位置=中间索引-1
  • 判断当前要找的元素如果等 于中间元素,返回当前中间元素索引。
package com.itzw.d8_sort_search;public class BinarySearch {public static void main(String[] args) {int[] arr = {10,14,17,21,34,56,78};System.out.println(binarySearch(arr, 100));System.out.println(binarySearch(arr, 56));System.out.println(binarySearch(arr, 14));}/*** 二分查找的实现* @param arr 数组* @param data 要查找的值* @return 索引,若元素不存在返回-1*/public static int binarySearch(int[] arr,int data){int left = 0;int right = arr.length - 1;int midIndex;while (left <= right){midIndex = (left + right) / 2;if (arr[midIndex] > data){//中间数大于我想找的数,中间索引减一赋给右索引right = midIndex - 1;}else if(arr[midIndex] < data){//中间的数小于想找的数,中间索引加一赋给左索引left = midIndex + 1;}else {return midIndex;}}return -1;//找不到}
}

6 Lambda表达式枚举

6.1 Lambda概述

  • Lambda表达式是JDK 8开始后的一种新语法形式。
  • 作用:简化匿名内部类的代码写法。

Lambda表达式的简化格式
        (匿名内部类被重写方法的形参列表) -> {
        被重写方法的方法体代码。
}
注: -> 是语法形式,无实际含义

注意: Lambda表达式只能简化函数式接口的匿名内部类的写法形式
什么是函数式接口?

  • 首先必须是接口、其次接口中有且仅有-一个抽象方法的形式
  • 通常我们会在接口,上加上一个@FunctionalInterface注解,标记该接口必须是满足函数式接口。
package com.itzw.lambda;public class Test01 {public static void main(String[] args) {//lambda只能用于接口中只有一个方法的匿名内部类Swimming s = new Swimming() {@Overridepublic void swim() {System.out.println("学生游泳很开心。。。");}};go(s);System.out.println("===========================");//简化Swimming s1 = () -> {System.out.println("老师游泳贼快。。。");};go(s1);System.out.println("==============================");//再简化go(() -> {System.out.println("运动员游泳飞快。。。");});}public static void go(Swimming swimming){System.out.println("开始。。。。");swimming.swim();System.out.println("结束。。。。");}
}@FunctionalInterface
interface Swimming{void swim();
}

6.2 Lambda表达式的省略规则

  • Lambda表达式的省略写法(进- -步在Lambda表达式的基础.上继续简化)
  • 参数类型可以省略不写。
  • 如果只有一个参数,参数类型可以省略,同时()也可以省略。
  • 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号!
  • 如果Lambda表达式的方法体代码只有一-行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写
        Arrays.sort(arr2, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2 - o1;}});//化简Arrays.sort(arr2, (Integer o1, Integer o2) -> {return o2 - o1;});//再化简Arrays.sort(arr2, ( o1,o2) -> o2 - o1);System.out.println(Arrays.toString(arr2));

Java学习-面向对象进阶二相关推荐

  1. Java学习-面向对象进阶

    目录 1 static 1.1 static修饰成员变量 1.2 static修饰成员方法 1.3 static注意事项 1.4 工具类 1.5 工具类的应用练习 1.6 代码块 1.6.1 代码块概 ...

  2. Java入门123:一个老鸟的Java学习心得(二维码版)

    Java入门123:一个老鸟的Java学习心得(二维码版)清华大学出版社 Java入门123--一个老鸟的Java学习心得(二维码版)充分考虑了初学Java的种种困难,讲解细致入微,抽丝剥茧,层层推进 ...

  3. python内置函数面向对象_Pyhton——面向对象进阶二:类的内置函数补充、描述符...

    Pyhton--面向对象进阶二: 一.类的内置函数补充 1.isinstance(obj,cls)--检查obj是否是该类的对象 class Hoo: def __init__(self,name,t ...

  4. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  5. java学习笔记(二十八)——开发一个小项目(VMeeting3.0)

    上篇文章按照较规范的产品需求文档梳理了项目的逻辑,感觉开发起来明晰了很多:挂上一篇文章java学习笔记(二十七)--开发一个小项目(VMeeting2.0)_Biangbangbing的博客-CSDN ...

  6. 动力节点『lol版』Java学习路线图(二)JavaSE基础阶段

     先上干货,再讲故事.召唤师,准备好你的键盘了吗?开战吧! 二.北地禁魔 Java零基础需要掌握的技术 背景故事: 世界被同化之后,符文之地有些地区发生了变化.首当其中的便是德邦与北地.两地边界渐融, ...

  7. Java学习路线·进阶

    Java学习路线是CSDN面向开发者提供系统化「学+练」产品,帮助每一位学习者成为一名优秀的Java工程师. 学习路线系统的涵盖了Java领域内容从初级到进阶所需要学习的一系列「知识点」,内容覆盖Ja ...

  8. Java学习笔记(二):Java程序基础

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://mp.csdn.net/mdeditor/100619398 目录 ...

  9. java学习-zxing生成二维码矩阵的简单例子

    这个例子需要使用google的开源项目zxing的核心jar包 core-3.2.0.jar 可以百度搜索下载jar文件,也可使用maven添加依赖 <dependency><gro ...

最新文章

  1. 服务器创建和附加虚拟磁盘,Windows 7 虚拟硬盘中的新增功能
  2. 在使用Reference Source调试.Net 源代码时如何取消optimizations(代码优化)-翻译
  3. android 控件随手指移动_液体流动控件,隔壁产品都馋哭了
  4. SpringBatch批处理框架入门(二)
  5. 【Linux系统编程】进程间通信--共享内存
  6. [社会趣闻]储户召集7名亲友占满银行窗口 每次存一元
  7. Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系
  8. bp神经网络预测模型_【2020顶会KDD】AutoST:面向时空预测的高效神经网络学习模型...
  9. life of a NPTL pthread
  10. 苹果付费app共享公众号_娄底共享云店铺公众号
  11. for循环使用后contains方法失去效果
  12. android 单手模式开发,单手操作毫无压力 安卓单指缩放技巧
  13. java多线程join()方法原理详解
  14. 在VS2017(VC15)上配置opencv4.0.1环境
  15. 2017java考证_Sun认证Java程序员考试试题
  16. 安川服务器显示run电机没电,安川变频器上电无显示,无法设定参数是什么原因...
  17. 2021-02-01 25 个常用 Matplotlib 图的 Python 代码
  18. amd的服务器cpu型号大全,AMD CPU型号大全
  19. python ffmpeg剪辑视频_FFmpeg精准时间切割视频文件
  20. 2022-10-24 ClickHouse 源码解析-查询引擎经典理论

热门文章

  1. Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsEx
  2. 什么是报表工具?和 EXCEL 有什么区别?
  3. PC - 电脑应该多久清洁一次?
  4. 奉劝那些想涨工资的程序员,这些 IT 大神们都在用的网站,你越早知道越好(建议收藏)!!...
  5. 全球2018OpenStack用户调查报告亮点一览
  6. pmw.php,加速调光频率 PWM实现精准LED调光
  7. 计算机正确的录入指法教案,《文字录入教案》word版.doc
  8. Vue Cannot read property ‘xxx‘ of undefined
  9. 个性化智能推荐(协同过滤算法)技术研究
  10. 一个XSS靶场练习记录