【JavaSE学习】05-1常用API

JavaSE(B站黑马)学习笔记

01Java入门
02数组、方法
03面向对象&Java语法
04-1Java高级(Stream流、异常处理、日志技术)
04-2Java高级(文件处理-IO流)
04-3Java高级(多线程、网络编程)
04-4Java高级(单元测试、反射、注解、动态代理、XML)
05-1常用API
05-2常用API(集合)


文章目录

  • JavaSE(B站黑马)学习笔记
  • 前言
  • 05-1常用API
  • 什么是API
  • String
    • String类概述
    • String类创建对象的两种方式
    • String类的常用方法-字符串比较、遍历、替换、截取、分割操作
      • 字符串内容比较
      • 遍历、替换、截取、分割操作
  • ArrayList
    • 集合概述
    • ArrayList集合快速入门
    • ArrayList对泛型的支持
    • ArrayList常用方法、遍历
  • Object
    • Object类的作用
    • Object类:toString方法
    • Object类:equals方法
  • Objects
  • StringBuilder
  • Math
  • System
  • BigDecimal
  • 日期与时间
    • Date
    • SimpleDateFormat
    • Calendar
  • JDK8新增日期类
    • LocalDate、LocalTime、LocalDateTime
    • Instant
    • DateTimeFormatter
    • Duration/Period
    • ChronoUnit
  • 包装类
  • 正则表达式
    • 正则表达式匹配规则
    • 正则表达式的常见案例
    • 正则表达式在方法中的应用
    • 正则表达式爬取信息
  • Arrays
    • Arrays类概述
    • Arrays类的排序方法
  • 注:


前言

JavaSE(B站黑马)学习笔记 05-1常用API


05-1常用API

什么是API

  • API(Application Programming interface) 应用程序编程接口。
  • 简单来说:就是Java帮我们已经写好的一些方法,我们直接拿过来用就可以了。

String简单介绍

  • String类定义的变量可以用于存储字符串,同时String类提供了很多操作字符串的功能,我们可以直接使用。

ArrayList简单介绍

  • ArrayList代表的是集合类,集合是一种容器,与数组类似,不同的是集合的大小是不固定的
  • 通过创建ArrayList的对象表示得到一个集合容器,同时ArrayList提供了比数组更好用,更丰富的API (功能)给程序员使用

String

String类概述

  • java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。
  • Java 程序中的所有字符串文字(例如“abc”)都为此类的对象。
    【JavaSE学习】05-1常用API_第1张图片

String类的特点

  • String其实常被称为不可变字符串类型,它的对象在创建后不能被更改。
    【JavaSE学习】05-1常用API_第2张图片

以“ ”方式给出的字符串对象,在字符串常量池中存储,其代表不同的地址,+= 是把两个对象经过计算得到一个新的对象地址再由name指向它,所以它的对象在创建后不能被更改。不是字符串不能变,是它创建出来就代表一个对象,有固定的地址,这个对象是不可变的。

再有相同 “ ” 定义的字符串就直接指向它了。意思是 String s1 = “张三”,String s2 = “张三”。"张三"这个字符串对象已经被s1创建出来了,s2和s1指向的是同一个地址。如果s1 += ”李四“ 那么就计算了一个新的"张三李四"对象被s1指向。s2指向的还是"张三"这个地址。所以它的对象不可变
【JavaSE学习】05-1常用API_第3张图片

String类创建对象的两种方式

【JavaSE学习】05-1常用API_第4张图片

方式一常用。方式二了解,面试可能有
【JavaSE学习】05-1常用API_第5张图片

方式一和方式二有什么区别吗?(面试常考)

String类的常用方法-字符串比较、遍历、替换、截取、分割操作

字符串内容比较

【JavaSE学习】05-1常用API_第6张图片【JavaSE学习】05-1常用API_第7张图片
【JavaSE学习】05-1常用API_第8张图片

遍历、替换、截取、分割操作

【JavaSE学习】05-1常用API_第9张图片
public boolean startsWith(String prefix) 传入字符串,判断是否包含此字符串,是则返回true,反之

【JavaSE学习】05-1常用API_第10张图片【JavaSE学习】05-1常用API_第11张图片
【JavaSE学习】05-1常用API_第12张图片

ArrayList

集合概述

集合是与数组类似,也是一种容器,用于装数据的
【JavaSE学习】05-1常用API_第13张图片

【JavaSE学习】05-1常用API_第14张图片
  • ArrayList是集合中的一种,它支持索引。(暂时先学习这个,后期课程会学习整个集合体系)

ArrayList集合快速入门

【JavaSE学习】05-1常用API_第15张图片 【JavaSE学习】05-1常用API_第16张图片

ArrayList对泛型的支持

泛型概述

  • ArrayList:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型。

举例:

  • ArrayList<String> :此集合只能操作字符串类型的元素
  • ArrayList<Integer>:此集合只能操作整数类型的元素

注意:泛型只能支持引用数据类型,不支持基本数据类型。(后续对泛型有更详细介绍)

【JavaSE学习】05-1常用API_第17张图片

ArrayList常用方法、遍历

【JavaSE学习】05-1常用API_第18张图片【JavaSE学习】05-1常用API_第19张图片
【JavaSE学习】05-1常用API_第20张图片

Object

Object类的作用

  • 一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类。
  • Object作为所有类的父类,提供了很多常用的方法给每个子类对象拿来使用。

Object类的常用方法:

【JavaSE学习】05-1常用API_第21张图片

Object类:toString方法

【JavaSE学习】05-1常用API_第22张图片

问题引出

  • 开发中直接输出对象,默认输出对象的地址其实是毫无意义的。
  • 开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息。
【JavaSE学习】05-1常用API_第23张图片

toString存在的意义

  • 父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息!!

重写toString快捷键:Alt+Insert 选择toString 或 直接打首字母根据提示选择
【JavaSE学习】05-1常用API_第24张图片

Object类:equals方法

【JavaSE学习】05-1常用API_第25张图片

问题思考

  • 直接比较两个对象的地址是否相同完全可以用“==”替代,为什么还要使用equals。

(因为开发中很多业务情况更想判断2个对象的内容是否一样)

【JavaSE学习】05-1常用API_第26张图片

equals存在的意义

  • 为了被子类重写,以便子类自己来定制比较规则(比如比较对象内容)

重写equals快捷键:Alt+Insert 选择equals() and hashCode() 或 直接打首字母根据提示选择
【JavaSE学习】05-1常用API_第27张图片

弹窗一直next即可,idea官方帮我们写好了判断两个对象内容是否相等的规则,和我们上面自己写的有些不同
【JavaSE学习】05-1常用API_第28张图片

Objects

Objects概述

  • Objects是一个工具类,提供了一些方法去完成一些功能。

官方在进行字符串比较时,没有用字符串对象的的equals方法,而是选择了Objects的equals方法来比较。

因为传进的name有可能是null,如果传进是null的话使用equals就会报空指针异常
【JavaSE学习】05-1常用API_第29张图片

使用Objects的equals方法在进行对象的比较会更安全。

Objects的常见方法:
【JavaSE学习】05-1常用API_第30张图片

【JavaSE学习】05-1常用API_第31张图片

Objects.equals()源码分析
【JavaSE学习】05-1常用API_第32张图片

StringBuilder

StringBuilder概述

  • StringBuilder是一个可变的字符串的操作类,我们可以把它看成是一个对象容器。
  • 使用StringBuilder的核心作用:操作字符串的性能比String要更高(如拼接、修改等)。

StringBuilder 构造器

StringBuilder常用方法
【JavaSE学习】05-1常用API_第33张图片

【JavaSE学习】05-1常用API_第34张图片

为什么StringBuilder性能好

String类拼接字符串原理图

【JavaSE学习】05-1常用API_第35张图片

StringBuilder提高效率原理图
【JavaSE学习】05-1常用API_第36张图片

总结:StringBuilder只是拼接字符串等的手段,效率好。最终的目的还是要恢复成String类型

Math

Math类

  • 包含执行基本数学运算的方法,Math类没有提供公开的构造器
  • 如何使用类中的成员呢?看类的成员是否都是静态的,如果是,提供类名就可以直接调用

Math类的常用方法
【JavaSE学习】05-1常用API_第37张图片
【JavaSE学习】05-1常用API_第38张图片

System

System类

System的功能是通用的,都是直接用类名调用即可,所以System不能被实例化。

System类的常用方法
【JavaSE学习】05-1常用API_第39张图片
【JavaSE学习】05-1常用API_第40张图片
【JavaSE学习】05-1常用API_第41张图片

BigDecimal

BigDecimal作用

  • 用于解决浮点型运算精度失真的问题
【JavaSE学习】05-1常用API_第42张图片

使用步骤

  • 创建对象BigDecimal封装浮点型数据(最好的方法是调用方法)

阿里巴巴Java开发手册说:
【JavaSE学习】05-1常用API_第43张图片

BigDecimal常用API
【JavaSE学习】05-1常用API_第44张图片
【JavaSE学习】05-1常用API_第45张图片
【JavaSE学习】05-1常用API_第46张图片

注意

  • 精度处理只是手段、方法,最终的目的还要换成double
  • BigDecimal是一定要精度运算的,不然会报错 如 10/3

日期与时间

Date

Date类概述

  • Date类代表当前所在系统的日期时间信息。

Date的构造器

Date的常用方法

Date类记录时间的2种形式

形式1:日期对象
【JavaSE学习】05-1常用API_第47张图片

形式2:时间毫秒值

  • 指从1970年1月1日 00:00:00走到此刻的总毫秒值,很大的

【JavaSE学习】05-1常用API_第48张图片【JavaSE学习】05-1常用API_第49张图片

案例

  • 请计算出当前时间往后走1小时121秒之后的时间是多少。

时间毫秒值 -> 日期对象

【JavaSE学习】05-1常用API_第50张图片

SimpleDateFormat

SimpleDateFormat类作用

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

【JavaSE学习】05-1常用API_第51张图片【JavaSE学习】05-1常用API_第52张图片

SimpleDateFormat的构造器

SimpleDateFormat的格式化方法

格式化时间形式的常用模式对应关系如下:
【JavaSE学习】05-1常用API_第53张图片
【JavaSE学习】05-1常用API_第54张图片

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

案例

  • 计算时间 2022年09月06日 11:11:11 往后走 2天 14小时 49分 06秒 后的时间是多少
【JavaSE学习】05-1常用API_第55张图片

Calendar

Calendar概述

  • Calendar代表了系统此刻日期对应的日历对象。
  • Calendar是一个抽象类,不能直接创建对象。

Calendar日历类创建日历对象的方法:

Calendar常用方法
【JavaSE学习】05-1常用API_第56张图片

注意:Calendar是可变日期对象,一旦修改后其对象本身表示的时间将产生变化。

【JavaSE学习】05-1常用API_第57张图片【JavaSE学习】05-1常用API_第58张图片

JDK8新增日期类

概述

  • 从Java 8开始,java.time包提供了新的日期和时间API,主要涉及的类型有:
【JavaSE学习】05-1常用API_第59张图片
  • 新增的API严格区分了时刻、本地日期、本地时间,并且,对日期和时间进行运算更加方便。
  • 其次,新API的类型几乎全部是不变类型(和String的使用类似),可以放心使用不必担心被修改。

太多了,不用刻意去记,要用过来查

LocalDate、LocalTime、LocalDateTime

  • 他们 分别表示日期,时间,日期时间对象,他们的类的实例是不可变的对象。
  • 他们三者构建对象和API都是通用的

构建对象的方式如下:
【JavaSE学习】05-1常用API_第60张图片

LocalDate、LocalTime、LocalDateTime获取信息的API:
【JavaSE学习】05-1常用API_第61张图片

转换相关的API
【JavaSE学习】05-1常用API_第62张图片

LocalDateTime的转换API
【JavaSE学习】05-1常用API_第63张图片

修改相关的API:

  • LocalDateTime 综合了 LocalDate 和 LocalTime 里面的方法,所以下面只用 LocalDate 和 LocalTime 来举例。
  • 这些方法返回的是一个新的实例引用,因为LocalDateTime 、LocalDate 、LocalTime 都是不可变的。

【JavaSE学习】05-1常用API_第64张图片【JavaSE学习】05-1常用API_第65张图片
【JavaSE学习】05-1常用API_第66张图片
【JavaSE学习】05-1常用API_第67张图片
【JavaSE学习】05-1常用API_第68张图片

Instant

Instant时间戳

  • JDK8获取时间戳特别简单,且功能更丰富。Instant类由一个静态的工厂方法now()可以返回当前时间戳
【JavaSE学习】05-1常用API_第69张图片
  • 时间戳是包含日期和时间的,与java.util.Date很类似,事实上Instant就是类似JDK8 以前的Date。
  • Instant和Date这两个类可以进行转换。
【JavaSE学习】05-1常用API_第70张图片

DateTimeFormatter

  • 在JDK8中,引入了一个全新的日期与时间格式器DateTimeFormatter。
  • 正反都能调用format方法。

【JavaSE学习】05-1常用API_第71张图片【JavaSE学习】05-1常用API_第72张图片

Duration/Period

Duration

  • 在Java8中,我们可以使用以下类来计算**时间间隔**差异:java.time.Duration
  • 提供了使用基于时间的值测量时间量的方法。
  • 用于 LocalDateTime 之间的比较。也可用于 Instant 之间的比较。

【JavaSE学习】05-1常用API_第73张图片【JavaSE学习】05-1常用API_第74张图片

Period

  • 在Java8中,我们可以使用以下类来计算**日期间隔**差异:java.time.Period
  • 主要是 Period 类方法 getYears(),getMonths() 和 getDays() 来计算,只能精确到年月日。
  • 用于 LocalDate 之间的比较。

【JavaSE学习】05-1常用API_第75张图片【JavaSE学习】05-1常用API_第76张图片

ChronoUnit

java.time.temporal.ChronoUnit

  • ChronoUnit类可用于在单个时间单位内测量一段时间,这个工具类是最全的了,可以用于比较所有的时间单位

【JavaSE学习】05-1常用API_第77张图片【JavaSE学习】05-1常用API_第78张图片

包装类

  • 其实就是8种基本数据类型对应的引用类型。
    【JavaSE学习】05-1常用API_第79张图片

为什么提供包装类?

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

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

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

【JavaSE学习】05-1常用API_第80张图片

包装类的特有功能

  • 包装类的变量的默认值可以是null,容错率更高。

  • 可以把基本类型的数据转换成字符串类型(用处不大)
    【JavaSE学习】05-1常用API_第81张图片

  • 可以把字符串类型的数值转换成真实的数据类型(真的很有用)
    【JavaSE学习】05-1常用API_第82张图片

通用 .valueOf(“字符串类型”) 看主调是谁,主调是 Integer 就转 Integer,主调是 Double 就转 Double。可以用基本类型接,自动拆箱。注意:它没有解决double的精度问题。
【JavaSE学习】05-1常用API_第83张图片

正则表达式

  • 正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。
  • 参考网址:菜鸟教程-正则表达式 - 匹配规则
【JavaSE学习】05-1常用API_第84张图片

正则表达式初体验

  • 需求:假如现在要求校验一个qq号码是否正确,6位及20位之内,必须全部是数字 。
  • 先使用目前所学知识完成校验需求;然后体验一下正则表达式检验。
【JavaSE学习】05-1常用API_第85张图片

正则表达式匹配规则

【JavaSE学习】05-1常用API_第86张图片【JavaSE学习】05-1常用API_第87张图片

正则表达式的常见案例

【JavaSE学习】05-1常用API_第88张图片【JavaSE学习】05-1常用API_第89张图片
【JavaSE学习】05-1常用API_第90张图片

正则表达式在方法中的应用

【JavaSE学习】05-1常用API_第91张图片【JavaSE学习】05-1常用API_第92张图片

正则表达式爬取信息

【JavaSE学习】05-1常用API_第93张图片
【JavaSE学习】05-1常用API_第94张图片

Arrays

Arrays类概述

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

Arrays类的常用API
【JavaSE学习】05-1常用API_第95张图片
【JavaSE学习】05-1常用API_第96张图片

Arrays类的排序方法

【JavaSE学习】05-1常用API_第97张图片

自定义排序规则

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

【JavaSE学习】05-1常用API_第98张图片【JavaSE学习】05-1常用API_第99张图片

有时候开发中数组内不全是数字,也会存对象,根据对象内的数据排 如图
【JavaSE学习】05-1常用API_第100张图片

细节:因为compare方法需要返回整数,浮点型相减会出现小数,但直接转成整数会出现bug,如图

所以sun公司帮我们贴心做好了浮点型数值相减返回整数的API,直接使用Double.compare()

Comparator接口匿名内部类的写法可以使用Lambda简化 详见 -> 03面向对象 的Lambda实战-简化常见函数式接口


注:

该内容是根据B站黑马程序员学习时所记,相关资料可在B站查询:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)

你可能感兴趣的:(JavaSE学习,学习,java)