Java学习笔记 第八天
第一章 API
1.1 概述:
API(Application Programming Interface),应用程序编程接口。简单理解,API就是一堆类、一堆方法的集合。JavaAPI是一本程序员的字典,是JDK中提供给我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。
1.2 API文档的使用步骤:**
1.打开帮助文档。
2.点击显示,找到索引,看到输入框。
3.你要找谁?在输入框里输入,然后回车。
4.看包。java.lang下的类不需要导包,其他需要。
5.看类的解释和说明。
6.学习构造方法。
第二章 Scanner类
2.1 概述
Scanner类的功能,可以实现键盘输入数据,到程序当中。简单来说,可以理解为一个可以解析基本类型和字符串的简单文本扫描器。例如,以下代码使用户能够从System.in中读取一个数:
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
其中,System.in指的是通过键盘录入数据,而且无论输入了什么,本质上输入的是字符串,只是后面调用的nextInt方法将其转化为了int类型
2.2 引用类型使用步骤
-
1.导包
import 包路径.类名称;
注意:
如果使用的目标类,和当前类位于同一个包下,则可以省略导包语句不写。
只有java.lang包下的内容不需要导包,其他的包都需要import 包路径.类名称; -
2.创建
类名称 对象名 = new 类名称(); -
3.使用
对象名.成员方法名();
举例如下:
public class Demo01Scanner {
public static void main(String[] args) {
// 2.创建
// 备注:System.in代表从键盘进行输入
Scanner sc = new Scanner(System.in);
// 获取键盘输入的int数字
int num = sc.nextInt();
System.out.println("输入的int数字是:" + num);
// 获取键盘输入的字符串
String str = sc.next();
System.out.println("输入的字符串是:" + str);
}
}
2.3 Scanner类练习1—求和
题目: 键盘录入两个数据并求和,代码如下:
public class Demo02ScannerSum {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个int数字:");
int num1 = sc.nextInt();
System.out.println("请输入第二个int数字:");
int num2 = sc.nextInt();
System.out.println("两个int数字的加和是:" + (num1 + num2));
}
}
2.4 Scanner类练习2—求最大值
题目: 键盘输入三个int数字,然后求出其中的最大值
public class Demo03ScannerMax {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个int数字:");
int num1 = sc.nextInt();
System.out.println("请输入第二个int数字:");
int num2 = sc.nextInt();
System.out.println("请输入第三个int数字:");
int num3 = sc.nextInt();
// 法一:三元表达式
int temp = num1 > num2 ? num1 : num2;
int max = num3 > temp ? num3 : temp;
System.out.println("三个数字当中最大值是:" + max);
// 法二:定义数组 + for循环
// int[] array = new int[]{num1,num2,num3};
// int max = array[0];
// for (int i = 0; i < array.length; i++) {
// if (max < array[i]){
// max = array[i];
// }
// }
// System.out.println("三个数字当中最大值是:" + max);
}
}
第二章 匿名对象(了解)
-
1.概述
创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。虽然是创建对象的简化写法,但是应用场景非常有限。
简单理解,匿名对象就是没有变量名的对象 -
2.格式
new 类名(参数列表);
举例:
new Scanner(System.in);
- 3.应用场景(简单来说就是:如果确定有一个对象只使用唯一的一次,就可以用匿名对象)
1.创建匿名对象直接调用方法,没有变量名。
如:
int num = new Scanner(System.in).nextInt(); // 用匿名对象,直接获得一个输入的int数字
2.一旦调用两次方法,就是创建了两个对象,造成浪费,请看如下代码。
如:
newScanner(System.in);
nextInt();newScanner(System.in).nextInt();
注意:
正是因为没法获取匿名对象的对象地址值,所以每个匿名对象只能用一次
3.匿名对象可以作为方法的参数和返回值
作为参数:
class Test1{
public static void main(String[] args){
// 普通方法
Scanner sc = new Scanner(System.in);
input(sc);
// 使用匿名对象
input(new Scanner(System.in));
}
public static void input(Scanner sc){
System.out.println(sc);
}
}
作为返回值:
class Test2{
public static void main(String[] args){
Scanner sc = getScanner();
}
public static Scanner getScanner(){
// 普通方法
// Scanner sc = new Scanner(System.in);
// return sc;
// 使用匿名对象
return new Scanner(System.in);
}
}
第三章 Random类
3.1 Random类概述
简单来说,Random类就是用于产生伪随机数的。例如,以下代码就可使用户得到一个伪随机int整数,范围是负无穷到正无穷
Random r = new Random();
int num = r.nextInt();
3.2 Random使用步骤
查询API文档三步走:
- 查看包:
位于java.util下,该类需要import java.util.Random导入才可使用 - 查看Random类中的构造方法:
public Random():创建一个随机数生成器 - 查看Random类中的成员方法:
public int nextInt(int n):可以看出,该成员方法有一个int类型返回值,这就是产生的随机数,输入的参数n代表随机数的生成范围为0到n的左闭右开区间,即[0,n)
3.3 Random类练习1
题目:
根据int变量n的值,来获取100个随机数字,范围是[1,n]
public class Demo03Random {
public static void main(String[] args) {
// 普通写法
Scanner sc = new Scanner(System.in);
System.out.println("请输入范围最大值");
int n = sc.nextInt();
Random r = new Random();
for (int i = 0; i < 100; i++) {
System.out.println("生成的随机数字是:" + (r.nextInt(n) + 1));
}
// 用Scanner类输入和匿名对象编写代码,主要用于复习
// System.out.println("请输入范围最大值:");
// int n = new Scanner(System.in).nextInt();
// for (int i = 0; i < 100; i++) {
// int num = new Random().nextInt(n) + 1;
// System.out.println("生成的随机数为:" + num);
// }
}
}
3.3 Random类练习2
题目:
用代码模拟猜数字的小游戏
public class Demo04RandomGame {
public static void main(String[] args) {
// 随机生成数字
int randomNum = new Random().nextInt(100);
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("请随机输入一个数字进行猜测:");
int gussNum = sc.nextInt();
if (gussNum < randomNum){
System.out.println("您猜的数字太小了,请重新猜测");
}else if(gussNum > randomNum){
System.out.println("您猜的数字太大了,请重新猜测");
}else{
System.out.println("恭喜您猜对了,答案是:" + randomNum);
break;
}
}
}
}
第四章 ArrayList类
4.1 引入----对象数组
使用学生数组,存储三个人对象,代码如下:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Demo01Array {
public static void main(String[] args) {
// 首先创建一个长度为3的数组,里面用来存放Person类型的对象
Person[] array = new Person[3];
Person one = new Person("泰隆",18);
Person two = new Person("艾瑞莉娅",21);
Person three = new Person("德莱文",19);
// 将one当中的地址值赋值到数组的0号元素位置
array[0] = one;
array[1] = two;
array[2] = three;
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println("第一个人的名字是:" + array[0].getName() + ",年龄是:" + array[1].getAge());
}
}
上述代码缺点在于,数组在程序运行期间,长度是不可变的,法适应数据变化的需求。为了解决这个问题,Java提供了另一个容器java.util.ArrayList集合类,让我们可以更便捷的存储和操作对象数据。
4.2 ArrayList类简介
java.uitl.ArrayList是大小可变的数组的实现,存储在内的数据称为元素。此类提供了一些方法来操作内部存储的数据。关键在于ArrayList中可不断添加元素,其大小也自动增长
4.3 ArrayList使用步骤
查看类
- java.util.ArrayList:该类需要import导入后使用
<E>代表一种指定的数据类型,叫做泛型。在出现<E>的地方用引用数据类型将其替换即可,表示我们存储哪种引用类型的元素。由此可见,一个ArrayList集合和一个数组Array一样,都只能存储同一类型的数据
注意: 泛型只能是引用类型,不能是基本类型
查看构造方法
- public ArrayList():此为ArrayList类的无参构造方法,功能是构造一个内容为空的集合
基本格式如下
ArrayList<String> list = new ArrayList<>();
注意:
在JDK7后,右侧泛型的尖括号之内可以留空,但是<>仍然要写。
查看成员方法*
- public boolean add(E e):将指定的元素添加到此集合的尾部。
参数E e,在构造ArrayList对象时,E指定了什么数据类型,那么add(E e)方法中,只能添加什么数据类型的对象。在使用add方法时候会返回一个boolean型结果,代表是否添加成功。
例如:
public class Demo02ArrayList {
public static void main(String[] args) {
// 创建了一个ArrayList集合,集合的名称是list,里面装的全都是String字符串类型的数据
// 备注:从jdk1.7开始,右侧的尖括号内部可以不写内容,但是<>本身还是要写的
ArrayList<String> list = new ArrayList<>();
System.out.println(list); // []
// 向集合当中添加一些数据,需要用到add方法。
list.add("泰隆");
System.out.println(list); // [泰隆]
list.add("艾瑞莉娅");
list.add("德莱文");
list.add("德莱厄斯");
System.out.println(list); // [泰隆,艾瑞莉娅,德莱文,德莱厄斯]
}
}
注意:
1.对于ArrayList集合来说,add添加动作一定是成功的,所以返回值可用可不用
但是对于其他集合(今后学习)来说,add添加动作不一定成功。
2.对于ArrayList集合来说,直接打印得到的并不是地址值(直接打印数组得到的是数组对象的地址值),而是内容
如果内容是空,得到的是中括号:[]
4.4 ArrayLits常用方法和遍历
- 常用方法
ArrayList当中常用方法有:
public boolean add(E e): 向集合当中添加元素,参数的类型和泛型一致。
备注:对于ArrayList集合来说,add添加动作一定是成功的,所以返回值可用可不用
但是对于其他集合(今后学习)来说,add添加动作不一定成功。
public E get(int index): 从集合当中获取元素,参数是索引编号,返回值就是对应位置的元素。
public E remove(int index): 从集合当中删除元素,参数是索引编号,返回值就是被删除掉的元素。
public int size(): 获取集合的尺寸长度,返回值是集合当中包含的元素个数
public class Demo03ArrayListMethod {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
System.out.println(list); // []
// 向集合当中添加元素:add
boolean success = list.add("泰隆");
System.out.println(list);
System.out.println("添加的动作是否成功:" + success); // true
list.add("艾瑞莉娅");
list.add("德莱文");
list.add("德莱厄斯");
list.add("卡特琳娜");
System.out.println(list);
// 从集合中获取元素:get方法;索引值从0开始
String name = list.get(2);
System.out.println("第2号索引位置:" + name);
// 从集合当中删除元素:remove方法;索引值从0开始
String whoRemoved = list.remove(3);
System.out.println("被删除的人是:" + whoRemoved);
System.out.println(list);
// 获取集合的长度尺寸
int size = list.size();
System.out.println("集合的长度是:" + size);
}
}
- 遍历
import java.util.ArrayList;
public class Demo04ArrayListEach {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("泰隆");
list.add("艾瑞莉娅");
list.add("德莱文");
list.add("德莱厄斯");
list.add("卡特琳娜");
// 遍历集合
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
4.5 ArrayList如何存储基本数据类型
前面已经指出<E>代表泛型,而泛型只能是引用数据类型,所以无法入ArrayList list = new ArrayList<>();一样创建一个int类型数据的集合。
解决办法: 使用基本类型对应的“包装类”。
基本类型 | 基本类型包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
注意:
从JDK 1.5+开始,支持自动装箱、自动拆箱
自动装箱:基本类型 —> 包装类
自动拆箱:包装类 —> 基本类型
public class Demo05ArrayListBasic {
public static void main(String[] args) {
ArrayList<String> listA= new ArrayList<>();
// 错误写法!泛型只能是引用类型,不能是基本类型
// ArrayList<int> listB = new ArrayList<>();
ArrayList<Integer> listC = new ArrayList<>();
listC.add(100);
listC.add(200);
System.out.println(listC); // [100,200]
int num = listC.get(1);
System.out.println("第一号元素是:" + num);
}
}
4.6 ArrayList练习1—打印集合方法
题目:
定义以指定格式打印集合的方法(ArrayList类型作为参数),使用{}扩起集合,使用@分隔每个元素。格式参照{元素@元素@元素}。
public static void main(String[] args){
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0;i< 4 ; i++){
list.add(i);
}
printArrayList(list);
}
public static void printArrayLlist(ArrayList<Integer> list){
System.out.println("[");
for(int i == 0;i < list.size();i++){
if(i != list.size() - 1){
System.out.println(list.get(i) + "@");
}else{
System.out.println(list.get(i) + "]");
}
}
}
4.6 ArrayList练习2—获取集合方法
题目:
用一个大集合存入20个随机数字,然后筛选其中的偶数元素,放到小集合当中。
要求使用自定义的方法来实现筛选。
public class Demo04ArrayListReturn {
public static void main(String[] args) {
// 创建随机对象
Random ra = new Random();
// 创建大集合
ArrayList<Integer> listBig = new ArrayList<>();
for (int i = 0; i < 20; i++) {
listBig.add(ra.nextInt(100) + 1); // 1~100的随机数
}
System.out.println("大集合为:" + listBig);
ArrayList<Integer> listSmall = getSmallList(listBig);
System.out.println("小集合为:" + listSmall + " 总计:" + listSmall.size() + "个");
}
public static ArrayList<Integer> getSmallList(ArrayList<Integer> listBig){
// 创建小集合
ArrayList<Integer> listSmall = new ArrayList<>();
for (int i = 0; i < listBig.size(); i++) {
if (listBig.get(i) % 2 == 0){
listSmall.add(listBig.get(i));
}
}
// 返回小集合
return listSmall;
}
}