一、概念
API(Application Programming Interface):应用程序编程接口。即是程序员的字典。
使用API文档时,先进行搜索,再看包名,而后看构造方法,最后看方法摘要。
二、Scanner
读取实现键盘输入的数据
引用类型的使用步骤如下:
2.1 导包
import java.util.Scanner;
- 如果需要使用的目标类,和当前类处于同一个包下,则可以省略导包语句不写
- 只有java.lang包下的内容不需要导包,其他的包都需要import语句。
2.2 创建
类名称 对象名 = new 类名称();
2.3 使用
对象名.成员方法名();
// 我们输入的信息会以空格或换行符为间隔符,将输入的信息划分成一个个标记
Scanner sc = new Scanner(System.in);// System.in 表示从键盘输入
// 将输入信息的下一个标记扫描为一个 int,如果转换不成 int 会报错。
int num = sc.nextInt();
// 查找并返回来自此扫描器的下一个完整标记,获得一个字符串
String str = sc.next();
// 此扫描器执行当前行,并返回跳过的输入信息。 此方法返回当前行的其余部分,不包括结尾处的行分隔符。当前位置移至下一行的行首。
// 以上为API文档的解释,其实就是说,会从上一个标记的间隔符开始读取,遇到一个换行符结束,返回当前行的信息。然后当前位置会到下一行的行首。
// 所以如果在nextLine()语句之前有nextInt()、next()等语句时,会读取他们那行之后的信息,如果他们那行只剩下换行符,那么nextLine()什么也不会返回。
String str2 = sc.nextLine();
public class Demo01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//获取键盘输入的int数字
int num = sc.nextInt();
System.out.println("输入的数字是:" + num);
//获取键盘输入的字符串,但不会读取末尾的空格,而nextLine可以读取末尾的空格
String str = sc.next();
System.out.println("输入的字符串是:" + str);
}
}
注意: Scanner获取的键盘输入的内容全是字符串,只不过通过相应的next方法将其进行类型转换。
三、Random
3.1 使用
① 导包
import java.util.Random;
② 创建
Random r = new Random();
③ 使用
- 获取随机的一个int数字
int num = r.nextInt();//int所有范围的数字
int num1 = r.nextInt(3);//代表的范围是[0,3),即0,1,2
public class Demo02 {
public static void main(String[] args) {
Random r = new Random();
int num = r.nextInt();
System.out.println("随机数是:" + num);
}
}
- 生成范围为[1,100]的随机数:
Random r = new Random();
int num = r.nextInt(100) + 1;
3.2 猜数字
import java.util.Random;
import java.util.Scanner;
public class Demo04 {
public static void main(String[] args) {
int n = 100;
Random r = new Random();
int num = r.nextInt(n) + 1;
// System.out.println("随机数是:" + num);
int times = 5;
Scanner sc = new Scanner(System.in);
System.out.println("请输入您猜的数字" + "(您只有" + times + "次机会):");
int guess = sc.nextInt();
while(guess != num){
times--;
if(times == 0){
System.out.println("不好意思,您没有机会了!");
break;
}
if(guess > num){
System.out.println("您猜的数字大了!重新猜" + "(您只剩下" + times + "次机会了):");
}else{
System.out.println("您猜的数字小了!重新猜" + "(您只剩下" + times + "次机会了):");
}
guess = sc.nextInt();
}
if(guess == num){
System.out.println("恭喜您!猜对了!");
}
System.out.println("游戏结束!");
}
}
四、ArrayList
import java.util.ArrayList<E>
4.1 长度
数组的长度不可变,但ArrayList的长度可以随意变化。
4.2 泛型
① ArrayList <E>
其中尖括号代表泛型,从jdk1.7版本开始,赋值等号的右侧的尖括号内部可以不写内容,但尖括号本身还是要写。
② 泛型:就是装在集合当中的所有元素的统一的类型。
③ 泛型只能是引用类型,不能是基本类型。
④ 如果希望向集合ArrayList当中存储基本类型数据,必须使用基本类型对应的“包装类”。
基本类型 | 包装类(引用类型,包装类都位于java.lang包下) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
从jdk1.5开始,支持自动装箱、自动拆箱。
- 自动装箱:基本类型—->包装类型
- 自动拆箱:包装类型—->基本类型
即 ArrayList 集合当中相应的包装类元素可以与对应的基本数据类型进行相互赋值转换。
4.3 使用
使用add()方法添加数据
- 添加的数据必须与定义的数据类型一致,否则报错。
- 直接打印ArrayList集合名称,得到的不是地址名,而是集合的内容,被中括号包含,各个元素用逗号隔开;如果内容是空,则得到空的中括号:[]。
import java.util.ArrayList;
public class Demo01 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
System.out.println(list);
list.add("java");
list.add("c++");
list.add("python");
list.add("asp.net");
System.out.println(list);
}
}
4.4 常用方法
public boolean add(E e);//向集合当中添加元素,参数的类型和泛型一致
public E get(int index);//从集合当中获取元素,参数是索引编号,返回值就是对应位置的元素
public E remove(int index);//从集合当中删除元素,参数是索引编号,返回值就是被删除的元素(删除元素时,后面的元素会往前移动)
public int size();//获取集合的尺寸长度,返回值就是集合当中包含的元素个数
注意: 对于ArrayList,add()方法一定是可以执行成功的,但是其他集合不一定,所以需要有返回值类型。
4.5 例子
生成6个1~33之间的随机整数,添加至集合中,并遍历集合。
public class Demo02 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
Random r = new Random();
for (int i = 0; i < 6; i++) {
int num = r.nextInt(33) + 1;
list.add(num);
}
for (int j = 0; j < list.size(); j++) {
System.out.println(list.get(j));
}
}
}
五、String
5.1 特点
① 程序当中所有的双引号字符串,都是String类的对象。
② 字符串的内容用用不可更改。
③ 正因为第②点,所以字符串相同的变量在计算机内是共享同一块内存的。
④ 字符串效果相当于是char[]字符数组,但是底层原理是byte[]字节数组。
⑤ 由于字符串是常量,所以只要字符串内容不同,必定是一个新的字符串对象。
5.2 创建
① 三种构造方法
public String();//创建一个空字符串,不包含任何内容。
public String(char[] array);//根据字符数组的内容,来创建对应的字符串
public String(byte[] array);//根据字节数组的内容,来创建对应的字符串
byte[] byteArray = {97,98,99};
String str = new String(byteArray);
System.out.println(str);//输出abc
② 一种直接创建
String str = "Hello";
注意:不管有没有new,只要有双引号,就是一个字符串对象。
5.3 常量池
- 只有用双引号直接创建字符串,该字符串才会被保存在常量池中。
对于使用双引号直接创建字符串,JVM是先将双引号里的内容转换成byte数组,再根据这个byte数组来创建一个String对象,将地址值赋给引用变量;而如果常量池中已有相同的字符串时,会直接引用这个已存在的地址值。
public class Demo02StringPool {
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
char[] charArray = {'a', 'b', 'c'};
String str3 = new String(charArray);
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
System.out.println(str2 == str3); // false
}
}
5.4 比较相关方法
5.4.1 equals()
publicd boolean equals(Object obj);//参数可以是任何类的对象(任何对象都可以用Object进行接收),只有参数是一个字符串,并且内容相同才会返回true,否则返回false
① equals方法具有对称性,也就是 a.equals(b)
和 b.equals(a)
效果一样。
② 如果比较双方为一个常量一个变量,推荐把常量字符串写在前面。
String str = null;
System.out.println("abc".equals(str));//输出false
System.out.println(str.equals("abc"));//此处会报错,因为str是空的无法调用方法
5.4.2 equalsIgnoreCase()
public bloolean equalsIgnoreCase(String str);//忽略大小写进行比较
5.5 获取相关方法
public int length();//获取字符串当中含有的字符个数,拿到字符串长度
public String concat(String str);//将当前字符串和参数字符串拼接,返回值新的字符串(原字符串不会改变)
public char charAt(int index);//获取指定索引位置的单个字符(索引从0开始)
public int indexOf(String str);//查找参数字符串在本字符串中首次出现的索引位置,如果没有,就返回-1
5.7 截取相关方法
public String substring(int index);//截取从参数位置一直到字符末尾,返回新字符串
public String substring(int begin, int end);//截取从begin开始,一直到end结束,中间的字符串(是左闭右开区间[begin,end))
String strA = "Hello";
StrA = "Java";
//这种情况不叫字符串的内容发生了改变,只是赋给了strA一个新的地址值
5.8 转换相关方法
public char[] toCharArray;//将当前字符串拆分成为字符数组作为返回值
public byte[] getBytes();//获得当前字符串底层的字节数组
public String replace(CharSequence oldString,CharSequence newString);//将所有出现的老字符串替换成新的字符串,返回替换之后的结果新字符串(CharSequence是一个接口,意思就是可以接收字符串类型)
5.9 分割相关方法
public String[] split(String regex);//按参数的规则,将字符串切分成若干部分。
//在字符串末尾:如果分割参数后面没有东西,或者是分割参数,那就不会分割成空字符串。
//在字符串中间:如果分割参数后面是分割参数,会分割成空字符串。
public class Demo08 {
public static void main(String[] args) {
String str1 = "aa,bbb,,,ccccc,,";
String[] stringArray = str1.split(",");
System.out.println(stringArray.length);//
for (int i = 0; i < stringArray.length; i++) {
System.out.println(stringArray[i]);
}
//输出结果
/*
5
aa
bbb
ccccc
*/
}
}
注意: split方法的参数其实是一个正则表达式如果按照英文句点 "."
来分割,必须写 "\\."
(两个反斜杠)
六、Arrays
java.util.Arrays 是一个与数组相关的工具类,里面提供了大量静态方法,用来实现数组常见的操作。
public static String toString(数组);//将参数数组变成字符串(按默认格式:[元素1,元素2...])
public static void sort(数组);//按照默认升序(从小到大)对数组的元素进行排序
sort方法:
- 如果是数值数组,则默认按从小到大排列。
- 如果是字符串数组,则默认按字母升序。
- 如果是自定义类型,则这个自定义的类需要有Comparable或者Comparator接口的支持。
七、Math
Java.util.Math类时数学相关的工具类,里面提供了大量的静态方法,完成与数学运算相关的操作。
public static double abs(double num);//获取绝对值
public static double ceil(double num);//向上取整
public static double floor(double num);//向下取整
public static long round(double num);//四舍五入
Math.PI;//代表近似的圆周率常量(double)
题目:计算在-10.8到5.9之间,绝对值大于6或者小于2.1的整数有多少个?
public class Demo07 {
public static void main(String[] args) {
double num = -10;
int count = 0;
while(num <= 5.9){
double ab = Math.abs(num);
if(ab > 6 || ab < 2.1){
count ++;
System.out.println(num);
}
num ++;
}
System.out.println("共有这样的整数:" + count + "个");
}
}