第三章:分支结构

一、 if 分支结构
1. if 的基本结构
(1) 语法:
  if( 判断条件 / 布尔表达式 ){
      // 语句
  }
(2) 执行原理:如果 if 后面 () 中的条件成立,结
果为 true ,则执行 {} 中的语句 2. if 的基本结构 2
(1) 语法:
  if( 判断条件 / 布尔表达式 ){
      // 语句 1
  }else{
      // 语句 2
  }
(2) 执行原理:如果 if() 中的条件成立,则执行
语句 1 ,否则执行语句 2
3. 多重的 if 结构 (1) 语法:
  if( 判断条件 ){
      // 语句 1
  }else if( 判断条件 ){
      // 语句 2
  }else if( 判断条件 ){
      // 语句 3
  }else if( 判断条件 ){
      // 语句 4
  }else{
      // 语句 n
  }
4. 嵌套的 if 结构
(1) 语法:
  if( 判断条件 / 布尔表达式 ){
      // 语句
  }
(2) 执行原理:如果 if 后面 () 中的条件成立,结
果为 true ,则执行 {} 中的语句 2. if 的基本结构 2
(1) 语法:
  if( 判断条件 / 布尔表达式 ){
      // 语句 1
  }else{
      // 语句 2
  }
(2) 执行原理:如果 if() 中的条件成立,则执行
语句 1 ,否则执行语句 2
3. 多重的 if 结构 (1) 语法:
  if( 判断条件 ){
      // 语句 1
  }else if( 判断条件 ){
      // 语句 2
  }else if( 判断条件 ){
      // 语句 3
  }else if( 判断条件 ){
      // 语句 4
  }else{
      // 语句 n
  }
4. 嵌套的 if 结构
二、等值分支结构: switch...case
1. 语法:
switch( 表达式 ){
  case 1: 语句 1;break;
  case 2: 语句 2;break;
  case 3: 语句 3;break;
  ...
  default: 语句 n;break;
}
执行原理:会根据 switch 中的表达式结果,从上往
下进行依次匹配 case 后面的值,哪一个匹配成功,
则执行 case 后面对应的语句,如果都匹配不成功,
则执行 default 后面的语句。
2. 细节
(1) switch 后面表达式的结果类型必须是
byte short int char String
(2) break :终止、结束 switch..case 结构,防
case 穿透
(3) default 没有位置先后要求
三、局部变量
1. 概念:定义在函数 / 方法的内部的变量
2. 特点:
(1) 先赋值,再使用
(2) 从定义位置开始,到定义它的代码块结束
(3) 在重合的作用范围内,不允许命名冲突
第四章:循环结构
一、循环的理解
1. 理解:通过某个条件,重复并且有规律的执行一
段代码
2. 循环的组成部分:循环变量的初始化、循环条
件、循环变量的改变、循环体
3. 循环分类: while 循环、 do...while 循环、 for
二、 while 循环
1. 语法:
// 循环变量的初始化
while( 循环条件 ){
  // 循环体 ( 重复执行的功能代码 )
  // 循环变量的改变
}
2. 执行原理:
3. 特点:
三、 do..while 循环
1. 语法:
先执行循环的初始化,接着判断循环条件,如果条
件满足 - 结果为 true ,执行 {} 中循环体,从而执行
循环变量改变,再次判断循环条件,如果满足 - 结果
true ,执行 {} 中循环体,从而执行循环变量的改
变,再次判断循环条件 ... 执行循环条件不满足,
结果为 false ,终止、结束整个循环结构,继续执
行后续代码 ....
2. 执行原理:
3. 特点:
三、 do..while 循环
1. 语法:
先执行循环的初始化,接着判断循环条件,如果条
件满足 - 结果为 true ,执行 {} 中循环体,从而执行
循环变量改变,再次判断循环条件,如果满足 - 结果
true ,执行 {} 中循环体,从而执行循环变量的改
变,再次判断循环条件 ... 执行循环条件不满足,
结果为 false ,终止、结束整个循环结构,继续执
行后续代码 ....
2. 执行原理:
3. 特点:
三、 do..while 循环
1. 语法:
先执行循环的初始化,接着判断循环条件,如果条
件满足 - 结果为 true ,执行 {} 中循环体,从而执行
循环变量改变,再次判断循环条件,如果满足 - 结果
true ,执行 {} 中循环体,从而执行循环变量的改
变,再次判断循环条件 ... 执行循环条件不满足,
结果为 false ,终止、结束整个循环结构,继续执
行后续代码 ....
四、 for 循环【开发应用重点】
1. 语法:
四、 for 循环【开发应用重点】
1. 语法:
(1) 先判断,再执行,执行的次数为 0~n
(2) 循环变量的初始化代码可以定义在 for 上面,
此时循环变量的作用范围扩大了,不建议
(3) 循环条件没有,则默认为 true
循环的总结:
while 循环和 for 循环特定:先判断,再执行
do..while 循环:先执行,再判断
后期开发:
while 循环:当循环次数不确定时,建议使用
while 循环
for 循环:当循环的次数明确时,建议使用 for 循环
五、循环的控制语句
1. break :终止、结束当前循环;可以应用在
switch..case 中,用于防止 case 穿透
2. continue :中止、结束本次循环,从而进入下一
次循环
六、循环的嵌套
1. 理解:在循环结构中,定义完整的循环结构
2. 循环嵌套时,循环次数:外层循环次数 * 内层循
环次数
3. 循环控制语句应用循环嵌套中:
2. continue :中止、结束本次循环,从而进入下一
次循环
六、循环的嵌套
1. 理解:在循环结构中,定义完整的循环结构
2. 循环嵌套时,循环次数:外层循环次数 * 内层循
环次数
3. 循环控制语句应用循环嵌套中:
第五章:函数
一、理解
1. 函数:执行一段特定功能的代码,并且可以通过
名字被反复的调用
2. 函数的使用流程:
(1) 函数的定义:确定了函数的功能和函数名
      a. 函数的声明:确定函数名
  b. 函数的实现:确定函数功能
(2) 函数的调用:通过函数名进行反复的使用
3. 函数定义的位置:定义在类以内,其他函数以外
( main 并列 )
二、函数的基本使用
1. 函数的定义:
2. 函数的调用:
public static void 函数名 (){
  // 函数体 ( 函数实现 )
}
函数的定义分为函数的声明 和函数的实现:
函数的声明: public static void 函数名 ()
        注意:函数名望文生义、驼峰命名
函数的实现: {}
(1) 可以通过函数名使用函数,被称为调用
(2) 语法:函数名 ();
三、参数的使用
1. 多数情况下,函数与调用者之间需要数据的交
互;调用者必须提供必要的数据,才能使函数完
成相应的功能,函数和调用者之间交互的数据被
称为参数
2. 形式参数:
3. 实际参数:
(1) 形式参数:简称形参,函数和调用者之间需要
交互数据约定,约定调用者需要传递哪种类型、几
个参数
(2) 语法: ( 数据类型 参数名 , 数据类型 参数名
2)
(3) 使用:将形参作为函数的局部变量进行使用即
三、参数的使用
1. 多数情况下,函数与调用者之间需要数据的交
互;调用者必须提供必要的数据,才能使函数完
成相应的功能,函数和调用者之间交互的数据被
称为参数
2. 形式参数:
3. 实际参数:
(1) 形式参数:简称形参,函数和调用者之间需要
交互数据约定,约定调用者需要传递哪种类型、几
个参数
(2) 语法: ( 数据类型 参数名 , 数据类型 参数名
2)
(3) 使用:将形参作为函数的局部变量进行使用即
(1) 实际参数:简称实参,函数调用时,用户传递
给函数的具体数据
(2) 语法:函数名 ( 实参 );
(3) 作用:实际参数用于给形参赋值
(4) 注意:实际参数的个数、顺序、数据类型必须
和形参一致
四、函数的返回值
1. 理解:函数和调用者之间的一种数据交互,调用
者通过函数调用,函数需要给调用者返回的数据
2. 语法
public static 返回值类型 函数名 ( 参数 ){
  // 函数体 ( 函数功能 )
}
3. 函数返回值类型:
4. 函数返回值的处理:
5. return 的作用
五、函数执行的机制
(1) 返回值类型为 void ,代表无返回值,函数无
需给调用者返回任何数据结果
(2) 返回值类型为: 8 种基本数据、对象类型,代
表函数必须给调用者返回对应的数据;函数体中必
须 有 return xxx;
(1) 第一种处理方式:定义和返回值类型同类型的
变量接收
(2) 第二种处理方式:不处理
1. 理解:
2. 函数的嵌套调用:
六、递归调用
1. 理解:一个函数中调用自身
2. 注意:函数递归使用过程中,必须设置一个出
口,否则可能会出现无穷递归,运行过程中报错
信息为: java.lang.StackOverflowError (栈溢
出)
3. 递归的思想:
程序以 main 函数作为程序入口,进入 main 函数从
上往下依次执行,如果遇到函数调用,则优先执行
被调用函数内部的代码,函数执行完毕以后,带着
返回值返回到调用位置,再继续后续代码 .....
被调用的函数内部,又调用其他的函数
(1) 递进:每一次推进,计算都比上一次变得简
单,直至简单到无需继续推进,就能获得结果。也
叫到达出口。
(2) 回归:基于出口的结果,逐层向上回归,依次
计算每一层的结果,直至回归到最顶层。
4. 案例:
package demo;
public class Test8{
public static void main(String[]
args){   // 135642
int r = jieCheng(8);
System.out.println(r);
}
// 函数功能:计算 n 的阶乘
public static int jieCheng(int n)
{
// 递归的出口
if(n==1 || n==0) return 1;
// n 的阶乘 = n* (n-1) 的阶乘
return n* jieCheng(n-1);
}
}
第六章:数组
一、理解
1. 数组:一组连续的存储空间,可以存储多个相同
类型的数据,而且可以统一管理
2. 数组的重要因素:数组的长度 和 数据类型
3. 数组的使用:
(1) 声明数组:确定数组的数据类型
  数据类型 [] 数组名 ;
  int[] a; // 建议
  int a[];
  int []a;
   
(2) 分配空间:确定数组的长度
  数组名 = new 数组类型 [ 长度 ];
  a = new int[5];
4. 数组的基本语法:
(1) 数组的下标:从 0 开始,依次为 0 1
2..., 数组的长度 -1
(2) 数组的访问:通过数组名 + 下标,数组名 [
]
     
(3) 访问数组时指定的下标不在合法范围内,则编
译通过,运行报错,错误信息为:
java.lang.ArrayIndexOutOfBoundsExcept
ion( 数组的下标越界 )
(4) 对数组元素进行一一访问,遍历
  // 利用循环控制数组的下标
  for(int i=0;i< 数组的长度 ;i++){
      // 数组名 [i] 访问
  }
5. 数组的默认值
整型类型: 0
小数类型: 0.0
字符类型:空字符
布尔类型: false
引用类型: null
6. 数组的定义方式:
(1) 先声明,再分配空间:
  数据类型 [] 数组名;
  数组名 = new 数据类型 [ 长度 ];
   
(2) 声明的同时分配空间:
  数据类型 [] 数组名 = new 数据类型 [
];
   
(3) 显示初始化:
  数据类型 [] 数组名 = new 数据类型 []{
1, 2, 3};
  注意:数组的长度由 {} 中数据的个数决定,
[] 中不能再指定数组的长度
   
(4) 显示初始化:
数据类型 [] 数组名 ={ 1, 2, 3};
  注意:初始化必须和声明一起完成,不能分开
二、数组的内存
1. 数组:内存中空间是连续的 ( 方便管理 )
2. 数组类型变量存储的是数组在内存中首地址
3. 寻址方式:首地址 + 数据类型的字节数 * 下标
三、数组扩容
1. 思想:
2. 实现数组扩容:
  数据类型 [] 数组名 ={ 1, 2, 3};
  注意:初始化必须和声明一起完成,不能分开
(1) 创建一个更大空间的新数组,通常是数组的长
2
(2) 将原数组中的元素一一赋值到新的数组中
(3) 新的地址覆盖旧的地址
第一种方式:
package demo;
public class Test5{
public static void main(String[]
args){
int[] a = {7,8,3,5,2};
// 原来数组的长度
System.out.println(" 数组的原长
度: "+a.length);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+"
");
}
System.out.println();
// 将 新的数据 20 存储到 a 数组
中,不够用,需要扩容
// 1. 创建一个更大空间的新数组
int[] b = new
int[a.length*2];
// 2. 将原数组元素一一赋值到新数组、
//   = - 》 新 [0] =
[0] , 新 [1] = [1]
for(int i=0;i<a.length;i++){
// =
b[i] = a[i];
}
// 3. 新的地址覆盖旧的地址
a = b;
a[5] = 20;
System.out.println(" 新数组的长
度: "+a.length);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+"
");
}
}
}
第二种方式:
java.util.Arrays.copyOf( 原数组名 , 新数组
的长度 );
a=java.util.Arrays.copyOf(a,a.length*
2);
第二种方式:
java.util.Arrays.copyOf( 原数组名 , 新数组
的长度 );
a=java.util.Arrays.copyOf(a,a.length*
2);
int[][] a = new int[5][4];
a[1][2] = 9;
a[3][0] = 5;
// 遍历数组
// 外层循环控制行
for(int i=0;i<a.length;i++){
// 内层循环控制列
for(int j=0;j<a[i].length;j++){
System.out.print(a[i][j]+"
");
}
System.out.println();
}
五、数组的排序
1. 排序:将数组中的元素按照一定规则进行存储
2. 排序方式: [ 从小到大 ]
(1) 冒泡排序方式:每次将相邻的两个数据进行一
一比较,将较大的数据进行往后移
  // 循环:控制比较轮数
for(int i=1;i<a.length;i++){
for(int j=0;j< a.length
i;j++) {
// 比较 a[j] a[j+1]
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
(2) java.util.Arrays.sort(a); 借助工具类
排序
第七章:面向对象
一、编程思想
1. 面向过程:
2. 面向对象:
二、对象
1. 理解:计算机中的对象:复杂的客观事物在 Java
程序中的一种表现形式 ( 一切皆对象 )
2. 对象的组成部分:
(1) 面向过程:将问题拆分为第一步、第二步、第
三步 ... 将问题解决
(2) 问题:解决较大业务时,相对麻烦
(1) 面向对象:将一些内容看成一个整体,作为一
个对象,利用对象与对象之间关系,解决问题
(2) 解决复杂业务相对容易
(1) 对象的属性:代表对象有什么特征,对应静态
数据部分
(2) 对象的方法:代表对象能做什么,对应动态的
行为和功能
(1) 类:计算机中用于区分不同类别对象,用于描
述该类对象具有哪些属性和哪些方法
(2) 类和对象的关系:
  类是对象的模板
  对象是类的实例
   
  注意:一个类可以创建多个对象
三、类的组成
1. 类名:望文生义,每个单词首字母大写
2. 类的定义:
class 类名 {
  // 1. 属性
  // 2. 方法
}
3. 属性:
(1) 属性:也被称为成员变量
(2) 语法:数据类型 变量名 ;
        数据类型 变量名 = ;
(3) 位置:定义在类以内,方法以外
(4) 成员变量具有默认值:
  整数类型: 0
  小数类型: 0.0
  字符类型:空字符
  布尔类型: false
  对象类型: null
(5) 成员变量的作用范围:至少在本类中有效
(6) 命名冲突:在本类中不允许有同名成员变量,
但是成员变量可以和局部变量命名冲突,局部变量
优先使用
4. 方法:
(1) 方法:成员方法
(2) 位置:定义类以内,其他方法以外
(3) 语法:
  public static 返回值类型 函数名 ( 形参 )
{
      // 函数体
  }
  方法定义如下:
  public 返回值类型 方法名 ( 形参 ){
      // 方法体
  }
(4) 方法的定义:分为方法的声明和方法的实现
  声明:修饰符 返回值类型 方法名 ( 参数 )
    注意:修饰符可以有 0~n
  实现: {}
四、创建对象
1. 语法:类名 对象名 = new 类名 ();
2. 对象的使用:
五、方法的重载 (overload) 【开发 + 面试 + 考试重
点】
1. 理解:一个类中定义了多个同名,但是形参不同
的方法
2. 要求:
        注意:修饰符可以有 0~n
  实现: {}
对象名 . 属性名
对象名 . 方法名 ( 实参 );
(1) 方法名相同
(2) 形参列表不同 ( 参数的个数、顺序、数据类型 )
(3) 返回值类型、修饰符、异常没有要求
3. 使用:
六、构造方法
1. 构造方法:是一种特殊的方法,也称为构造器
2. 定义位置:定义在类以内,方法以外
3. 构造方法的要求:
4. 使用:
通过调用传递的实际参数,决定调用重载中的哪一
个方法
(1) 构造方法的方法名必须和类名一致
(2) 构造方法没有返回值类型 ( void 都没有 )
(3) 语法:
  public 类名 ( 形参 ){}
(4) 构造方法允许重载(一个类中可以定义多个构
造方法:无参数的构造方法只能定义一个,可以定
义多个有参数的构造方法)
(5) 构造方法不允许手动调用
(1) 构造方法在创建对象时, jvm 根据传递的参数
决定使用哪一个构造方法完成对象的创建
(2) 如果一个类中没有定义任何的构造方法,则
jvm 默认提供一个公开的、无参数的构造方法
(3) 如果一个类中定义任何有参数的构造方法,则
jvm 不会再提供公开的无参数的构造方法
(1) 用于创建对象
(2) 利用构造方法,在创建对象时,给属性赋值
一个类中通常提供 2 个构造方法:
(1) 提供一个无参数的构造方法
(2) 提供一个有参数的构造方法,参数个数、顺
序、类型取决于属性
1. this.
(1) this 代表当前对象,用于调用本类的属性和
成员方法
(2) this. 属性名 - 》调用属性
  this. 成员方法名 ( 实参 ); -> 调用方法
(3) this. 通常可以省略,但是当成员变量和局部
变量命名冲突时,通常使用 this. 区分成员变量
2. this()
(1) this() :必须用在构造方法中第一行有效语
(2) 作用:调用本类的其他构造方法
八、引用
1. 引用:对象类型的变量
java 是强类型的语言,对应类型的对象必须存储在
对应类型的引用中:
    类名 引用名 = new 类名 ();
      引用           对象
      引用类型         对象类型   - 》一
2. 引用存储的是对象在堆空间中首地址
3. 对象与对象之间是相互独立的,操作一个对象不
会影响其他的对象
4. 可以单独的声明引用:类名 引用名 ;
5. 同类型的引用之间可以相互赋值,传递的是对象
在堆空间中首地址
6. 可以使用 null 作为引用的初始化数据,但是以
null 调用属性或是方法,则编译通过,但是运行
报错,错误信息为:
java.lang.NullPointerException( 空指针异常 )
7. 引用的应用场景:
(1) 引用应用在形式参数上:对应类型的对象和引
用都可以作为实际参数进行传递
(2) 引用应用在返回值上:对应类型的对象和引用
都可以作为返回值进行返回
第八章:面向对象的三大特性 [ 封装、继
承、多态 ]
一、封装
1. 目前程序存在的问题:程序没有进行数据安全检
测,可能出现业务逻辑问题
2. private :私有的,被 private 修饰的内容,只能
在本类中使用
3. 给私有化的属性提供公开的 get set 方法
(1) set 方法:为属性赋值
  public void set 属性名 ( 数据类型 变量
){
      this. 属性名 = 变量名 ;
  }
  注意: () 中的数据类型取决于赋值对应的属性
类型
(2) get 方法:获取属性值
  public 返回值类型 get 属性名 (){
      return 属性名 ;
  }
  注意:返回值类型取决于 获取的属性类型
二、继承
碳素笔   是一种  
水杯   是一种   容器
    是一种   动物
A     is-a  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值