-
API概述
-
Scanner类
-
Random类
-
ArrayList类
-
static关键字
-
String类
-
Arrays类
-
Math类
API概述
概述:API application programming interface 应用程序编程接口。Java API对于程序员来说就是一本可以检索查找的【字典】,是JDK官方提供给程序开发者使用类的说明文档。这些类将底层的代码封装起来,我们不需要关注这些类底层是如何实现的,我们只需要知道这些类是如何使用的。平常开发使用JDK类库的时候,通过查阅API的方式进行的。
API的使用步骤
- 打开帮助文档
- 点击显示,找到索引,找到输入框
- 在输入框中输入要查找的类,回车
- 看该类的所在包,对于java.lang包下面的类不需要导入包,其他都需要导入
- 看该类的解释说明和类结构
- 学习该类的构造方法和成员方法
Scanner类
什么是Scanner类:一个可以使用正则表达式解析基本数据类型和字符串类型的简单文本扫描器
例如:让系统扫描输入的int类型值
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
备注:System.in 代表系统输入,此时指的是通过键盘录入数据
引用类型使用的步骤
导包:使用import关键字导包,在类的所有代码之前导包,引入要使用的类型,java.lang包下的所有类不需导入
导入格式:
import 包名.类名
//如 :import java.util.Scanner;
创建对象
数据类型 变量名 = new 数据类型(参数列表);
调用方法
变量名.方法名();
Scanner类的使用步骤
- 查看类
java.util.Scanner 需要导入包
- 查看构造方法
public Scanner(InputStream source):构造一个新的Scanner对象,他生成的值是从指定的输入流中扫描的。
- 查看成员方法
public int nextInt();将输入的信息的下一个标记扫描为一个int类型值
import java.util.Scanner;
public class ScannerDemo{
public static void main(String args[]){
//创建对象
Scanner sc = new Scanner(System.in);
//接收系统录入的数据
int num01 = sc.nextInt();
int num02 = sc.nextInt();
int sum = num01 + num02;
System.out.println(sum);
}
}
匿名对象
概念: 没有变量名的对象
格式:
数据类型 变量名 = new 数据类型(参数列表);// 正常对象
new 数据类型(参数列表);// 匿名对象
举例:
public class AnonymousDemo{
public static void main(String args[]){
//传统写法
Scanner sc = new Scanner(System.in);
int num01 = sc.nextInt();
//匿名对象的方式
int num02 =new Scanner(System.in).nextInt();
//开发中 使用匿名对象进行参数传递
cheakInput(new Scanner(System.in));
//获取一个Scanner类对象
Scanner scanner = getScanner();
}
public static void cheakInput(Scanner sc){
int num = sc.nextInt();
System.out.println(num);
}
public static Scanner getScanner(){
return new Scanner(System.in)
}
}
使用情况:当这个对象只使用一次的时候,下次再使用需要再次创建
使用建议:如果在程序中你确定有一个对象只会使用唯一的一次,建议使用匿名对象
Random类
什么是Random类:此类的实例用于生成伪随机数
例如:使用户能够得到一个随机整数
Random ran = new Random();
int i = ran.nextInt();// int的取值范围
使用步骤:
- 查看类 java.util.Random;该类需要导入后使用
- 查看构造方法:public Random();创建一个新的伪随机数生成器
- 查看常用的成员方法:public int nextInt(int bound);返回一个伪
- 。数,范围 [ 0-bound-1 ] public double nextDouble();返回一个伪随机小数,范围在 [ 0.0-1.0 )
练习:随机生成十个10以内的随机整数
Random random = new Random();
for (int i=0;i<10;i++){
int ran = random.nextInt(10);
System.out.print(ran+" ");
}
练习:获取1-n之间的随机数,包含n
//构造一个n的范围
int n = 50
Random random = new Random();
int num = random.nextInt(n)+1;
ArrayList类
引入对象数组
// 把三个People类型的对象存入到容器中
public static void main(String[] args){
//创建对象数组
People [] arr = new People[3];
//创建3个people对象
People p1 = new People("xxQAQ",23);
People p2 = new People("ccQAQ",20);
People p3 = new People("ffQAQ",29);
//使用循环
/*for(int i =0;i<3;i++){
arr[i] = new People();
}*/
arr[0] = p1;
arr[1] = p2;
arr[2] = p3;
//遍历数组 展示对象中的成员变量信息 name age
for(int i = 0; i<=arr.length-1 ;i++){
System.out.println(arr[i].getName()+","+arr[i].getAge())
}
}
备注:对象数组,长度是固定的,如果在程序中需要对象进行增加或者删除等数量操作,非常不方便
Java提供了一个容器java.util.ArrayList集合类,这个类可以让我们的存储和操作对象更加方便
什么是ArrayList类
java.util.ArrayList类是一个【大小可变的数组】的实现,里面存储的数据称为元素,该类提供了一些常用的api方法来操作内部存储的元素。
ArrayList类的使用步骤
-
查看类 :java.util.ArrayList
: 该类需要导入后方可使用 表示一种指定的数据类型 ,叫做泛型 , E ,取自Element(元素)的首字母,在程序中遇到【E】的地方,我们需要使用一种引用的数据类型将其替换掉即可。表示我们将存储哪种数据类型的元素 例如:
ArrayList<People> lists;
ArrayList<String> strs;
ArrayList<int> nums;//错误写法
-
查看构造方法
public ArrayList():构造一个初始容量为10的空列表
public ArrayList(int initialcapacity):构造一个指定初始容器的空列表
基本格式:
ArrayList<引用数据类型> 变量名 = new ArrayList < 引用数据类型//JDK1.7后可以省略不写 > ();
-
查看成员方法
public boolean add(E e); add(3);自动封装为Integer类型
public void add(int index,E e);将指定的元素插入此列表中的指定位置
public void clear( );移除此列表中的所有元素
public boolean contains( Object o); 如果此列表中包含指定的元素,则返回
true
public E get(int index); 返回此列表中指定位置上的元素
public int indexOf(Object o);返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1
public boolean isEmpty();如果此列表中没有元素,则返回
true
public E remove(int index); 移除此列表中指定位置上的元素,并把移除的元素返回
public E set(int index,E e);用指定的元素替代此列表中指定位置上的元素
public int size( );返回此列表中的元素数
遍历
使用for循环,定义的循环变量就是ArrayList中的索引。循环的次数是容器的size()
//需求:往ArrayList容器当中存入5个学生的对象,查找小丽的这位同学,如果查到就把小丽的信息输出后,把小丽删除
// 学生对象包含姓名、年龄、学号。
如何存储基本类型数据
ArrayList类对象不能存储基本数据类型,只能存储引用类型的数据,类似
基本数据类型 | 对应的包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
备注:我们需要对 int 和 char 的包装类特殊记忆,其他类型,只需要记住首字母大写即可
String类 【重点】
概述
java.lang.String 类代表字符串,Java程序中所有的字符串文字,如"abc"都可以看做是String类的实例。
程序中,所有的双引号字符串,都是String类的对象。(没有new也是对象)
字符串的特点:
- 字符串的内容永远不可改变【重点】
- 正是因为字符串的内容永远不可改变。所以字符串是可以共享使用的
- 字符串效果上相当于是char [ ]字符数组,但是底层原理是byte[ ]字节数组
//第二点
String str1 = "abc";//"abc"对象被创建出来,而且该对象只会创建一次,此时str1与str2可以共享同一个"abc"对象
String str2 = "abc";//存放在字符串常量池中
String str3 = new String("abc");//存放在堆内存中
String str4 = new String("abc");//创建新的对象
备注:在JDK1.7之后的JVM将【运行时常量池】从方法区中移除了,在Java的堆内存中开辟空间,用来存储运行时常量池 在JDK1.8开始后,取消了Java方法区(method area),取而代之的时元空间(metaspace) JDK1.8中字符串常量池和运行时常量池逻辑上属于方法区,实际上存储在堆内存当中
static关键字
public class Student{
private String name;
private int age;
private String id;
static String room;
}
- 静态变量存储在方法区中静态域中
- 静态方法存储在栈中
String类
创建String字符串的常见方式 3+1
三种构造方法:
- public String( ):创建一个空白的字符串,不包含任何内容;
- public String (char [ ] array):根据字符数组的内容,来创建对应的字符串
- public String(byte [ ] array):根据字节数组内容,来创建对应的字符串
一中直接创建:
- String str = " abc ";//右边直接用双引号
备注:直接写上双引号,系统也会认定为字符串对象
常用方法
判断功能方法:
-
public boolean equals(Object anObject):将此字符串与指定对象比较
不但进行地址判断还进行内容判断,只要符合其中一个条件,就返回true * 建议:如果比较双方:一个常量和一个变量、推荐把常量字符串的前边,把变量放在后边 * 如"Hello".equals(str1);不建议写成:str1.equals("Hello") *防止空指针异常
-
public boolean equalsIgnoreCase(String anotherString):将此
String
与另一个String
比较,不考虑大小写
获取功能
- public int length():返回字符串长度
- public String concat(String str):将指定的字符串连接到该字符串的末尾
- public char charAt(int index):返回指定索引处的char值
- public int indexOf(String str):返回指定的子字符串第一次出现在该字符串内的索引值,在此对象表示的字符序列中第一次出现该字符的索引;如果未出现该字符,则返回 -1
- public String subString(int beginIndex):返回一个子字符串,从beginIndex开始截取该字符串到该字符串的末尾
- public String subString(int beginIndex , int endIndex):返回一个子字符串,从beginIndex到endIndex区间截取该字符串,包含beginIndex处的索引值,不包含endIndex处的索引值 [beginIndex endIndex)
转换功能:
- public char[ ] toCharArray():将此字符串转换成新的字符数组
- public byte [ ] getByte():使用平台默认的字符集将此字符串编码转换成新newString的字节数组
- public String replace(CharSequence oldString,CharSequence newString):将与老字符串匹配的字符串使用新字符串字符串替换掉,返回替换之后新的字符串 CharSequence 意思是可以接收字符串类型
-
* public static String format(String format,Object ...args) * %[argument number][flag][width][.precision]type * argument number :若参数大于1,指定哪一个 * flag:符号 (. + - ;) * 最小字符数 * .precision:精确度 * type:设定为什么类型 如 f 浮点数 * String str = String.format("%.2f", ranMoney);
备注:CharSequence 是一个接口,也是一种引用数据类型,表示可以接收字符串类型
static关键字
概述:
static可以修饰成员变量和成员方法,被修饰的成员是【属于类】的。不单单属于某个对象,也就是不需要通过创建对象来调用。
定义和使用格式:
- 类变量:
当成员变量被static修饰,该变量就成为了【类变量】。该类的每个对象都【共享】同一个类变量的值。任何对象都可以更改类变量的值。类变量可以不通过创建类对象的方式操作,可以通过类进行操作
定义格式:
static 数据类型 变量名;
- 静态方法:
当成员方法被static关键字修饰时,该方法成为类方法,类方法一般是通过类名直接调用,而不需要单独创建对象来调用。习惯性称之为 【静态方法】
定义格式:
修饰符 static 返回值类型 方法名(参数列表){
//方法体内容
}
静态方法调用的注意事项:
- 静态方法可以直接访问类变量和静态方法
- 静态方法不能直接访问成员变量和成员方法,反之,成员方法可以直接访问类变量和静态方法
- 静态方法中不能使用this关键字
调用格式
静态方法建议通过类来调用,也可以通过对象来调用,但会出现警告信息(不建议使用)
格式:
//访问类变量
类名.类变量名;
//访问静态方法
类名.静态方法(参数);
备注:这些不能直接访问的成员信息,可以间接的通过实例化对象来调用。
static修饰的内容:
- 随着类的加载而加载,只会加载一次。
- 存储域一块固定的内存区域(静态域/区),所以可以被类直接调用
- 优先于对象加载,所以可以被类的所有对象所共享。
静态代码块
被static修饰的代码块{ },定义在成员位置
- 位置:类中、方法外
- 执行:随着类的加载而加载,而且只会执行一次,优先于main()方法和构造方法执行
格式:
public class ClassName{
static {
//多条执行语句
}
public static void main(String []args){
/*
static {
//多条执行语句
} //错误写法
*/
}
}
例如:
//斗地主 需要三个成员
public class Game{
private ArrayList<Member> members;//玩家们 Member类 成员类
private int number;//玩家数量
}
public class TestGame{
public static void main(String []args){
ArrayList<String> list =new ArrayList<>();
list.add("xx");
list.add("yy");
list.add("zz");
}
}//常规写法
public class Game{
static ArrayList<Member> members;//玩家们 Member类 成员类
static int number;//玩家数量
static{
number = 3;
members = new ArrayList<>();
members.add("xx");
members.add("yy");
members.add("zz");
}
}
public class TestGame{
public static void main(String []args){
}
}//使用static写法
备注:static可以修饰成员变量、成员方法、代码块。在使用过程中,如果你想在不创建对象的情况下,去调用成员变量、成员方法,可以定义为静态的。对于静态代码块来说,通常作用是对类中的成员变量进行初始化