Java学习笔记-3
Java 学习笔记 三
API
概述
- 什么是API
- API (Application Programming Interface) :应用程序编程接口
- Java中的API
- 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。
使用帮助文档
索引
查询所在包
看类的描述
看构造方法
看成员方法
例子:Scanner
1 | import java.util.Scanner |
成员方法 | 功能 |
---|---|
nextInt() | 读入一个整数(int) |
nextDouble() | 读入一个实数(double) |
next() | 读入一个单词(String) |
nextLine() | 读入一行(String) |
字符串
String
概述
String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例。也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象。
特点
- 字符串不可变,它们的值在创建后不能被更改
- 内容不可变,指的是每次有新的内容时会有新的地址,与StringBuilder不同
- 虽然 String 的值是不可变的,但是它们可以被共享
- 字符串效果上相当于字符数组( char[] ),但是底层原理是字节数组( byte[] )
- JDK8以前是字符数组,JDK9及以后是字节数组
构造方法
方法名 | 说明 |
---|---|
public String() | 创建一个空白字符串对象,不含有任何内容 |
public String(char[] chs) | 根据字符数组的内容,来创建字符串对象 |
public String(byte[] bys) | 根据字节数组的内容,来创建字符串对象 |
String s = “abc”; | 直接赋值的方式创建字符串对象,内容就是abc |
1 | public class StringDemo01 { |
String对象
特点
- 通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同
- 以
“”
方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一 个 String 对象,并在字符串池中维护
字符串的比较
- ==号比较
- 比较基本数据类型:比较的是具体的值
- 比较引用数据类型:比较的是对象地址值
遍历字符串
1 | public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的 |
1 | //通用格式 |
字符串拼接
1 | /* |
帮助文档
方法名 | 说明 |
---|---|
public boolean equals(Object anObject) | 比较字符串的内容,严格区分大小写(用户名和密码) |
public char charAt(int index) | 返回指定索引处的 char 值 |
public int length() | 返回此字符串的长度 |
public String substring(int beginIndex, int endIndex) | 返回一个字符串(两个索引值之间的部分),该字符串是此字符串的子字符串。 |
StringBuilder
概述
如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费内存空间,而这种操作还不可避免。那么有没有一种比较好的方式可以解决这个问题呢?答案是肯定的,我们可以通过Java提供的StringBuilder类就来解决这个问题。
StringBuilder类和String类的区别
- String类:内容是不可变的
- StringBuilder类:内容是可变的
构造方法
方法名 | 说明 |
---|---|
public StringBuilder() | 创建一个空白可变字符串对象,不含有任何内容 |
public StringBuilder(String str) | 根据字符串的内容,来创建可变字符串对象 |
添加和反转方法
方法名 | 说明 |
---|---|
public StringBuilder append(任意类型) | 添加数据,并返回对象本身 |
public StringBuilder reverse() | 返回相反的字符序列 |
1 | //链式编程 |
StringBuilder和String相互转换
StringBuilder转换为String
- public String toString():通过 toString() 就可以实现把 StringBuilder 转换为 String
1
2
3
4StringBuilder sb = new StringBuilder();
//String s = sb; //这个是错误的做法
//public String toString():通过 toString() 就可以实现把 StringBuilder 转换为String
String s = sb.toString();String转换为StringBuilder
- public StringBuilder(String s):通过构造方法就可以实现把 String 转换为 StringBuilder
1
2
3
4String s = "hello";
//StringBuilder sb = s; //这个是错误的做法
//public StringBuilder(String s):通过构造方法就可以实现把 String 转换为StringBuilder
StringBuilder sb = new StringBuilder(s);
字符串拼接
1 | /* |
字符串反转
1 | /* |
1 | 匿名对象:new StringBuilder(s).reverse().toString(); |
帮助文档
方法名 | 说明 |
---|---|
public StringBuilder append (任意类型) | 添加数据,并返回对象本身 |
public StringBuilder reverse() | 返回相反的字符序列 |
public int length() | 返回长度,实际存储值 |
public String toString() | 通过toString()就可以实现把StringBuilder转换为String |
集合基础
概述
编程的时候如果要存储多个数据,使用长度固定的数组存储格式,不一定满足我们的需求,更适应不了变化的需求,那么,此时该如何选择呢?
ArrayList类
ArrayList<E>:
- 可调整大小的数组实现
- <E>:是一种特殊的数据类型,泛型
构造方法
方法名 | 说明 |
---|---|
public ArrayList() | 创建一个空的集合对象 |
成员方法
方法名 | 说明 |
---|---|
public boolean remove(Object o) | 删除指定的元素,返回删除是否成功 |
public E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
public E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
public E get(int index) | 返回指定索引处的元素 |
public int size() | 返回集合中的元素的个数 |
public boolean add(E e) | 将指定的元素追加到此集合的末尾 |
public void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
案例
1 | //public ArrayList(),创建一个空的集合对象 |
1 | public class ArrayListDemo02 { |
遍历
1 | //遍历集合的通用格式 |
存储学生对象并遍历
1
1 | /* |
2
1 | /* |
学生管理系统
实现步骤:
- 定义学生类,包含以下成员变量
- private String sid // 学生id
- private String name // 学生姓名
- private String age // 学生年龄
- private String address // 学生所在地
- 学生管理系统主界面的搭建步骤
- 用输出语句完成主界面的编写
- 用Scanner实现键盘输入
- 用switch语句完成选择的功能
- 用循环完成功能结束后再次回到主界面
- 学生管理系统的添加学生功能实现步骤
- 定义一个方法,接收ArrayList集合
- 方法内完成添加学生的功能
- 键盘录入学生信息
- 根据录入的信息创建学生对象
- 将学生对象添加到集合中
- 提示添加成功信息
- 在添加学生的选项里调用添加学生的方法
- 学生管理系统的查看学生功能实现步骤
- 定义一个方法,接收ArrayList集合
- 方法内遍历集合,将学生信息进行输出
- 在查看所有学生选项里调用查看学生方法
- 学生管理系统的删除学生功能实现步骤
- 定义一个方法,接收ArrayList集合
- 方法中接收要删除学生的学号
- 遍历集合,获取每个学生对象
- 使用学生对象的学号和录入的要删除的学号进行比较,如果相同,则将当前学生对象从集合中删除
- 在删除学生选项里调用删除学生的方法
- 学生管理系统的修改学生功能实现步骤
- 定义一个方法,接收ArrayList集合
- 方法中接收要修改学生的学号
- 通过键盘录入学生对象所需的信息,并创建对象
- 遍历集合,获取每一个学生对象。并和录入的修改学生学号进行比较.如果相 同,则使用新学生对象替换当前学生对象
- 在修改学生选项里调用修改学生的方法
- 退出系统
- 使用System.exit(0);退出JVM
继承
概述
概念
继承是面向对象三大特征之一(封装,继承,多态),可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法。
格式
1 | public class 子类名 extends 父类名{} |
特点
继承可以让类与类之间产生关系,子父类关系,产生子父类后,子类则可以使用父类中非私有的成员。
好处与弊端
- 好处
- 提高了代码的复用性(多个类相同的成员可以放到同一个类中)
- 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
- 弊端
- 继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性
应用场景
访问特点
成员
在子类方法中访问一个变量,采用的是就近原则。
- 子类局部范围找
- 子类成员范围找
- 父类成员范围找
- 如果都没有就报错(不考虑父亲的父亲…)
构造方法
注意:子类中所有的构造方法默认都会访问父类中无参的构造方法
子类会继承父类中的数据,可能还会使用父类的数据。
所以,子类初始化之前,一定要先完成父类数据的初始化, 原因在于,每一个子类构造方法的第一条语句默认都是:super();
成员方法
通过子类对象访问一个方法
- 子类成员范围找
- 父类成员范围找
- 如果都没有就报错(不考虑父亲的父亲…)
super
概述
this & super关键字:
- this:代表本类对象的引用
- super:代表父类存储空间的标识(可以理解为父类对象引用)
this 和 super 的使用区别
- 成员变量:
- this.成员变量 - 访问本类成员变量
- super.成员变量 - 访问父类成员变量
- 成员方法:
- this.成员方法 - 访问本类成员方法
- super.成员方法 - 访问父类成员方法
- 构造方法:
- this(…) - 访问本类构造方法
- super(…) - 访问父类构造方法
- 成员变量:
内存图
方法重写
概念
子类出现了和父类中一模一样的方法声明(方法名一样,参数列表也必须一样)。
应用场景
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,既沿袭了父类的功能,又定义了子类特有的内容。
Override注解
注意事项
1 | public class Fu { |
注意事项
Java中类只支持单继承,不支持多继承
Java中类只支持单继承,不支持多继承
- 错误范例:class A extends B, C { }
Java中类支持多层继承
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24public class Granddad {
public void drink() {
System.out.println("爷爷爱喝酒");
}
}
public class Father extends Granddad {
public void smoke() {
System.out.println("爸爸爱抽烟");
}
}
public class Mother {
public void dance() {
System.out.println("妈妈爱跳舞");
}
}
public class Son extends Father {
// 此时,Son类中就同时拥有drink方法以及smoke方法
}
修饰符
package
概念
包就是文件夹,用来管理类文件的
定义格式
1 | package 包名; (多级包用.分开) |
运行
手动建包
1 | javac 类名.java //生成class文件 |
自动建包
1 | 带包编译:javac –d . 类名.java |
导包
意义
格式
1 | 导包的格式 |
权限修饰符
修饰符 | 同一个类中 | 同一个包中子类无关类 | 不同包的子类 | 不同包的无关类 |
---|---|---|---|---|
private | √ | |||
默认 | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
状态修饰符
final
fianl关键字的作用
- final代表最终的意思,可以修饰成员方法,成员变量,类
final修饰类、方法、变量的效果
- fianl修饰类:该类不能被继承(不能有子类,但是可以有父类)
- final修饰方法:该方法不能被重写
- final修饰变量:表明该变量是一个常量,不能再次赋值
修饰局部变量
fianl修饰基本数据类型变量
- final 修饰指的是基本类型的数据值不能发生改变
final修饰引用数据类型变量
final 修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的
举例:
1
2
3
4
5public static void main(String[] args){
final Student s = new Student(23);
s = new Student(24); // 错误
s.setAge(24); // 正确
}
static
- static的概念
- static关键字是静态的意思,可以修饰【成员方法】,【成员变量】
- static修饰的特点
- 被类的所有对象共享,这也是我们判断是否使用静态关键字的条件
- 可以通过类名调用,当然也可以通过对象名调用【推荐使用类名调用】
访问特点
- 非静态的成员方法
- 能访问静态的成员变量
- 能访问非静态的成员变量
- 能访问静态的成员方法
- 能访问非静态的成员方法
- 静态的成员方法
- 能访问静态的成员变量
- 能访问静态的成员方法
- 总结成一句话就是:
- 静态成员方法只能访问静态成员