Scanner类
功能
可以实现键盘输入数据到程序中。
引用类型的一般使用步骤:
1、导包:
import 包路径.类名称
如果需要使用的目标类和当前类位于同一个包,则可以省略导包语句。只有java.lang包下的内容不需要导包,其他的包都需要import语句
2、创建:
类名称 对象名 = new 类名称(参数列表);
3、使用:
对象名.成员方法名()
使用
导包:
import java.util.Scanner
构造方法:
Scanner sc = new Scanner(System.in);//没有无参构造,参数System.in表示从键盘读取输入
成员方法:
sc.nextInt();//读入键盘输入的整数值
sc.next();//读入键盘输入的字符串
代码演示
1.求和
键盘录入两个数据并求和
1 | package cn.shenzc.java; |
2.求三个数中最大值
键盘录入三个数据并获取最大值
1 | package cn.shenzc.java; |
匿名对象
概念
创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。虽然是创建对象的简化写法,但是应用
场景非常有限。
格式
1 | new 类名(参数列表); |
比如:new Scanner(System.in);
应用场景
创建匿名对象直接调用方法,没有变量名。
1
new Scanner(System.in).nextInt();
一旦调用两次方法,就是创建了两个对象,造成浪费,请看如下代码。
1
2new Scanner(System.in).nextInt();
new Scanner(System.in).nextInt();一个匿名对象,只能使用一次。
匿名对象可以作为方法的参数和返回值。
作为参数
1
2
3
4
5
6
7
8
9
10
11
12class Test {
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);
}
}作为返回值
1
2
3
4
5
6
7
8
9
10
11
12
13class 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类
功能
此类的实例用于生成伪随机数。
使用
导包:
import java.util.Random
构造方法:
public Random()
:public Random(long seed)
:同一种子生成随机数是一样的
成员方法:
public int nextInt()
:返回伪随机整数。public int nextInt(int n)
:返回一个伪随机数,范围在0(包括)和指定值n(不包括)之间的
int 值。
代码演示
1.生成三个十以内的整数
1 | package cn.shenzc.java; |
2.猜数字小游戏
游戏开始时,会随机生成一个1-100之间的整数
number
。玩家猜测一个数字guessNumber
,会与number
作比
较,系统提示大了或者小了,直到玩家猜中,游戏结束。
1 | package cn.shenzc.java; |
ArrayList集合类
引入—对象数组
使用学生数组,存储三个学生对象,代码如下:
1 | // Student |
1 | package cn.shenzc.java; |
到目前为止,我们想存储对象数据,选择的容器,只有对象数组。而数组的长度是固定的,无法适应数据变化的需
求。为了解决这个问题,Java提供了另一个容器java.util.ArrayList
集合类,让我们可以更便捷的存储和操作对
象数据。
什么是ArrayList
java.util.ArrayList
是大小可变的数组的实现,存储在内的数据称为元素。此类提供一些方法来操作内部存储的元素。 ArrayList 中可不断添加元素,其大小也自动增长。
数组的长度不可以发生改变,但是ArrayList集合的长度是可以随意变化的。
上图的 <E>
表示泛型。
泛型只能是引用类型,不能是基础类型。
泛型就是定义一种模板,例如ArrayList<T>
,然后在代码中为用到的类创建对应的ArrayList<类型>
1 | public class ArrayList<T> { |
1 | // 创建可以存储String的ArrayList: |
对于ArrayList来说,直接打印得到的不是地址值,而是其中的内容;如果ArrayList为空,则得到的是:[]
使用
- 导包:
java.util.ArrayList
- 构造方法:
public ArrayList()
ArrayList<E> list = new ArrayList<E>();
- 在JDK 7后,右侧泛型的尖括号之内可以留空,但是<>仍然要写。简化格式:
ArrayList<E> list = new ArrayList<>();
- 成员方法:见下
常用方法
方法定义
public boolean add(E e):
向集合中添加元素。参数类型和泛型一致。
对于ArrayList的add方法来说,添加元素一定是成功的,返回值可用可不用,但是对于其他集合来说,添加元素不一定成功
public E get(int index):
从集合中获取元素,参数是索引编号。
public E remove(int index):
从集合中删除元素。
public int size():
获取集合的尺寸长度,返回值时集合中元素个数。
代码演示
1 | package cn.shenzc.java; |
如何存储基本数据类型
ArrayList对象不能存储基本类型,只能存储引用类型的数据。类似
包装类型是可以的。所以,想要存储基本类型数据, <> 中的数据类型,必须转换后才能编写,转换写法如下:
基本类型 | 基本包装类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
char | Character |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
代码演示
1.数值添加到集合
生成6个1~33之间的随机整数,添加到集合,并遍历
1 | package cn.shenzc.java; |
2.对象添加到集合
自定义4个学生对象,添加到集合,并遍历
1 | package cn.shenzc.java; |
String类
String类概述
概述
java.lang.String
类代表字符串。Java程序中所有的字符串文字(例如”abc” )都可以被看作是实现此类的实
例。
类String
中包括用于检查各个字符串的方法,比如用于比较字符串,搜索字符串,提取子字符串…
字符串的特点
字符串的内容永不可变
String s1 = "abc"; s1 += "d"; System.out.println(s1); // "abcd" // 内存中有"abc","abcd"两个对象,s1从指向"abc",改变指向,指向了"abcd"。
1
2
3
4
5
6
7
2. 因为字符串不可变,所以字符串可以共享使用
- ```java
String s1 = "abc";
String s2 = "abc";
// 内存中只有一个"abc"对象被创建,同时被s1和s2共享。
字符串效果上相当于char数组,但是底层实现是byte数组
"abc"
等效于char[] data={ 'a' , 'b' , 'c' }
。String str = "abc"; 等价于 char[] data = {'a','b','c'}; String str = new String(data);
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
## 使用
- 导包:String类位于`java.lang`包下,无需导包即可使用。
- 构造方法:
- `public String()`:初始化创建新的String对象,以使其表示空字符串。
- `public String(char[] values)`:通过当前参数的字符数组来创建新的字符串。
- `public String(byte[] values)`:通过当前参数的byte数组来创建新的字符串。
- 成员方法:见下
## 常用方法
### 判断功能的方法
1. `public boolean equals(Object anObject):`将此字符串与指定对象进行比较。当且仅当指定对象不为空且为字符序列与比较字符串一致的String对象时,返回true;其他情况返回false。
2. `public boolean equalsIgnoreCase(String str):`将此字符串于指定字符串进行比较。
### 代码演示
```java
package cn.shenzc.java;
public class TestString1 {
public static void main(String[] args) {
// 三种构造方法
String str1 = new String(); // 创建空字符串
System.out.println("str1 = " + str1);
char[] data = {'d', 'a', 't', 'a'};
String str2 = new String(data);
System.out.println("str2 = " + str2);
byte[] number = {97, 98}; // 数字转换成对应的ASCII值
String str3 = new String(number);
System.out.println("str3 = " + str3);
// 直接生成字符串
String str4 = "Hello Java!";
// 判断功能的方法
System.out.println(str4.equals("Hello Java"));
System.out.println("Hello java!".equals(str4));// 推荐写法,因为对象可能为null,会抛出NPE
System.out.println("hello java!".equalsIgnoreCase(str4));
}
}
获取功能的方法
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(不包括)之间的子字符串。
代码演示
1 | package cn.shenzc.java; |
转换功能的方法
public char[] toCharArray()
:将此字符串转换为新的字符数组。public byte[] getBytes()
:使用平台的默认字符集将该 String编码转换为新的字节数组。public String replace(CharSequence target, CharSequence replacement)
:将与target字符串匹配的子字符串用replacement替换。
代码演示
1 | package cn.shenzc.java; |
分割功能的方法
public String[] split(String regex)
:将字符串按照指定的regex(规则)拆分为字符串数组。
代码演示
1 | package cn.shenzc.java; |
字符串常量池
由于字符串是不可变的,所以字符串是可以共享的,由此引出字符串常量池。只要是直接用双引号生成的字符串都位于字符串常量池中,是可以共享的。
1 | public class TestStringPool { |
对于基本类型来说,==是进行值比较;对于引用类型来说是地址比较。
代码演示
1.拼接字符串
定义一个方法,把数组{1,2,3}按照指定格式拼接成一个字符串。格式参照如下:
[word1#word2#word3]
。
1 | package cn.shenzc.java; |
2.统计字符个数
键盘录入一个字符串,统计字符串中大小写字母及数字字符个数。
1 | package cn.shenzc.java; |
static关键字
概述
static 关键字,可以用来修饰成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属
于某个对象的。也就是说,既然属于类,就可以不靠创建对象来调用了。
static修饰成员变量
当 static 修饰成员变量时,该变量称为类变量。该类的每个对象都共享同一个类变量的值。任何对象都可以更改
该类变量的值,也可以在不创建该类的对象的情况下对类变量进行操作。
定义格式:
1 | static 数据类型 变量名; |
static修饰成员方法
用static修饰的成员方法,叫作类方法,更习惯叫作静态方法。静态方法在声明中有static ,建议使用类名来调用,而不需要创建类的对象。调用方式非常简单。
定义格式:
1 | 修饰符 static 返回值 方法名(参数列表) { |
注意事项
- 静态不能直接访问非静态内容,但可以访问静态内容(静态变量和方法)。因为在内存中先有静态内容,后有非静态内容。但是非静态的成员方法可以访问静态变量和方法。
- 对于本类当中的静态方法,可以省略类名称。
- 静态方法中不能使用this关键字。因为this代表当前对象。
- 推荐使用 类名.静态成员 的方法调用静态成员。
static修饰代码块
定义在成员位置,用static修饰的代码块叫作静态代码块。随着类的加载而执行且只执行一次,优先于main方法和构造方法的执行。其作用是给静态变量赋值。
1 | static { |
数组工具类Arrays
概述
java.util.Arrays
是一个与数组相关的工具类,提供了大量的静态方法,用来实现数组常见的操作,如搜索、排序。
常用方法
public static String toString(int[] arr):
将参数数组变成字符串。格式:[元素1,元素2,…]
1 | package cn.shenzc.java; |
public static void sort(int[] arr):
按照默认升序对数组元素进行排序。
1 | package cn.shenzc.java; |
代码演示
使用Arrays 相关的API,将一个随机字符串中的所有字符升序排列,并倒序打印。
1 | package cn.shenzc.java; |
数学工具类Math
概述
java.lang.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):
四舍五入。