九. 流程控制语句
if语句
if语句的格式1 : if(判断条件){ 语句体; } 执行流程: 1. 执行判断条件, 看其返回结果是true, 还是false 2. true : 执行 {} 中语句体 3. false : 不执行 {} 中语句体 if语句格式2: if(判断条件) { 语句体1; } else { 语句体2; } 执行流程: 1. 执行判断条件, 看其返回结果是true, 还是false 2. true : 执行语句体1 3. false : 执行语句体2 if语句的格式3: if(判断条件1){ 语句体1; }else if(判断条件2){ 语句体2; }else if(判断条件3){ 语句体3; } ... else { 语句体n+1; }
switch语句
if语句的格式1 : if(判断条件){ 语句体; } 执行流程: 1. 执行判断条件, 看其返回结果是true, 还是false 2. true : 执行 {} 中语句体 3. false : 不执行 {} 中语句体 if语句格式2: if(判断条件) { 语句体1; } else { 语句体2; } 执行流程: 1. 执行判断条件, 看其返回结果是true, 还是false 2. true : 执行语句体1 3. false : 执行语句体2 if语句的格式3: if(判断条件1){ 语句体1; }else if(判断条件2){ 语句体2; }else if(判断条件3){ 语句体3; } ... else { 语句体n+1; }
for循环
格式:
1. for(初始化语句; 判断条件; 条件控制语句){ 2. 循环体语句; 3. }
初始化语句: 定义变量
判断条件: 控制循环是否需要继续的条件
循环体语句: 循环要执行的代码
条件控制语句 : 改变控制循环的那个变量
for(int i = 1; i <= 10; i++){ // 循环几次 System.out.println("HelloWorld"); }
使用场景: 明确循环次数的时候,使用for循环.
无限循环
for(;;){}
while循环
格式:
初始化语句;
while(判断条件){
循环体语句;
条件控制语句;
}
int i = 1; while(i <= 5){ System.out.println("HelloWorld"); i++; }
使用场景: 不明确循环的次数, 使用while死循环.
while(true){
循环体语句;
条件控制语句;
}
do...while循环(了解)
格式:
初始化语句;
do { 循环体语句; 条件控制语句; }while(判断条件);
特点: 无论判断条件是否满足, 都至少执行一次循环体
break&continue跳转控制语句
break: 结束\终止
switch语句和循环语句,终止当前循环语句;
注意: break只能在switch和循环中进行使用;
continue: 跳过
跳过某一次循环体的执行, 继续下一次;
注意: continue只能在循环中使用;
------------------------------------------------------------
共同的注意事项:
break, continue, 下面不允许写代码, 因为执行不到;
使用细节:
如果在一个循环嵌套的代码中, break和continue, 只能操作自己所在的那一层
想要操作指定层, 可以使用标号(给循环起名字)
十. 数组
两种初始化:
动态初始化: 手动指定长度, 系统分配默认初始化值.
int[] arr = new int[长度];
静态初始化: 手动指定元素, 系统会计算出该数组的长度.
int[] arr = new int[]{100,100,100,90}; int[] arr = {100,100,100,90};
arr[索引] <== 索引代表数组元素的下角标,索引都是从0开始,每个数组的最大索引值等于arr.length-1;
注意:
只要是对数组中的元素进行操作(获取元素,修改赋值元素), 第一个想法是循环遍历数组,这样才能得到数组的每一个元素.
for(int i = 0; i < arr.length; i++){ // arr[i] 代表数组的每一个元素 System.out.println(arr[i]); }
两种初始化的使用选择:
1. 静态初始化: 如果要操作的数据都已经明确给出了, 推荐使用静态初始化
需求: 计算出班级学生的总成绩 (100,100,100,90)
int[] arr = {100,100,100,99};
2. 动态初始化: 只知道要存储几个元素, 但是不明确具体数值的情况
int[] arr = new int[5]; for(int i = 0; i < arr.length; i++){ arr[i] = sc.nextInt(); }
十一. 方法
方法\函数: 一段具有独立功能的代码块, 不调用就不执行.
方法的定义:
定义格式:
public static 返回值类型 方法名(参数列表){
方法体;
return 返回值;
}
public static : 修饰符, 目前来说暂时记住
返回值类型: 跟return返回的结果有关
方法名: 自己给方法起的名字, 小驼峰命名法
参数列表: 方法运行之前所需要的材料
方法体: 方法中所维护的逻辑代码
return :
1. 用于结束方法
2. 用于将返回值返还给调用者
方法调用格式:
方法的调用格式:
1. 带返回值的方法:
A: 单独调用-不推荐,因为没有拿到结果数据.
方法名(实参);
B: 赋值调用-推荐, 因为灵活
返回值类型 变量名 = 方法名(实参)
C: 输出调用-偶尔用
System.out.println(方法名(实参));
2. 不带返回值的方法(void) :
void : 并不是一个数据类型, 只是标识此方法没有返回值的
A: 单独调用
方法名(实参);
示例:
public static void main(String[] args){ // 1. getMax 为方法的调用, ()中的20,30 为方法的实参; // 2. 用int类型参数接收方法返回的参数; int max = getMax(20,30); System.out.println(max); }
// 1. 方法的定义. int: 方法返回值类型; getMax: 方法名; (int a, int b): 定义方法时使用的形参; public static int getMax(int a, int b){ // 2. 返回int类型参数; return a > b ? a : b; }
方法注意事项:
1. 方法不调用就不执行
2. 方法与方法之间是平级关系, 不允许嵌套定义
3. 方法的编写顺序和执行顺序无关, 要想梳理执行顺序, 就看调用顺序
4. 如果一个方法的返回值类型为void, 表示此方法是没有返回值, return 语句可以省略不写的
但如果非要写return的话, 只能写成 return; 后面不能带有具体的值.
正确: return;
错误: return 10;
5. return 语句下面不能写代码, 因为执行不到
6. 如果一个方法有明确的返回值类型, 一定要通过 return 语句带回一个结果, 无论什么情况下.
方法的重载:
介绍: 方法重载(Overload) : 方法与方法之间的一种关系
- 在同一个类中, 方法名相同, 参数不同, 与返回值无关
(个数不同, 类型不同, 顺序不同)
十二. 面向对象
类和对象的关系:
类 : 是一组相关属性和行为的集合, 将类理解为是对象的设计图
既然类是对象的设计图, 那就是说, 需要根据类, 才能创建出对象
关系 : 依赖关系
需要根据类去创建对象
数量关系
一对多的关系, 根据一个类, 可以创建出多个对象.
标准 JavaBean:
1. 所有成员变量私有化
2. 提供出[空参][带参]构造方法
3. 针对于私有的成员变量, 提供出setXxx\getXxx方法
例如:
// 1. 定义一个Student类 public class Student { // 2. 成员变量私有化 private String name; // 2. 成员变量私有化 private int age; // 2. 成员变量私有化 private String teacherName; // 3. 提供空参构造方法 public Student() { } // 4. 提供带参构造方法 public Student(String name, int age, String teacherName) { this.name = name; this.age = age; this.teacherName = teacherName; } // 5. 针对于私有的成员变量, 提供出getXxx方法 public String getName() { return name; } // 5. 针对于私有的成员变量, 提供出SetXxx方法 public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getTeacherName() { return teacherName; } public void setTeacherName(String teacherName) { this.teacherName = teacherName; }
十三. String与StringBuilder
String介绍
特点:
1. Java 中所有的双引号字符串, 都是String这个类的对象
2. String 一旦被创建就不可改变 - 内容不可改变
- String是一个不可改变的字符序列
String s = "abc";
s = "def"; // 这一步是让s变量, 记录了新的对象, 原来的 "abc" 内容是根本没有改变的
3. 字符串虽然不可改变, 但是其内容可以被共享
- 字符串常量池 :
在使用双引号创建字符串对象时, 会检查该数据在常量池中是否存在
不存在 : 创建
存在 : 复用
创建方式:
1. public String() : 创建一个空白的字符串对象 String s = new String(); 2. public String(String s) : 根据传入的字符串, 创建字符串对象 String s = new String("abc"); 3. public String(char[] chs) : 根据传入的字符数组, 创建字符串对象 char[] chs = {'a','b','c'}; String s = new String(chs); 1. String s = "abc";
两种创建字符串对象的区别 :
1. 双引号直接创建: 数据会在字符串常量池中进行维护
2. 通过构造方法 new 出来的对象: 会在堆内存中有自己独立的内存空间
String常见方法
String类中用于比较的方法: public boolean equals(Object anObject) : 两个字符串之间做比较, 比较内容, 返回true, false的结果 public boolean equalsIgnoreCase(String anotherString) : 两个字符串之间做比较, 比较内容, 返回true, false的结果, 忽略大小写 String类中用于遍历的方法: public char[] toCharArray() : 将字符串转换为字符数组 public char charAt(int index) : 根据传入的索引获取字符 public int length() : 返回字符串中字符的个数 String类中用于截取的方法: public String substring(int beginIndex) : 根据传入的索引截取当前字符串, 截取到末尾, 并返回新的字符串 public String substring(int beginIndex, int endIndex) : 根据传入的开始和结束索引, 截取字符串, 并返回新的字符串 - 包含头, 不包含尾 String类中用于替换的方法: public String replace(CharSequence target, CharSequence replacement) : 参数1 target : 旧值 参数2 replacement : 新值 String类中用于切割的方法 : public String[] split(String regex) : 根据传入的字符串参数, 作为规则, 切割当前字符串. 正则表达式 : 本质就是一个字符串 ---> 可以去指定一些规则. 结论: 今后在做切割的时候, 希望都能以 \\ 为开头
StringBuilder介绍
- 字符串的缓冲区(容器), 容器可以存储任意数据类型, 但是数据进入到该容器, 都会变成字符串
- 可变的字符序列
- String 和 StringBuilder 区别
- String不可改变的字符序列
- StringBuilder可以改变的字符序列
思考:
如何将一个基本数据类型变成字符串类型?
StringBuilder常用方法
public StringBuilder append(任意类型); 往StringBuilder容器添加任意类型的数据,返回StringBuilder本身。 public StringBuilder reverse(); 对StringBuilder进行反转 public int length(); 获取StringBuiler容器中字符的个数 public String toString(); 把StringBuilder容器转换为字符串
StringBuilder和String之间的相互转换
String ---> StringBuilder 的转换 1. 通过StringBuilder的构造方法进行转换 String s = "abc"; StringBuilder sb = new StringBuilder(s); 2. 先创建StringBuilder对象, 再通过append方法进行转换. String s = "abc"; StringBuilder sb = new StringBuilder(); sb.append(s); StringBuilder ---> String 的转换 1. 直接通过toString方法即可 StringBuilder sb = new StringBuilder("abc"); String s = sb.toString();