- 第5章 程序控制结构
- 第6章 数组、排序和查找
- 第7章 面向对象编程(基础部分)
目录
第5章 程序控制结构
5.1 程序流程控制介绍
5.1.1 控制语句的分类
1) 顺序控制
2) 分支控制
3) 循环控制
5.2 分支语句
1) 单分支 if
2) 双分支 if-else
3) 多分支 if-else if -....-else
5.2.1 单分支
5.2.2 双分支
5.2.3 嵌套分支
1基本介绍
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外
层分支。老师建议: 不要超过 3 层 (可读性不好)
5.3 switch 分支结构
基本语法
注意事项和细节讨论
5.4 switch 和 if 的比较
1)如果判断的具体数值不多,而且符合 byte、 short 、int、 char, enum[枚举], String 这 6 种类型。虽然两个语句都可以使用,建议使用 swtich 语句。
2) 其他情况:对区间判断,对结果为 boolean 类型判断,使用 if,if 的使用范围更广
5.5 for 循环控制
5.5.1 基本语法
老韩说明
1. for 关键字,表示循环控制
2. for 有四要素: (1)循环变量初始化(2)循环条件(3)循环操作(4)循环变量迭代
3. 循环操作 , 这里可以有多条语句,也就是我们要循环执行的代码
4. 如果 循环操作(语句) 只有一条语句,可以省略 {}, 建议不要省略
5.6 while 循环控制
5.6.1 基本语法
注意事项和细节说明
1) 循环条件是返回一个布尔值的表达式
2) while 循环是先判断再执行语句
5.7 do..while 循环控制
5.7.1 基本语法
循环变量初始化;
do{
循环体(语句);
循环变量迭代;
}while(循环条件);
老韩说明:
1. do while 是关键字
1. 也有循环四要素, 只是位置不一样
2. 先执行,再判断,也就是说,一定会至少执行一次
3. 最后 有一个 分号 ;
4. while 和 do..while 区别举例: 要账
5.8 跳转控制语句-break
5.8.1 基本语法
{ ……
break;
…… }
5.9 跳转控制语句-continue
5.9.1 基本介绍
1) continue 语句用于结束本次循环,继续执行下一次循环。
2) continue 语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环 , 这个和前面的标签的使用的规则一样。
5.9.2 基本语法
{ ……
continue;
…… }
5.10 跳转控制语句-return
return 使用在方法,表示跳出所在的方法,在讲解方法的时候,会详细的介绍,这里我们简单的提一下。注意:如果 return 写在 main 方法,退出程序..Return01.java。
第 6 章 数组、排序和查找
6.1 数组介绍
数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。
即:数(数据)组(一组)就是一组数据。
6.2 数组的使用
6.2.1 使用方式 2-动态初始化
先声明数组
语法:数据类型 数组名[]; 也可以 数据类型[] 数组名;
int a[]; 或者 int[] a;
创建数组
语法: 数组名=new 数据类型[大小];
a=new int[10];
6.2.2使用方式 3-静态初始化
6.3 数组使用注意事项和细节
1) 数组是多个相同类型数据的组合,实现对这些数据的统一管理
2) 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
3) 数组创建后,如果没有赋值,有默认值
int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000,boolean false,String null
4) 使用数组的步骤 1. 声明数组并开辟空间 2 给数组各个元素赋值 3 使用数组
5) 数组的下标是从 0 开始的。
6) 数组下标必须在指定范围内使用,否则报:下标越界异常,比如int [] arr=new int[5]; 则有效下标为 0-4。
7) 数组属引用类型,数组型数据是对象(object)
6.4 数组赋值机制
1) 基本数据类型赋值,这个值就是具体的数据,而且相互不影响。
int n1 = 2; int n2 = n1;
2) 数组在默认情况下是引用传递,赋的值是地址。
看一个案例,并分析数组赋值的内存图(重点, 难点. )。
//代码 ArrayAssign.java
int[] arr1 = {1,2,3};
int[] arr2 = arr1;
6.5 排序的介绍
排序是将多个数据,依指定的顺序进行排列的过程。
排序的分类:
1)内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序法、选择式排序法和插入式排序法);
2)外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)。
6.6 冒泡排序法
冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素 开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部, 就象水底下的气泡一样逐渐向上冒。
6.7 二维数组
6.7.1 介绍
1) 语法: 类型[][] 数组名=new 类型[大小][大小]
2) 比如: int a[][]=new int[2][3]
6.7.2 使用方式 2: 动态初始化
先声明:类型 数组名[][]; TwoDimensionalArray02.java
再定义(开辟空间) 数组名 = new 类型[大小][大小]
赋值(有默认值,比如 int 类型的就是 0)
6.7.3 静态初始化
定义 类型 数组名[][] = {{值 1,值 2..},{值 1,值 2..},{值 1,值 2..}}
使用即可 [ 固定方式访问 ]
比如:
int[][] arr = {{1,1,1}, {8,8,9}, {100}};
6.7.4 二维数组使用细节和注意事项
1) 一维数组的声明方式有:
int[] x 或者 int x[]
2) 二维数组的声明方式有:
int[][] y 或者 int[] y[] 或者 int y[][]
3) 二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。比如: map[][] 是一个二维数组int map [][] = {{1,2},{3,4,5}}
由 map[0] 是一个含有两个元素的一维数组 ,map[1] 是一个含有三个元素的一维数组构成,我们也称为列数不等的二维数组
第 7 章 面向对象编程(基础部分)
7.1 类与对象
7.1.1 类与对象的关系示意图
7.1.2 类和对象的区别和联系
通过上面的案例和讲解我们可以看出:
1) 类是抽象的,概念的,代表一类事物,比如人类,猫类.., 即它是数据类型.2) 对象是具体的,实际的,代表一个具体事物, 即 是实例.
3) 类是对象的模板,对象是类的一个个体,对应一个实例
7.1.3 对象在内存中存在形式(重要的)必须搞清楚
7.1.4 属性/成员变量/字段
基本介绍
1) 从概念或叫法上看: 成员变量 = 属性 = field(字段) (即 成员变量是用来表示属性的,授课中,统一叫 属性)。
2) 属性是类的一个组成部分,一般是基本数据类型,也可是引用类型(对象,数组)。比如我们前面定义猫类 的 int age 就是属性。
注意事项和细节说明
1) 属性的定义语法同变量,示例:访问修饰符 属性类型 属性名;
这里老师简单的介绍访问修饰符: 控制属性的访问范围
有四种访问修饰符 public, proctected, 默认, private ,后面我会详细介绍
2) 属性的定义类型可以为任意类型,包含基本类型或引用类型
3) 属性如果不赋值,有默认值,规则和数组一致。具体说: int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000,
boolean false,String null
7.1.5 如何创建对象
1) 先声明再创建
Cat cat ; //声明对象 cat
cat = new Cat(); //创建
2) 直接创建
Cat cat = new Cat();
7.1.6 如何访问属性
基本语法
对象名.属性名;
案例演示赋值和输出
cat.name ;
cat.age;
cat.color;
类和对象的内存分配机制(重要)
7.1.7 类和对象的内存分配机制
Java 内存的结构分析
1) 栈: 一般存放基本数据类型(局部变量)
2) 堆: 存放对象(Cat cat , 数组等)
3) 方法区:常量池(常量,比如字符串), 类加载信息
4) 示意图 [Cat (name, age, price)]
Person p = new Person();
p.name = “jack”;
p.age = 10
1) 先加载 Person 类信息(属性和方法信息, 只会加载一次)
2) 在堆中分配空间, 进行默认初始化(看规则)
3) 把地址赋给 p , p 就指向对象
4) 进行指定初始化, 比如 p.name =”jack” p.age = 10
看一个练习题,并分析画出内存布局图,进行分析
7.2 成员方法
7.2.1基本介绍
在某些情况下,我们要需要定义成员方法(简称方法)。比如人类:除了有一些属性外( 年龄,姓名..),我们人类还有一些行为比如:可以说话、跑步..,通过学习,还可以做算术题。这时就要用成员方法才能完成。现在要求对 Person 类完善。
7.2.2 成员方法的好处
1) 提高代码的复用性
2) 可以将实现的细节封装起来,然后供其他用户来调用即可
7.2.3 成员方法的定义
访问修饰符 返回数据类型 方法名(形参列表..) {//方法体
语句;
return 返回值;
}
1) 形参列表:表示成员方法输入 cal(int n) , getSum(int num1, int num2)
2) 返回数据类型:表示成员方法输出, void 表示没有返回值
3) 方法主体:表示为了实现某一功能代码块
4) return 语句不是必须的。
5) 老韩提示: 结合前面的题示意图, 来理解
7.3 方法递归调用(非常非常重要,比较难)
7.3.1基本介绍
简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂问题,同时可以让代码变得简洁。
7.3.2递归举例
阶乘问题
public class test3 {
public static void main(String[] args) {
T t1 = new T();
t1.test(4);//输出什么? n=2 n=3 n=4
int res = t1.factorial(5);
System.out.println("5 的阶乘 res =" + res);
}
}
class T {
//分析
public void test(int n) {
if (n > 2) {
test(n - 1);
}
System.out.println("n=" + n);
}
public int factorial(int n) {
if (n == 1) {
return 1;
} else {
return factorial(n - 1) * n;
}
}
}
7.3.3 4递归重要规则
7.4 方法重载(OverLoad)
7.4.1 1基本介绍
java 中允许同一个类中,多个同名方法的存在,但要求 形参列表不一致!
比如:System.out.println(); out 是 PrintStream 类型
OverLoad01.java
7.4.2 重载的好处
1) 减轻了起名的麻烦
2) 减轻了记名的麻烦
7.4.3 快速入门案例
1) calculate(int n1, int n2) //两个整数的和
2) calculate(int n1, double n2) //一个整数,一个 double 的和
3) calculate(double n2, int n1)//一个 double ,一个 Int 和
4) calculate(int n1, int n2,int n3)//三个 int 的和
7.4.4 注意事项和使用细节
7.5 可变参数
7.5.1 基本概念
java 允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。
就可以通过可变参数实现。
7.5.2 基本语法
访问修饰符 返回类型 方法名(数据类型... 形参名) {
}
7.5.3 案例
public int sum(int... nums) {
//System.out.println("接收的参数个数=" + nums.length);
int res = 0;
for(int i = 0; i < nums.length; i++) {
res += nums[i];
}
return res;
}
7.5.4 注意事项和使用细节
7.6 作用域
7.6.1 基本使用
7.6.2 注意事项和细节使用
7.7 构造方法/构造器
7.7.1 基本语法
[修饰符] 方法名(形参列表){
方法体;
} 老韩说明:
1) 构造器的修饰符可以默认, 也可以是 public protected private
2) 构造器没有返回值
3) 方法名 和类名字必须一样
4) 参数列表 和 成员方法一样的规则
5) 构造器的调用, 由系统完成
7.7.2 基本介绍
构造方法又叫构造器(constructor),是类的一种特殊的方法,它的主要作用是完成对新对象的初始化。它有几个特点:
1) 方法名和类名相同
2) 没有返回值
3) 在创建对象时,系统会自动的调用该类的构造器完成对象的初始化。
7.7.3 快速入门
public class test4 {
public static void main(String[] args) {
A a = new A(32,"张三");
System.out.println(a.age);
System.out.println(a.name);
}
}
class A{
int age;
String name;
public A(){//无参构造
}
public A(int age, String name) {//有参构造
this.age = age;
this.name = name;
}
//快捷键:alt+insert 选择第一个
}
7.7.4 5注意事项和使用细节
7.8 this 关键字
7.8.1 什么是this
java虚拟机会给每个对象分配 this.代表当前对象。坦白的讲,要明白this不是件容易的事,我给大家打一个比方。[上帝创世界小故事]。
7.8.2 深入理解 this
7.8.3 this 的注意事项和使用细节
1) this 关键字可以用来访问本类的属性、方法、构造器2) this 用于区分当前类的属性和局部变量
3) 访问成员方法的语法:this.方法名(参数列表);4) 访问构造器语法:this(参数列表); 注意只能在构造器中使用(即只能在构造器中访问另外一个构造器, 必须放在第一
条语句)
5) this 不能在类定义的外部使用,只能在类定义的方法中使用。