笔记:尚学堂Java300集 第三章

写在前面:大家好,我是草莓橙须圆。毕业之前在CSDN和微信公众号活跃
欢迎关注我的公众号:【草莓橙须圆】 微信号(cmcxy8w)
微信公众号主要就是更新大学生或者考研党的日常
CSDN主要就是学习Java过程中总结的笔记

控制语句

分为三类:顺序、选择、循环
任何软件和程序,本质上都是由“变量、选择语句、循环语句”组成

选择结构

if单选泽

if(布尔表达式){
    语句块
}

对布尔表达式进行一次判定,若判定为真,则执行{ }中的语句块,否则跳过该语句块

如果if语句不写{},则只能作用于后面的第一条语句。 强烈建议,任何时候都写上{},即使里面只有一句话!

if-else双选择

if(布尔表达式){
 语句块1
}else{
       语句块2
}

当布尔表达式为真时,执行语句块1,否则,执行语句块2,即else部分。

if-else if-else多选择

if(布尔表达式1) {
语句块1;
} else if(布尔表达式2) {
语句块2;
}……
else if(布尔表达式n){
    语句块n;
} else {
    语句块n+1;
}

当布尔表达式1为真时,执行语句块1;
否则,判断布尔表达式2,当布尔表达式2为真时,执行语句块2;
否则,继续判断布尔表达式3······;
如果1~n个布尔表达式均判定为假时,则执行语句块n+1,即else部分。

switch结构

switch (表达式) {
case1: 
语句序列1;
[break];
case2:
 语句序列2;
[break];
     … … …      … …
[default:
 默认语句;]
}

switch语句会根据表达式的值从相匹配的case标签处开始执行,一直执行到break语句处或者是switch语句的末尾。
如果表达式的值与任一case值不匹配,则进入default语句(如果存在default语句的情况)。

小结

当布尔表达式是等值判断的情况,可以使用if-else if-else多选择结构或者switch结构;
如果布尔表达式区间判断的情况,则只能使用if-else if-else多选择结构

Math类的使用
1.java.lang包中的Math类提供了一些用于数学计算的方法。
2.Math.random()该方法用于产生一个0到1区间的double类型的随机数,但是不包括1。
int i = (int) (6 * Math.random()); //产生:[0,5]之间的随机整数

循环结构

一类是当型:
当布尔表达式条件为true时,反复执行某语句,当布尔表达式的值为false时才停止循环,比如:while与for循环
一类是直到型:
先执行某语句, 再判断布尔表达式,如果为true,再执行某语句,如此反复,直到布尔表达式条件为false时才停止循环,比如do-while循环

while循环

while(布尔表达式){
     循环体;
}

在循环刚开始时,会计算一次“布尔表达式”的值,若条件为真,执行循环体。
对于后来每一次额外的循环,都会在开始前重新计算一次。
语句中应有使循环趋向于结束的语句,否则会出现无限循环–––"死"循环。

do-while循环

do {
        循环体;
     } while(布尔表达式) ;

先执行循环体,然后再判断布尔表达式的值,若条件为真,执行循环体,当条件为假时结束循环。do-while循环的循环体至少执行一次。

for循环

for (初始表达式; 布尔表达式; 迭代因子) {
      循环体;
}

for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。

for循环在第一次反复之前要进行初始化,即执行初始表达式;
随后,对布尔表达式进行判定,若判定结果为true,则执行循环体,否则,终止循环;
最后在每一次反复的时候,进行某种形式的“步进”,即执行迭代因子

for循环在执行条件判定后,先执行的循环体部分,再执行步进。

Java里能用到逗号运算符的地方屈指可数,其中一处就是for循环的控制表达式。
在控制表达式的初始化和步进控制部分,我们可以使用一系列由逗号分隔的表达式,而且那些表达式均会独立执行。

1.无论在初始化还是在步进部分,语句都是顺序执行的。
2. 尽管初始化部分可设置任意数量的定义,但都属于同一类型。
3. 约定:只在for语句的控制表达式中写入并循环变量初始化,条件判断 和 迭代因子相关的表达式。

初始化部分、条件判断部分和迭代因子可以为空语句,但必须以“;”分开
编译器将while(true)与for(;;)看作同一回事,都指的是无限循环。
在for语句的初始化部分声明的变量,其作用域为整个for循环体,不能在循环外部使用该变量。

嵌套循环

在一个循环语句内部再嵌套一个或多个循环,称为嵌套循环。while、do-while与for循环可以任意嵌套多层

break语句和continue语句

在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。
continue 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

  1. continue用在while,do-while中,continue 语句立刻跳到循环首部,越过了当前循环的其余部分。
  2. continue用在for循环中,跳到for循环的迭代因子部分。

在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子—带标签的break和continue。“标签”是指后面跟一个冒号的标识符,例如:“label:”。
对Java来说唯一用到标签的地方是在循环语句之前

而在循环之前设置标签的唯一理由是:在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方。

//带标签break和continue:控制嵌套循环跳转(打印101-150之间所有的质数)
public class Test11 {
    public static void main(String[] args) {
        outer:for (int i = 101; i < 150; i++) {
            for (int j = 2; j < i; j++) {
                if (i % j == 0) {
                    continue outer;
                }
            }
            System.out.print(i + "、");
        }
    }
}

语句块

语句块(或复合语句),是用花括号扩起的任意数量的简单Java语句
块确定了局部变量的作用域。块中的程序代码,作为一个整体,是要被一起执行的。
块可以被嵌套在另一个块中,但是不能在两个嵌套的块内声明同名的变量
语句块可以使用外部的变量,而外部不能使用语句块中定义的变量,因为语句块中定义的变量作用域只限于语句块

方法

方法就是一段用来完成特定功能的代码片段
方法类似于面向过程中的函数。面向过程中,函数是最基本单位,整个程序由一个个函数调用组成。面向对象中,整个程序的基本单位是类,方法是从属于类和对象

[修饰符1  修饰符2]   返回值类型    方法名(形式参数列表){
    Java语句;… … …
 }

方法的调用方式:对象名.方法名(实参列表)

方法的详细说明
1. 形式参数:在方法声明时用于接收外界传入的数据。
2. 实参:调用方法时实际传给方法的数据。
3. 返回值:方法在执行完毕后返还给调用它的环境的数据。
4. 返回值类型:事先约定的返回值的数据类型,如无返回值,必须显示指定为为void。
notes:
1. 实参的数目、数据类型和次序必须和所调用的方法声明的形式参数列表匹配。
2. return 语句 终止方法的运行 、指定要返回的数据。
3. Java中进行方法调用中传递参数时,遵循值传递的原则(传递的都是数据的副本):
4. 基本类型传递的是该数据值的copy值。
5. 引用类型传递的是该对象引用的copy值,但指向的是同一个对象。

方法的重载(overload)
方法的重载是指一个类中可以定义多个方法名相同,但参数不同的方法。
调用时,会根据不同的参数自动匹配对应的方法。
重载的方法,实际是完全不同的方法,只是名称相同而已!

构成方法重载的条件:
不同的含义:形参类型、形参个数、形参顺序不同

构不成方法重载的条件:
1.返回值不同(返回值类型)不构成方法的重载
2.形参的名称不同,不构成方法的重载

递归结构

递归是把问题逐渐简单化。
递归的基本思想就是“自己调用自己”,一个使用递归的方法将会直接或者间接的调用自己。
利用递归可以用简单的程序来解决一些复杂的问题。比如:斐波那契数列的计算、汉诺塔、快排等问题。

递归结构包括两个部分:
1.定义递归头。(什么时候不调用自身方法)。如果没有头,将陷入死循环,也就是递归的结束条件。
2.递归体。(什么时候需要调用自身方法)。

递归的缺陷
简单的程序是递归的优点之一。但是递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多,所以在使用递归时要慎重。

任何能用递归解决的问题也能使用迭代解决
当递归方法可以更加自然地反映问题,并且易于理解和调试,并且不强调效率问题时,可以采用递归;
在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存。

总结

1.从结构化程序设计角度出发,程序有三种结构:顺序结构、选择结构和循环结构
2.选择结构
  (1)if单选择结构
  if-else双选择结构
  if-else if-else多选择结构
  (2)switch多选择结构
3.多选择结构与switch的关系:当布尔表达式是等值判断的情况,可使用多重选择结构或switch结构,如果布尔表达式区间判断的情况,则只能使用多重选择结构
   (1) 循环结构
   (2)当型:while与for
   (3)直到型:do-while
4.while与do-while的区别,在布尔表达式的值为false时while的循环体一次也不执行,而do-while至少执行一次
5.break可以在switch与循环结构中使用,而continue只能在循环结构中使用
6.方法就是一段用来完成特定功能的代码片段,类似于其它语言的函数
7.方法的重载是指一个类中可以定义多个方法名相同,但参数不同的方法。 调用时,会根据不同的参数自动匹配对应的方法
8.任何能用递归解决的问题也能使用迭代解决。在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值