目录
[TOC]
第一章:API概述
什么是API?
API,应用程序编程接口。Java API是一本程序员的 字典 ,是JDK中提供给
我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学
习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。
API使用步骤
- 打开帮助文档。
- 点击显示,找到索引,看到输入框。
- 你要找谁?在输入框里输入,然后回车。
- 看包。java.lang下的类不需要导包,其他需要。
- 看类的解释和说明。
- 学习构造方法。
- 使用成员方法
第二章:Scanner类
Scanner类介绍
一个可以解析基本类型和字符串的简单文本扫描器
使用步骤
导包:
import java.util.Scanner;
构造函数:
public Scanner(InputStream source)
-
常用方法:
-
public String next()
查找并返回来自此扫描器的下一个完整标记 -
public int nextInt()
将输入信息的下一个标记扫描为一个 int
-
-
代码
public static void main(String[] args) { System.out.println("请输入您的姓名:"); String name = new Scanner(System.in).next(); System.out.println("请输入您的年龄:"); int age = new Scanner(System.in).nextInt(); System.out.println("您的姓名:" + name); System.out.println("您的年龄:" + age); }
第三章:Random类
Random类介绍
此类的实例用于生成伪随机数流。
Random类使用步骤
导包:
import java.util.Random;
构造方法:
public Random()
-
常用方法:
-
public int nextInt(int n)
返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值
-
-
代码:
public static void main(String[] args) { Random random = new Random(); // 获取 0-1之间的随机数 double num1 = random.nextDouble(); System.out.println(num1); // 获取 0-3之间的随机整数数 int num2 = random.nextInt(4); System.out.println(num2); // 获取 1-3之间的随机整数 int num3 = random.nextInt(3) + 1; System.out.println( num3 ); }
第四章:ArrayList类
ArrayList介绍
java.util.ArrayList 是大小可变的数组的实现,存储在内的数据称为元素。此类提供一些方法来操作内部存储
的元素。 ArrayList 中可不断添加元素,其大小也自动增长。
ArrayList的使用步骤
导包:
java.util.ArrayList
构造方法:
public ArrayList()
-
常用方法:
-
public boolean add(E e)
:将指定的元素添加到此集合的尾部。 -
public E remove(int index)
:移除此集合中指定位置上的元素。返回被删除的元素。 -
public E get(int index)
:返回此集合中指定位置上的元素。返回获取的元素。 -
public int size()
:返回此集合中的元素数。遍历集合时,可以控制索引范围,防止越界。
-
-
代码:
public static void main(String[] args) { ArrayList
list = new ArrayList<>(); // add list.add("张三"); list.add("李四"); list.add("王五"); // remove list.remove(1); // size 和 get for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } // contains System.out.println(list.contains("李四")); }
第五章:String类
概述
java.lang.String
类代表字符串。
Java程序中所有的字符串文字(例如 "abc" )都可以被看作是实现此类的实例。
类 String 中包括用于检查各个字符串的方法,比如用于比较字符串,搜索字符串,提取子字符串以及创建具有翻 译为大写或小写的所有字符的字符串的副本。
特点
-
字符串不变:字符串的值在创建后不能被更改。
String s1 = "abc"; s1 += "d"; System.out.println(s1); // "abcd" // 内存中有"abc","abcd"两个对象,s1从指向"abc",改变指向,指向了"abcd"。
-
因为String对象是不可变的,所以它们可以被共享。
String s1 = "abc"; String s2 = "abc"; // 内存中只有一个"abc"对象被创建,同时被s1和s2共享。
"abc" 等效于 char[] data={ 'a' , 'b' , 'c' } 。
例如:
String str = "abc";
相当于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
// String底层是靠字符数组实现的。
导包和构造方法
导包:
import.lang.String
-
构造方法:
-
public String()
:初始化新创建的 String对象,以使其表示空字符序列。 -
public String(char[] value)
:通过当前参数中的字符数组来构造新的String。 -
public String(byte[] bytes)
:通过使用平台的默认字符集解码当前参数中的字节数组来构造新的 String。
-
-
代码:
// 无参构造 String str = new String(); // 通过字符数组构造 char chars[] = {'a', 'b', 'c'}; String str2 = new String(chars); // 通过字节数组构造 byte bytes[] = { 97, 98, 99 }; String str3 = new String(bytes); // 常用方式 String str4 = "字符串";
判断功能的方法
-
方法:
-
public boolean equals (Object anObject)
:将此字符串与指定对象进行比较。 -
public boolean equalsIgnoreCase (String anotherString)
:将此字符串与指定对象进行比较,忽略大小 写。
-
-
代码:
public static void main(String[] args) { String str1 = "hello"; String str2 = "Hello"; System.out.println(str1.equals(str2)); // false System.out.println(str1.equalsIgnoreCase(str2)); // true }
获取功能的方法
-
方法:
-
public int length ()
:返回此字符串的长度。 -
public String concat (String str)
:将指定的字符串连接到该字符串的末尾。 -
public char charAt (int index)
:返回指定索引处的 char值。 -
public int indexOf (String str)
:返回指定子字符串第一次出现在该字符串内的索引。 -
public String substring (int beginIndex)
:返回一个子字符串,从beginIndex开始截取字符串到字符 串结尾。 -
public String substring (int beginIndex, int endIndex)
:返回一个子字符串,从beginIndex到 endIndex截取字符串。含beginIndex,不含endIndex -
7. public boolean contains(CharSequence s)
检测指定的子字符串是否存在。
-
-
代码:
public static void main(String[] args) { String str1 = "abc"; String str2 = "defg"; //1. `public int length ()` :返回此字符串的长度。 System.out.println(str1.length());// 3 //2. `public String concat (String str)` :将指定的字符串连接到该字符串的末尾。 System.out.println(str1.concat(str2)); // abcdefg //3. `public char charAt (int index)` :返回指定索引处的 char值。 System.out.println(str1.charAt(1)); // b //4. `public int indexOf (String str)` :返回指定子字符串第一次出现在该字符串内的索引。 System.out.println(str1.indexOf("b")); // 1 System.out.println(str1.indexOf("j")); // -1 不存在 //5. `public String substring (int beginIndex)` :返回一个子字符串,从beginIndex开始截取字符串到字符 串结尾。 System.out.println(str1.substring(1)); // bc //6. `public String substring (int beginIndex, int endIndex)` :返回一个子字符串,从beginIndex到 endIndex截取字符串。含beginIndex,不含endIndex System.out.println(str2.substring(1,3)); // ef // 7. public boolean contains(CharSequence s) 检测指定的子字符串是否存在 System.out.println(str2.contains("ef")); // true System.out.println(str2.contains("efgh")); // false }
转换功能的方法
-
方法:
-
public char[] toCharArray ()
:将此字符串转换为新的字符数组。 -
public byte[] getBytes ()
:使用平台的默认字符集将该 String编码转换为新的字节数组。 -
public String replace (CharSequence target, CharSequence replacement
) :将与target匹配的字符串使 用replacement字符串替换。
-
-
代码:
public static void main(String[] args) { String str1 = "abac"; // 1. `public char[] toCharArray ()` :将此字符串转换为新的字符数组。 char[]cs = str1.toCharArray(); // 2. `public byte[] getBytes () `:使用平台的默认字符集将该 String编码转换为新的字节数组。 byte[]bs = str1.getBytes(); // 3. `public String replace (CharSequence target, CharSequence replacement`) :将与target匹配的字符串使 用replacement字符串替换。 System.out.println(str1.replace("a","A")); // AbAc }
分割功能方法
-
方法:
-
public String[] split(String regex)
:将此字符串按照给定的regex(规则)拆分为字符串数组。
-
-
代码:
public static void main(String[] args) { //`public String[] split(String regex)` :将此字符串按照给定的regex(规则)拆分为字符串数组。 //创建字符串对象 String s = "aa-bb-cc"; String[] strArray = s.split("-"); // ["aa","bb","cc"] for(int x = 0; x < strArray.length; x++) { System.out.println(strArray[x]); // aa bb cc } }
第六章:Arrays类
概述
java.util.Arrays
此类包含用来操作数组的各种方法,比如排序和搜索等。其所有方法均为静态方法,调用起来 非常简单。
常用方法
-
方法:
-
public static String toString(int[] a)
:返回指定数组内容的字符串表示形式。 -
public static void sort(int[] a)
:对指定的 int 型数组按数字升序进行排序。
-
-
代码:
public static void main(String[] args) { int[]nums = {100,400,200,300,600,500}; // 1. `public static String toString(int[] a) `:返回指定数组内容的字符串表示形式。 System.out.println(Arrays.toString(nums)); // [100, 400, 200, 300, 600, 500] // 2. `public static void sort(int[] a)` :对指定的 int 型数组按数字升序进行排序。 Arrays.sort(nums); System.out.println(Arrays.toString(nums)); // [100, 200, 300, 400, 500, 600] }
第七章:Math类
概述
java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具 类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单。
方法
-
方法:
-
public static double abs(double a)
:返回 double 值的绝对值。 -
public static double ceil(double a)
返回大于等于参数的最小的整数。
-
-
代码:
public static void main(String[] args) { System.out.println(Math.abs(-100)); // 100 System.out.println(Math.ceil(10.1)); // 11.0 System.out.println(Math.floor(10.1)); // 10.0 }
第八章:Object类
概述
java.lang.Object
类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。
如果一个类没有特别指定父类, 那么默认则继承自Object类
根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个。今天我们主要学习其中的2个:
-
public String toString()
:返回该对象的字符串表示。 -
public boolean equals(Object obj)
:指示其他某个对象是否与此对象“相等”。
toString方法
public String toString()
:返回该对象的字符串表示。toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。-
覆盖方法:
public class Person { private String name; private int age; private String gender; @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", gender='" + gender + '\'' + '}'; } }
equals方法
public boolean equals(Object obj)
:指示其他某个对象是否与此对象“相等”。调用成员方法equals并指定参数为另一个对象,则可以判断这两个对象是否是相同的。这里的“相同”有默认和自定义两种方式。默认地址比较,如果没有覆盖重写equals方法,那么Object类中默认进行
==
运算符的对象地址比较,只要不是同一个对象,结果必然为false。-
对象内容比较,如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。
public class Person { private String name; private int age; private String gender; @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", gender='" + gender + '\'' + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Person)) return false; Person person = (Person) o; return age == person.age && Objects.equals(name, person.name) && Objects.equals(gender, person.gender); } @Override public int hashCode() { return Objects.hash(name, age, gender); } }
Objects类
在刚才IDEA自动重写equals代码中,使用到了java.util.Objects
类,那么这个类是什么呢?
在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。
在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题。方法如下:
-
public static boolean equals(Object a, Object b)
:判断两个对象是否相等。
我们可以查看一下源码,学习一下:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
第九章:Date类
Date基本使用
java.util.Date
类 表示特定的瞬间,精确到毫秒。
继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。
-
public Date()
:分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。 -
public Date(long date)
:分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。 - 常用方法:
-
public long getTime()
把日期对象转换成对应的时间毫秒值。
-
代码:
public static void main(String[] args) {
// 创建当前日期对象
Date date = new Date();
System.out.println(date); // Sat Dec 07 17:29:13 CST 2019
// 根据时间戳创建指定日期对象
Date date2 = new Date(0);
System.out.println(date2); // Thu Jan 01 08:00:00 CST 1970
// 返回当前日期的时间戳
System.out.println(date.getTime()); // 1575710983951
}
DateFormat日期格式类
-
概述:
java.text.DateFormat
是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。- 格式化:按照指定的格式,从Date对象转换为String对象。
- 解析:按照指定的格式,从String对象转换为Date对象。
-
构造方法:由于DateFormat为抽象类,不能直接使用,所以需要常用的子类
java.text.SimpleDateFormat
。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:-
public SimpleDateFormat(String pattern)
:用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。参数pattern是一个字符串,代表日期时间的自定义格式。
-
-
格式规则常用的格式规则为:
标识字母(区分大小写) 含义 y 年 M 月 d 日 h 时 m 分 s 秒 -
常用方法
-
public String format(Date date)
:将Date对象格式化为字符串。 -
public Date parse(String source)
:将字符串解析为Date对象。
-
-
代码:
public static void main(String[] args) throws ParseException { // 创建当前日期对象 Date date = new Date(); // 创建格式化对象 DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String dateStr = format.format(date); System.out.println(dateStr); // 2019-12-07 05:37:53 // 把格式化日期转换为日期对象 Date date2 = format.parse("2100-12-12 12:12:12"); System.out.println(date2); // Sun Dec 12 00:12:12 CST 2100 }
Calendar类
概述:
java.util.Calendar
是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。-
获取Calendar对象:Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象
-
public static 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对象。
-
-
field:Calendar类中提供很多成员常量,代表给定的日历字段:
字段值 含义 YEAR 年 MONTH 月(从0开始,可以+1使用) DAY_OF_MONTH 月中的天(几号) HOUR 时(12小时制) HOUR_OF_DAY 时(24小时制) MINUTE 分 SECOND 秒 DAY_OF_WEEK 周中的天(周几,周日为1,可以-1使用) -
代码:
public static void main(String[] args) { // 获取日历对象 Calendar calendar = Calendar.getInstance(); // 获取当前日期的部分数据 System.out.println(calendar.get(Calendar.YEAR)); System.out.println(calendar.get(Calendar.MONTH)); System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); System.out.println(calendar.get(Calendar.HOUR_OF_DAY)); System.out.println(calendar.get(Calendar.MINUTE)); System.out.println(calendar.get(Calendar.SECOND)); System.out.println(calendar.get(Calendar.DAY_OF_WEEK)); }
第十章:System类
概述
java.lang.System
类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有:
public static long currentTimeMillis()
:返回以毫秒为单位的当前时间。-
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
:将数组中指定的数据拷贝到另一个数组中。- 数组的拷贝动作是系统级的,性能很高。System.arraycopy方法具有5个参数,含义分别为:
参数序号 参数名称 参数类型 参数含义 1 src Object 源数组 2 srcPos int 源数组索引起始位置 3 dest Object 目标数组 4 destPos int 目标数组索引起始位置 5 length int 复制元素个数
代码
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
int[]nums1 = {1,2,3,4,5};
int[]nums2={88,99,188};
System.arraycopy(nums1,1,nums2,0,2);
System.out.println(Arrays.toString(nums2)); // [2, 3, 188]
long endTime = System.currentTimeMillis();
System.out.println("共耗时:" + (endTime-startTime) + "毫秒");
}
第十一章:StringBuilder类
字符串拼接问题
由于String类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象,既耗时,又浪费空间。为了解决这一问题,可以使用java.lang.StringBuilder
类。
概述
查阅java.lang.StringBuilder
的API,StringBuilder又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。
原来StringBuilder是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。
它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。StringBuilder会自动维护数组的扩容。
构造方法
-
public StringBuilder()
:构造一个空的StringBuilder容器。 -
public StringBuilder(String str)
:构造一个StringBuilder容器,并将字符串添加进去。
常用方法
-
public StringBuilder append(...)
:添加任意类型数据的字符串形式,并返回当前对象自身。 -
public String toString()
:将当前StringBuilder对象转换为String对象。
代码:
public static void main(String[] args) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 10000; i++) {
builder.append(i);
}
System.out.println(builder.toString());
}
第十二章:包装类
概述
Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类
如下:
基本类型 | 对应的包装类(位于java.lang包中) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
装箱与拆箱
基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:
- 装箱:从基本类型转换为对应的包装类对象。
- 拆箱:从包装类对象转换为对应的基本类型。
用Integer与 int为例:(看懂代码即可)
基本数值---->包装对象
Integer i = new Integer(4);//使用构造函数函数
Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法
包装对象---->基本数值
int num = i.intValue();
自动装箱与自动拆箱
由于我们经常要做基本类型与包装类之间的转换,从Java 5(JDK 1.5)开始,基本类型与包装类的装箱、拆箱动作可以自动完成。例如:
Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4);
i = i + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5;
//加法运算完成后,再次装箱,把基本数值转成对象。
基本数据类型和字符串互相转换
基本数据类型转换字符串:
基本类型的数据 + ""
-
字符串转基本数据类型:除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型:
-
public static byte parseByte(String s)
:将字符串参数转换为对应的byte基本类型。 -
public static short parseShort(String s)
:将字符串参数转换为对应的short基本类型。 -
public static int parseInt(String s)
:将字符串参数转换为对应的int基本类型。 -
public static long parseLong(String s)
:将字符串参数转换为对应的long基本类型。 -
public static float parseFloat(String s)
:将字符串参数转换为对应的float基本类型。 -
public static double parseDouble(String s)
:将字符串参数转换为对应的double基本类型。 -
public static boolean parseBoolean(String s)
:将字符串参数转换为对应的boolean基本类型。
代码使用(仅以Integer类的静态方法parseXxx为例)如:
public class Demo18WrapperParse { public static void main(String[] args) { int num = Integer.parseInt("100"); } }
注意:如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出
java.lang.NumberFormatException
异常。 -