一篇文章带你了解JAVA结构化编程详情

目录
  • 1.什么是结构化编程
  • 2.为什么要使用结构化编程?
  • 3.三大结构
    • A. 循环结构
      • 一行代码:
    • B. 分支结构
    • C.重复结构
  • 4.函数(在JAVA中叫方法)
  • 总结

1.什么是结构化编程

编程中只使用三大结构

不能使用goto语句

1972年美国科学家,发表论文证明所有的程序流程,只需要三大结构完成。

2.为什么要使用结构化编程?

把代码分成一个一个的代码块

极大的提高了代码的可 读性

3.三大结构

A. 循环结构

  • 单线程(一个执行序列)
  • 代码总是执行上一行,再执行下一行
  • 在顺序结构中,要提防不小心产生的空语句
//空语句实例:
public class BanchTest {
    public static void main(String[] args) {
        int i;
        for(i=0;i<5;i++);//这里的分号产生了空语句
        {
        System.out.print(i);
        }
    }
}
//运行结果为:
//5
//正确例子:
public class BanchTest {
    public static void main(String[] args) {
        int i;
        for(i=0;i<5;i++)//注意这里没分号
        {
            System.out.print(i);
        }
    }
}
//运行结果
//01234

一行代码:

  • 在JAVA中分号是行的分隔符。
  • 在J S语言中分号、回车都是行的分隔符
  • 在VB语言中,回车是分隔符

注释:只要回车是分隔符、都需要右续行符

B. 分支结构

  • 单分支结构(if)
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
        int age = 19;
        if(age>=18) {//注意这里的判断题的大括号不要省略,除非执行体和判别式在同一行
            System.out.println("成年");
        }
    }
}
  • 双分支结构(if...else..)
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
        int age = 1;
        if(age>=18) {//符合判别表达式执行体
            System.out.println("成年");
        }else {//不复合判别表达式执行体
            System.out.println("未成年");
        }
    }
}
  • 多分支结构

a.多选一的结构(多个分支结构、只有一个被执行)

使用else if 比单分支满足条件的做法,有更高的效率,所有的分支,同时只会执行一个

package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
        int age = 37;
        if(age<6) {
            System.out.println("幼儿");
        }
        else if(age<18) {
            System.out.println("少年");
        }
        else if(age<60) {
            System.out.println("成年");
        }
        else {
            System.out.println("老年人");
        }
    }
}

b.多选多的结构 (多个分支结构、有多个被同时执行)(switch)

  • 格式:switch(key) 其中key支持的类型有:

1. int类型

2.可以自动升级为int的类型(byte、short、char、Integer)

3. enum(枚举类型)

4.在JDK8之后还支持string类型

  • 在没有break时会全部被执行
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
        int key=1;
        switch(key) {
        case 1:
            //这个条件下执行的部分
            System.out.println("成绩优秀");
        case 2:
            System.out.println("成绩良好");
        case 3:
            System.out.println("成绩一般");
        default:
            //default等同于else,在switch中用default
            System.out.println("成绩不良");
        }
    }

/*运行结果为:
成绩优秀
成绩良好
成绩一般
成绩不良*/

package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
        int key=2;
        switch(key) {
        case 1:
            //这个条件下执行的部分
            System.out.println("成绩优秀");
        case 2:
            System.out.println("成绩良好");
        case 3:
            System.out.println("成绩一般");
        default:
            //default等同于else,在switch中用default
            System.out.println("成绩不良");
        }
    }
}

/*key值不同值下的运行结果:
成绩良好
成绩一般
成绩不良
*/

  • 在break之后,选中哪个就执行哪个(有多选一的效果)
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
        int key=1;
        switch(key) {
        case 1:
            //这个条件下执行的部分
            System.out.println("成绩优秀");
            break;//关闭
        case 2:
            System.out.println("成绩良好");
            break;
        case 3:
            System.out.println("成绩一般");
            break;
        default:
            //default等同于else,在switch中用default
            System.out.println("成绩不良");
        }
    }
}
  • 跑穿(没有加break时,可以进入多个分支),只要以上条件都满足时,我都执行
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
        int key=2;
        switch(key) {
        case 1:
            //这个条件下执行的部分
            System.out.println("成绩优秀");
        case 2:
            System.out.println("成绩良好");
        case 3:
            System.out.println("成绩一般");
        default:
            //default等同于else,在switch中用default
            System.out.println("成绩不良");
            System.out.println("继续加油");//满足上面的四个条件,不管key的值是多少,此代码都执行。
        }
    }
}

注释:设计跑穿就是为了支持多对多的关系。

C.重复结构

  • do while(until)
  • 先执行循环,再判别。
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
    int i = 0;
    int count=5;
            do {
                System.out.println(i);
                i++;//循环变量自加
            }
            while(i<count);
    }
}
  • while
  • 先判别,再执行循环
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
    int i = 0;
    int count=5;
            while(i<count) {
                System.out.println(i);
                i++;//循环变量自加
            }
    }
}

注释:while循环要比do..while循环好多了,因为while循环的可读性要比后者好太多。

  • for
  • (continue )跳出本次循环
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
    int count=5;
    for (int i = 0; i < count; i++) {
        if(i==3)continue;//跳出本次循环,跳到右边距离最近的}的左边
        System.out.print(i);
    }
    }
}
/*运行结果
0124
*/
  • (break)跳出本层循环
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
    int count=5;
    for (int i = 0; i < count; i++) {
        if(i==3) break;//跳出本次循环,跳到右边距离最近的}的右边
        System.out.print(i);
    }
    }
}
/*运行结果
012
*/
  • (return) 跳出函数
package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        test1();
    }
    private static void test1() {
    int count=5;
    for (int i = 0; i < count; i++) {
        if(i==3) return;//跳出本函数
        System.out.print(i);
    }
    }
}
/*运行结果
012
*/
  • forEach(遍历集合)
  • for循环和while循环的区别:
  • for循环。定长循环,依靠固定循环次数作为结束条件。
  • while循环。标志性循环,依靠标志来结束循环(文件是否读到最后一行,用户的输入是否结束)。

4.函数(在JAVA中叫方法)

面向对象的语言叫方法

面向过程的语言叫函数

在JAVA中没有函数这么一说,只有方法一说。实际上方法就是函数,函数就是方法,只是在不同的语言不同的称呼而已。有class声明的就是类。类就是对一类事物的声明,在JAVA中函数就是方法,就是后面带有()的。类只是声明,对象才是真实存在的可以干活的东西,所有的方法(也就是函数)都需要用对象去调用(不包括静态的static)

  • 什么是函数(函数,子程序,过程)

函数是一段可以复用的子程序。

函数(function):有返回值(在C语言中void表示没有返回值)

过程(procedure):无返回值

  • 为什么要使用函数

代码的复用,提高了效率

  • 什么时候写一个函数
  • 复用

在写某个代码时,发现这个代码似曾相识(写过)

  • 分割逻辑

不应该超过50行

一个方法最好只能有一个功能(单一功能原则)

功能简单更加利于复用

  • 函数的定义

    • 函数定义的区域:类体以内,方法以外。
    • 一模一样(同名同参)的函数只能调用一次
    • 方法定义有7个组成要素:
public static void main (String[] args) throws Exception {
​
}

1.权限修饰符 public

2.static/final/abatract

3.返回类型 void

4.方法(函数)名称 main

5.形式参数列表 (String[] args)

6.异常列表 throws Exception

7.{ } 方法体

注释:3 4 5 是必须的

//两个例子
void test1 (){}
abstaract void test1();//抽象方法
  • 函数如何返回返回值

    • 只要函数声明一个不是void返回类型,所有分支必然需要一个返回值。
    • 返回值通过return语句进行返回的,而且数据类型必须和方法声明的返回类型匹配。
  • 函数 的调用
    • 如何调用一个方法

1.可以多次调用

package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        new BanchTest().test1();
}
        void test1 (){
            test2();
            test2();
            test2();
        }
        void test2() {
            System.out.println("JAVA使我快乐");
        }
    }

2.至少在现在的时候方法(函数)的实参(调用的时候叫实参)和形参(定义的时候叫形参)必须一致

package com.kfm.leiyawen.Test0831;
public class BanchTest {
    public static void main(String[] args) {
        new BanchTest().test1();
}
        void test1 (){
            test2(1);//括号里面的是实参
            test2(2);
            test2(3);
        }
        void test2(int order) {//函数定义时叫形参
            System.out.println("JAVA使我快乐"+order);
        }
    }

运行结果
/*
JAVA使我快乐1
JAVA使我快乐2
JAVA使我快乐3
*/

  • 函数可以直接或间接的调用自己

递归

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 新手初学Java网络编程

    目录 运行线程 回调 同步方法 同步块 死锁 优先级 暂停 可以对IO阻塞 可以对同步对象阻塞 可以放弃 可以休眠 可以连接另一个线程 可以等待一个对象 可以结束 可以被更高优先级线程抢占 总结 运行线程 创建Thread的子类 public class ThreadChild extends Thread { @Override public void run() { while (true) { System.out.println("run"); } } } public cla

  • Java之网络编程案例讲解

    Java基础之网络编程 基本概念 IP:每个电脑都有一个IP地址,在局域网内IP地址是可变的. 网络通信协议:通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信.这就好比在道路中行驶的汽车一定要遵守交通规则一样,协议中对数据的传输格 式.传输速率.传输步骤等做了统一规定,通信双方必须同时遵守,最终完成数据交换. TCP协议(传输控制协议):是面向连接的传输层协议,应用程序在使用TCP之前,必须先建立TCP连接,在传输数据完毕后,必须释放已经建立的连接(跟打电话是否类似).

  • 一篇文章带你入门java网络编程

    目录 基于TCP/IP协议的通信 基于UDP协议的通信 InetAddress 案例演示 (简易聊天室) UDP 演示 总结 基于TCP/IP协议的通信 TCP/IP协议 TCP/IP协议.会在通信两端建立连接(虚拟连接),用于发送和接收数据 TCP/IP协议是一种可靠的网络协议,它通过重发机制来保证这种可靠性 通信的实现 ServerSocket用来监听来自客户端的连接,当没有连接时,它处于阻塞状态 客户端使用Socket连接到指定的服务器 基于UDP协议的通信 UDP协议 UDP协议不会在通

  • Java网络编程基础详解

    目录 网络编程 1.1 概述 1.2.网络通信的要素 1.网络编程中有两个主要的问题 2.网络编程中的三要素 1.3.IP 1.4.端口 1.5.通信协议 UDP协议 TCP协议 1.6.TCP模拟通信 客户端 服务器 文件上传 1.7.UDP 1.8.URL 实例: 总结 网络编程 1.1 概述 1.2.网络通信的要素 如何实现网络通信? 1.网络编程中有两个主要的问题 如何定位到网络上的一台或者多台主机 使用cmd-->ping命令,ping一个域名,可以看到访问的主机的IP地址 [外链图片

  • java中lambda(函数式编程)一行解决foreach循环问题

    java lambda(函数式编程)一行解决foreach循环 首先给大家推荐<精通lambda表达式:java多核编程> 这本书详细介绍了lambda表达式从入门到理解.应用 下面介绍用以前的循环方式进行对比,来更加清晰地java函数式编程中foreach的用法 一.以前我们使用的for循环 /** * for循环 */ @Test public void forTest() { // 实例化一个List List<Point> points = Arrays.asList(ne

  • 一篇文章带你了解JAVA结构化编程详情

    目录 1.什么是结构化编程 2.为什么要使用结构化编程? 3.三大结构 A. 循环结构 一行代码: B. 分支结构 C.重复结构 4.函数(在JAVA中叫方法) 总结 1.什么是结构化编程 编程中只使用三大结构 不能使用goto语句 1972年美国科学家,发表论文证明所有的程序流程,只需要三大结构完成. 2.为什么要使用结构化编程? 把代码分成一个一个的代码块 极大的提高了代码的可 读性 3.三大结构 A. 循环结构 单线程(一个执行序列) 代码总是执行上一行,再执行下一行 在顺序结构中,要提防

  • 一篇文章带你了解Java Spring基础与IOC

    目录 About Spring About IOC Hello Spring Hello.java Beans.xml Test.java IOC创建对象的几种方式 Spring import settings Dependency Injection 1.构造器注入 2.set注入 3.拓展注入 P-namespcae&C-namespace Bean scopes singleton prototype Bean的自动装配 byName autowire byType autowire 小结

  • 一篇文章带你了解Java中ThreadPool线程池

    目录 ThreadPool 线程池的优势 线程池的特点 1 线程池的方法 (1) newFixedThreadPool (2) newSingleThreadExecutor (3) newScheduledThreadPool (4) newCachedThreadPool 2 线程池底层原理 3 线程池策略及分析 拒绝策略 如何设置maximumPoolSize大小 ThreadPool 线程池的优势 线程池做的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些

  • 一篇文章带你了解Java容器,面板及四大布局管理器应用

    目录 什么是容器? 什么是面板? JPanel面板 JScrollPane面板 什么是布局管理器? 绝对布局管理器 流布局管理器 边界布局管理 网格布局管理器 容器.面板.布局管理器之间的关系 总结 什么是容器? 在Java的GUI界面设计中,关于容器的理解,从字面意思我们就可以认为它是存放控件的地方,而这个地方依托在窗体之上,常用的容器是container. 而关于container容器我们应该有这样的认识:Swing组件中的窗体通常是与容器相关联的,所以在一般情况下,建立完JFrame窗体后

  • 一篇文章带你入门java面向对象

    目录 一.继承 示例: 二.重载 三.接口 1.接口与类相似点: 2.接口与类的区别: 3.语法 四.枚举 1.定义 2.迭代枚举元素 3.在 switch 中使用枚举类 总结 一.继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为 本章就以人.学生.老师作为例子.学生和老师都继承人这个对象,都有人的特征和行为,人就是父类,老师和学生就是子类 示例: 人类: package com.zhouzy.base.t7;

  • 一篇文章带你入门Java修饰符

    目录 定义 分类 访问控制修饰符 非访问控制修饰符 修饰符的使用说明 修饰类 修饰方法 访问控制修饰符 非访问控制修饰符 修饰变量 总结 定义 Java修饰符:修饰符用来定义类.方法或者变量,通常放在语句的最前端. 分类 主要分为2类: 访问控制修饰符 非访问控制修饰符 访问控制修饰符 可以使用访问控制符来保护对类.变量.方法和构造方法的访问.分为以下4中权限:private,default,protected,public. 权限说明: 修饰符 当前类 同包 子类(不同包) 不同包(其他类)

  • 一篇文章带你了解JAVA面对对象之继承与修饰符

    目录 Java面向对象之继承与修饰符 继承 1.含义 2.实现 3.好处 4.短处 5.成员变量的访问特点 7.继承中结构方法的访问特点 8.方法重写 9.java继承的注意事项 修饰符 1.package 2.import 3.权限修饰符 4.final 5.ianl修饰基本数据类型变量 6.final修饰引用数据类型变量 7.static 8.static访问的特点 总结 Java面向对象之继承与修饰符 继承 1.含义 继承是面向对象三大特征之一,能使子类具有父类的属性和方法,还可以在子类中

  • 一篇文章带你了解Java之关键字和保留字

    目录 引言 概念 关键字分类 1.访问控制 2.类.方法和变量修饰符 3.程序控制语句 4.错误处理 5包相关 6.基本类型 7.变量引用 8.保留关键字 9.其他(个人认为不是关键字.也不是保留字,但是,如果尝试将它们用作Java中的标识符,仍然会生成编译时错误.) 总结 引言 ♀ 小AD:小明哥,前几天边学Java边学连招,我感觉上分如喝水,我这连招很熟练哦. ♂ 明世隐:跟明哥混,舒服吧! ♀ 小AD:舒服啊,回头请你喝奶茶! ♂ 明世隐:乖,懂事! ♀ 小AD:那今天整点啥? ♂ 明世隐

  • 一篇文章带你入门Java字面量和常量

    目录 引言 概念 字面量 字面量的分类 常量 总结 引言 ♀ 小AD:哥,前两天我没有闪现到刺客脸上了吧 ♂ 明世隐:在这方面做的有进步. ♀ 小AD:明哥教的好,通过学习Java关键字,游戏水平也得到了提升,一举两得,舒服. ♂ 明世隐:可是你看到残血还是上头啊,是了多少次,你说? ♀ 小AD:5.6次吧 ♂ 明世隐:岂止5.6,起码10次. ♀ 小AD:这不是看到200金币,经不住诱惑吗 ♂ 明世隐:关爱残血,你学哪里去了,游戏中就不能多一些人间的关爱吗?你就不能关爱一下放暑假的小弟弟小妹妹

  • 一篇文章带你了解java数据库连接

    目录 一.下载安装mysql 二.引入驱动包 三.示例 1.引驱动包 2.建表 3.添加数据 4.代码连接 结果: 总结 一.下载安装mysql 下载地址:https://dev.mysql.com/downloads/connector/j/ 可以选择对应的版本下载,最新的是8.0版本,本章使用的是5.0版本 二.引入驱动包 驱动包下载:mysql-connector-java-5.1.39-bin.jar MySQL 8.0 以上版本的数据库连接有所不同: 1.MySQL 8.0 以上版本驱

随机推荐