韩顺平Java笔记(自用2)

  • 第5章  程序控制结构
  • 第6章  数组、排序和查找
  • 第7章  面向对象编程(基础部分)

目录

 第5章 程序控制结构

5.1 程序流程控制介绍

5.1.1 控制语句的分类

5.2 分支语句

5.2.1 单分支

5.2.2  双分支

 5.2.3  嵌套分支

5.3  switch 分支结构

 5.4  switch 和 if 的比较

5.5  for 循环控制

5.5.1  基本语法

5.6  while 循环控制

5.6.1  基本语法

5.7  do..while 循环控制

5.7.1  基本语法

5.8  跳转控制语句-break

5.8.1 基本语法

5.9  跳转控制语句-continue

5.9.1  基本介绍

5.9.2  基本语法

5.10  跳转控制语句-return

第 6 章 数组、排序和查找

6.1  数组介绍

6.2  数组的使用

 6.2.1  使用方式 2-动态初始化

6.2.2使用方式 3-静态初始化

 6.3  数组使用注意事项和细节

6.4  数组赋值机制

 6.5  排序的介绍

6.6  冒泡排序法

6.7  二维数组

6.7.1 介绍

6.7.2 使用方式 2: 动态初始化

6.7.3  静态初始化

6.7.4  二维数组使用细节和注意事项

第 7 章 面向对象编程(基础部分)

7.1  类与对象

7.1.1 类与对象的关系示意图

 7.1.2 类和对象的区别和联系

7.1.3  对象在内存中存在形式(重要的)必须搞清楚

 7.1.4  属性/成员变量/字段

7.1.5  如何创建对象

7.1.6  如何访问属性

7.1.7  类和对象的内存分配机制

7.2  成员方法

7.2.1基本介绍

7.2.2  成员方法的好处

7.2.3  成员方法的定义

7.3  方法递归调用(非常非常重要,比较难)

7.3.1基本介绍

7.3.2递归举例

7.3.3  4递归重要规则

7.4  方法重载(OverLoad)

7.4.1  1基本介绍

7.4.2  重载的好处

7.4.3  快速入门案例

7.4.4  注意事项和使用细节

 7.5  可变参数

7.5.1  基本概念

7.5.2  基本语法

7.5.3  案例

7.5.4  注意事项和使用细节

7.6  作用域

7.6.1  基本使用

 7.6.2  注意事项和细节使用

7.7  构造方法/构造器

7.7.1  基本语法

7.7.2  基本介绍

7.7.3  快速入门

7.7.4  5注意事项和使用细节

 7.8  this 关键字

7.8.1  什么是this

7.8.2  深入理解 this

 7.8.3  this 的注意事项和使用细节


 第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 不能在类定义的外部使用,只能在类定义的方法中使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值