09.Java常用基础类
今年花胜去年红。可惜明年花更好,知与谁同?
——欧阳修《浪淘沙》
[TOC]Java中常用基础类
1. API
API(Application Programming Interface),应用程序编程接口。Java API是一本程序员的 字典 ,是JDK中提供给我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。
- Java中的API,就是JDK提供的各种功能的Java类。
- JDK帮助文 JAVA_API_CN.chm
- 官网地址:http://www.oracle.com/technetwork/java/api-141528.html
2. Scanner类
Scanner类一个可以解析基本类型和字符串的简单文本扫描器,扫描控制台的输入,带入到程序中。(输入的内容,不管你输入的是什么,扫描器拿到的全部都是字符串,然后进行的强制的类型转换.)
我们在使用Idea开发的时候,常用的junit的测试但是IntelliJ IDEA控制台junit不能用Scanner输入。如果想要使用它,需要进行一下配置:解决IntelliJ IDEA控制台junit不能用Scanner输入
System.in获取键盘输入的数据流 系统输入指的是通过键盘录入数据。
Scanner类常用的方法:
scanner.nextInt();
获取一个整型的数据scanner.next();
获取的是字符串–next()方法读取到空白符就结束;scanner.nextLine();
nextLine一次读取一行–nextLine()读取到回车结束也就是“\r”
1 | public static void main(String[] args) { |
3. Random类
Random类常用方法:
random.nextInt();
在int值范围生成随机数random.nextInt(521);
[0,521)random.nextInt(10) + 20;
[20,30)
1 | /** |
二分法猜数字:1-100以内的一个数字。
1 | public static void main(String[] args) { |
4. String类
String 类代表字符串,Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。程序中所有用双引号引起来的字符串,都是String的对象。(就算没有写new ,也是String类的对象)
特点:
字符串的内容永不可变。
因为字符串的内容不可以改变。所以字符串是可以共享使用的。
字符串从效果上来说的话有点类似于char[],但是底层的实现用的是byte[];
4.1 创建字符串对象的方式
1 | //第一种创建字符串等方式:创建一个空白字符串 |
4.2 字符串常量
字符串常量池:程序中直接写上上引号的字符串,就存储在字符串常量池中。
如果是基本数据类型:== 比较的数值
如果是引用数据类型:== 比较的是内存地址。
String 专门给我们提供了一个方法用于字符串的比较:
- 使用equals方法来完成字符串的比较。字符串使用equals比较的时候,比较是字符串里面的每一个字符。
4.3 字符串类常用方法
.length(); //获得字符串的长度
str1.concat(String str2); //字符串的拼接一般不用,因为和“+”效果一样
.charAt (int index); //获取某个索引处的字符
.indexOf(String str); //查找str在字符串中的首次出现的位置。如果没有查找到对应的字符串,那么返回的索引号为**-1**
1 |
|
.substring(int index); // 截取字符串,从字符串索引为index的位置开始截取,一直截取到最后, 原始的字符串没有发生任何变化。
substring(int begin, int end); //字符串截取, 包前不包后[ begin , end )
1 | String str = "Hello justweb"; |
- .toCharArray(); //将当前的字符串拆分成字符数组并返回。
- .getBytes(); //将字符串转成字节数组。
- .replace (oldString,newString); //替换字符串
- public String[] split(String regex) //将此字符串按照给定的regex(规则)拆分为字符串数组
1 | public static void main(String[] args) { |
5. Arrays类
工具类
java.util.Arrays
此类包含用来操作数组的各种方法,比如排序和搜索等。其所有方法均为静态方法,调用起来非常简单。操作数组的方法:
boolean equals(int[] a,int[] b);
判断两个数组是否相等void fill(int[] a,int val);
填充到数组中void sort(int[] a);
(快速排序)对数组进行排序。int binarySearch(int[] a,int key);
对排序后的数组进行二分法检索指定的值String toString(int[] a);
输出数组信息。
1 | public static void main(String[] args) { |
Arrays.sort();
对基本数据类型数组的排序
数字排序:
1
2
3 int[] intArray = new int[]{1,56,-5,33};
Arrays.sort(intArray);
System.out.println(Arrays.toString(intArray));反向排序
1
2 // Arrays类之只是提供了默认的升序排列,没有提供相应的降序排列方法
Arrays.sort(strArray, Collections.reverseOrder());对对象数组的排序:要实现对对象数组的排序,要先实现Comparable或者Comparator接口。下面先简单了解以下这两个接口以及它们的差别,后面会再接触到。
- Comparable 是排序接口,若一个类实现了Comparable接口,就意味着“该类支持排序”。
- 即然实现Comparable接口的类支持排序,假设现在存在“实现Comparable接口的类的对象的List列表(或数组)”,则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。
6. Math类
- 工具类
java.lang.Math
类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单。- 基本运算的方法:
Math.abs(‐5);
取绝对值Math.ceil(a);
向上取整- **
Math.floor(a);
**向下取整- **
Math.round(a);
**四舍五入Math.PI
π
7. ArrayList类
java.util.ArrayList
是大小可变的数组的实现,存储在内的数据称为元素。此类提供一些方法来操作内部存储的元素。ArrayList
中可不断添加元素,其大小也自动增长.
7.1 引入——数组的特点
- 数组的长度是固定的,无法适应数据变化的需求
- 为了解决这个问题,Java提供了另一个容器 java.util.ArrayList 集合类,让我们可以更便捷的存储和操作对
象数据。- 引入ArrayList,模拟其底层实现:
1 | public class DemoArrayList { |
7.1 ArrayList基础
对于
java.util.ArrayList <E>
来说 有一个代表的就是泛型
- 泛型:指定在集合中的元素必须是什么数据类型的。
- 要求:泛型必须是引用数据类型,不能是基本数据类型,所以,
- ==如果填写数值的话要使用对应的数值的包装类作为泛型。==
ArrayList<String>,ArrayList<Student>
查看构造方法
public ArrayList()
:构造一个内容为空的集合。~~~~java
// 基本格式:
ArrayListlist = new ArrayList ();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#### 7.3 常用方法和遍历
对于元素的操作,基本体现在——增、删、查。常用的方法有:
- `public boolean add(E e) `:将指定的元素添加到此集合的尾部。
- `public void add(int index, E element)`:在此列表中的指定位置插入指定的元素。 将当前位于该位置的元素(如果有)和任何后续元素(向其索引添加一个)移动。
- `public E remove(int index) `:移除此集合中指定位置上的元素。返回被删除的元素。
- `public E get(int index) `:返回此集合中指定位置上的元素。返回获取的元素。
- `public E set(int index,E element)`:用指定的元素替换此列表中指定位置的元素。
- `public int size()` :返回此集合中的元素数。遍历集合时,可以控制索引范围,防止越界。
#### 7.4 如何存储基本数据类型
1. ArrayList对象不能存储基本类型,只能存储引用类型的数据。类似` <int> `不能写,但是存储基本数据类型对应的包装类型是可以的。所以,想要存储基本类型数据,` <>` 中的数据类型,必须转换后才能编写,转换写法如下:
2. 我们发现,只有 Integer 和 Character 需要特殊记忆,其他基本类型只是首字母大写即可。
| **基本类型** | **基本类型包装类** |
| ------------ | ------------------ |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
#### 7.5 ArrayList底层简单分析
其他内容会对其底层进行详细的分析。
~~~~java
// 初始容量(添加一个元素后)
private static final int DEFAULT_CAPACITY = 10;
// 集合刚创建的时候的,元素的数据为{};
private static final Object[] EMPTY_ELEMENTDATA = {};
// 默认数组元素的内容
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}
// 真正存储数据的数组。
Object[] elementData ;
// 添加的元素的个数。
int size
8. Date类
- 在使用println方法时,会自动调用Data类中的toString方法。Date类对Object类中的toString方法进行了覆··盖重写所以结果为指定格式的字符串。
- new Date(); 返回的是当前时间–
Thu May 14 14:41:13 CST 2020
- new Date(0); 时间元年CST –
Thu Jan 01 08:00:00 CST 1970
- 由于我们处于东八区,所以我们的基准时间为1970年1月1日8时0分0秒。
- date.getTime(); 返回的是定义的时间零点到当前时间的毫秒值–
1589438473138
1 | public static void main(String[] args) { |
9. DateFormat 类
java.text.DateFormat
是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。由于DateFormat为抽象类,不能直接使用,所以需要常用的子类
java.text.SimpleDateFormat 。
- 格式化:
public String format(Date date);
按照指定的格式,从Date对象转换为String对象。- 解析:
public Date parse(String source);
按照指定的格式,从String对象转换为Date对象。
1 | SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); |
9.1 请使用日期时间相关的API,计算出一个人已经出生了多少天。
思路:
获取当前时间对应的毫秒值
获取自己出生日期对应的毫秒值
两个时间相减(当前时间– 出生日期)
1 | public static void function() throws Exception { |
10. Calendar 类
java.util.Calendar 是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。
获取方式Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象。
1
2 // 使用默认时区和语言环境获得一个日历
Calendar calendar = Calendar.getInstance();常用方法:
- public int get(int field) :返回给定日历字段的值。
- public void set(int field, int value) :将给定的日历字段设置为给定值。
- public abstract void add(int field, int amount) :根据日历的规则,为给定的日历字段添加或减去指定的时间量
- public Date getTime() :返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
字段值 | 含义 |
---|---|
YEAR | 年 |
MONTH | 月(从0开始,可以+1使用) |
DAY_OF_MONTH | 月中的天(几号) |
HOUR | 时(12小时制) |
HOUR_OF_DAY | 时(24小时制) |
MINUTE | 分 |
SECOND | 秒 |
DAY_OF_WEEK | ==周中的天(周几,周日为1,可以使-1 使用)== |
get/set方法
- get方法用来获取指定字段的值
- set方法用来设置指定字段的值
1 | public class CalendarUtil { |
1 | public class CalendarMethod { |
- add方法可以对指定日历字段的值进行加减操作,如果第二个参数为正数则加上偏移量,如果为负数则减去偏移量。
1 | public class Demo08CalendarMethod { |
Calendar中的getTime方法并不是获取毫秒时刻,而是拿到对应的Date对象。
1 | public class Demo09CalendarMethod { |
- 西方星期的开始为周日,中国为周一。
- 在Calendar类中,月份的表示是以0-11代表1-12月。
- 日期是有大小关系的,时间靠后,时间越大。
11. System类
java.lang.System
类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。- 在System类的API文档中,常用的方法有:
public static long currentTimeMillis()
:返回以毫秒为单位的当前时间.public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
:**将数组中指定的数据拷贝到另一个数组中
**
- src : 数据源
- srcPos : 起始位置
- dest : 目标位置
- destPos: 起始复制位置
- length : 复制长度
1 | public static void main(String[] args) { |