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
-
- 注:
前言
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”)都为此类的对象。
String类的特点
- String其实常被称为不可变字符串类型,它的对象在创建后不能被更改。
以“ ”方式给出的字符串对象,在字符串常量池中存储,其代表不同的地址,+= 是把两个对象经过计算得到一个新的对象地址再由name指向它,所以它的对象在创建后不能被更改。不是字符串不能变,是它创建出来就代表一个对象,有固定的地址,这个对象是不可变的。
再有相同 “ ” 定义的字符串就直接指向它了。意思是 String s1 = “张三”,String s2 = “张三”。"张三"这个字符串对象已经被s1创建出来了,s2和s1指向的是同一个地址。如果s1 += ”李四“ 那么就计算了一个新的"张三李四"对象被s1指向。s2指向的还是"张三"这个地址。所以它的对象不可变
String类创建对象的两种方式
方式一常用。方式二了解,面试可能有
方式一和方式二有什么区别吗?(面试常考)
String类的常用方法-字符串比较、遍历、替换、截取、分割操作
字符串内容比较
遍历、替换、截取、分割操作
public boolean startsWith(String prefix) |
传入字符串,判断是否包含此字符串,是则返回true,反之 |
ArrayList
集合概述
集合是与数组类似,也是一种容器,用于装数据的
- ArrayList是集合中的一种,它支持索引。(暂时先学习这个,后期课程会学习整个集合体系)
ArrayList集合快速入门
ArrayList对泛型的支持
泛型概述
- ArrayList:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型。
举例:
- ArrayList<String> :此集合只能操作字符串类型的元素。
- ArrayList<Integer>:此集合只能操作整数类型的元素。
注意:泛型只能支持引用数据类型,不支持基本数据类型。(后续对泛型有更详细介绍)
ArrayList常用方法、遍历
Object
Object类的作用
- 一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类。
- Object作为所有类的父类,提供了很多常用的方法给每个子类对象拿来使用。
Object类的常用方法:
Object类:toString方法
问题引出
- 开发中直接输出对象,默认输出对象的地址其实是毫无意义的。
- 开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息。
toString存在的意义
- 父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息!!
重写toString快捷键:Alt+Insert 选择toString 或 直接打首字母根据提示选择
Object类:equals方法
问题思考
- 直接比较两个对象的地址是否相同完全可以用“==”替代,为什么还要使用equals。
(因为开发中很多业务情况更想判断2个对象的内容是否一样)
equals存在的意义
- 为了被子类重写,以便子类自己来定制比较规则(比如比较对象内容)
重写equals快捷键:Alt+Insert 选择equals() and hashCode() 或 直接打首字母根据提示选择
弹窗一直next即可,idea官方帮我们写好了判断两个对象内容是否相等的规则,和我们上面自己写的有些不同
Objects
Objects概述
- Objects是一个工具类,提供了一些方法去完成一些功能。
官方在进行字符串比较时,没有用字符串对象的的equals方法,而是选择了Objects的equals方法来比较。
因为传进的name有可能是null,如果传进是null的话使用equals就会报空指针异常
使用Objects的equals方法在进行对象的比较会更安全。
Objects的常见方法:
Objects.equals()源码分析
StringBuilder
StringBuilder概述
- StringBuilder是一个可变的字符串的操作类,我们可以把它看成是一个对象容器。
- 使用StringBuilder的核心作用:操作字符串的性能比String要更高(如拼接、修改等)。
StringBuilder 构造器
StringBuilder常用方法
为什么StringBuilder性能好
String类拼接字符串原理图
StringBuilder提高效率原理图
总结:StringBuilder只是拼接字符串等的手段,效率好。最终的目的还是要恢复成String类型
Math
Math类
- 包含执行基本数学运算的方法,Math类没有提供公开的构造器
- 如何使用类中的成员呢?看类的成员是否都是静态的,如果是,提供类名就可以直接调用
Math类的常用方法
System
System类
System的功能是通用的,都是直接用类名调用即可,所以System不能被实例化。
System类的常用方法
BigDecimal
BigDecimal作用
使用步骤
- 创建对象BigDecimal封装浮点型数据(最好的方法是调用方法)
阿里巴巴Java开发手册说:
BigDecimal常用API
注意
- 精度处理只是手段、方法,最终的目的还要换成double
- BigDecimal是一定要精度运算的,不然会报错 如 10/3
日期与时间
Date
Date类概述
Date的构造器
Date的常用方法
Date类记录时间的2种形式
形式1:日期对象
形式2:时间毫秒值
- 指从1970年1月1日 00:00:00走到此刻的总毫秒值,很大的
案例
- 请计算出当前时间往后走1小时121秒之后的时间是多少。
时间毫秒值 -> 日期对象
SimpleDateFormat
SimpleDateFormat类作用
- 格式化日期:可以把Date对象或时间毫秒值格式化成我们喜欢的时间形式。
- 也可以把字符串的日期形式解析成日期对象。
SimpleDateFormat的构造器
SimpleDateFormat的格式化方法
格式化时间形式的常用模式对应关系如下:
SimpleDateFormat解析字符串时间成为日期对象
案例
- 计算时间 2022年09月06日 11:11:11 往后走 2天 14小时 49分 06秒 后的时间是多少
Calendar
Calendar概述
- Calendar代表了系统此刻日期对应的日历对象。
- Calendar是一个抽象类,不能直接创建对象。
Calendar日历类创建日历对象的方法:
Calendar常用方法
注意:Calendar是可变日期对象,一旦修改后其对象本身表示的时间将产生变化。
JDK8新增日期类
概述
- 从Java 8开始,java.time包提供了新的日期和时间API,主要涉及的类型有:
- 新增的API严格区分了时刻、本地日期、本地时间,并且,对日期和时间进行运算更加方便。
- 其次,新API的类型几乎全部是不变类型(和String的使用类似),可以放心使用不必担心被修改。
太多了,不用刻意去记,要用过来查
LocalDate、LocalTime、LocalDateTime
- 他们 分别表示日期,时间,日期时间对象,他们的类的实例是不可变的对象。
- 他们三者构建对象和API都是通用的
构建对象的方式如下:
LocalDate、LocalTime、LocalDateTime获取信息的API:
转换相关的API
LocalDateTime的转换API
修改相关的API:
- LocalDateTime 综合了 LocalDate 和 LocalTime 里面的方法,所以下面只用 LocalDate 和 LocalTime 来举例。
- 这些方法返回的是一个新的实例引用,因为LocalDateTime 、LocalDate 、LocalTime 都是不可变的。
Instant
Instant时间戳
- JDK8获取时间戳特别简单,且功能更丰富。Instant类由一个静态的工厂方法now()可以返回当前时间戳
- 时间戳是包含日期和时间的,与java.util.Date很类似,事实上Instant就是类似JDK8 以前的Date。
- Instant和Date这两个类可以进行转换。
DateTimeFormatter
- 在JDK8中,引入了一个全新的日期与时间格式器DateTimeFormatter。
- 正反都能调用format方法。
Duration/Period
Duration
- 在Java8中,我们可以使用以下类来计算**时间间隔**差异:java.time.Duration
- 提供了使用基于时间的值测量时间量的方法。
- 用于 LocalDateTime 之间的比较。也可用于 Instant 之间的比较。
Period
- 在Java8中,我们可以使用以下类来计算**日期间隔**差异:java.time.Period
- 主要是 Period 类方法 getYears(),getMonths() 和 getDays() 来计算,只能精确到年月日。
- 用于 LocalDate 之间的比较。
ChronoUnit
java.time.temporal.ChronoUnit
- ChronoUnit类可用于在单个时间单位内测量一段时间,这个工具类是最全的了,可以用于比较所有的时间单位
包装类
- 其实就是8种基本数据类型对应的引用类型。
为什么提供包装类?
- Java为了实现一切皆对象,为8种基本类型提供了对应的引用类型。
- 后面的集合和泛型其实也只能支持包装类型,不支持基本数据类型。
自动装箱:基本类型的数据和变量可以直接赋值给包装类型的变量。
自动拆箱:包装类型的变量可以直接赋值给基本数据类型的变量。
包装类的特有功能
通用 .valueOf(“字符串类型”) 看主调是谁,主调是 Integer 就转 Integer,主调是 Double 就转 Double。可以用基本类型接,自动拆箱。注意:它没有解决double的精度问题。
正则表达式
- 正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。
- 参考网址:菜鸟教程-正则表达式 - 匹配规则
正则表达式初体验
- 需求:假如现在要求校验一个qq号码是否正确,6位及20位之内,必须全部是数字 。
- 先使用目前所学知识完成校验需求;然后体验一下正则表达式检验。
正则表达式匹配规则
正则表达式的常见案例
正则表达式在方法中的应用
正则表达式爬取信息
Arrays
Arrays类概述
Arrays类的常用API
Arrays类的排序方法
自定义排序规则
- 设置Comparator接口对应的比较器对象,来定制比较规则。
有时候开发中数组内不全是数字,也会存对象,根据对象内的数据排 如图
细节:因为compare方法需要返回整数,浮点型相减会出现小数,但直接转成整数会出现bug,如图
所以sun公司帮我们贴心做好了浮点型数值相减返回整数的API,直接使用Double.compare()
Comparator接口匿名内部类的写法可以使用Lambda简化 详见 -> 03面向对象 的Lambda实战-简化常见函数式接口
注:
该内容是根据B站黑马程序员学习时所记,相关资料可在B站查询:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)