一篇文章帶你了解JAVA結(jié)構(gòu)化編程詳情
1.什么是結(jié)構(gòu)化編程
編程中只使用三大結(jié)構(gòu)
不能使用goto語句
1972年美國科學(xué)家,發(fā)表論文證明所有的程序流程,只需要三大結(jié)構(gòu)完成。
2.為什么要使用結(jié)構(gòu)化編程?
把代碼分成一個一個的代碼塊
極大的提高了代碼的可 讀性
3.三大結(jié)構(gòu)
A. 循環(huán)結(jié)構(gòu)
- 單線程(一個執(zhí)行序列)
- 代碼總是執(zhí)行上一行,再執(zhí)行下一行
- 在順序結(jié)構(gòu)中,要提防不小心產(chǎn)生的空語句
//空語句實例:
public class BanchTest {
public static void main(String[] args) {
int i;
for(i=0;i<5;i++);//這里的分號產(chǎn)生了空語句
{
System.out.print(i);
}
}
}
//運行結(jié)果為:
//5
//正確例子:
public class BanchTest {
public static void main(String[] args) {
int i;
for(i=0;i<5;i++)//注意這里沒分號
{
System.out.print(i);
}
}
}
//運行結(jié)果
//01234
一行代碼:
- 在JAVA中分號是行的分隔符。
- 在J S語言中分號、回車都是行的分隔符
- 在VB語言中,回車是分隔符
注釋:只要回車是分隔符、都需要右續(xù)行符
B. 分支結(jié)構(gòu)
- 單分支結(jié)構(gòu)(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) {//注意這里的判斷題的大括號不要省略,除非執(zhí)行體和判別式在同一行
System.out.println("成年");
}
}
}
- 雙分支結(jié)構(gòu)(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) {//符合判別表達(dá)式執(zhí)行體
System.out.println("成年");
}else {//不復(fù)合判別表達(dá)式執(zhí)行體
System.out.println("未成年");
}
}
}
- 多分支結(jié)構(gòu)
a.多選一的結(jié)構(gòu)(多個分支結(jié)構(gòu)、只有一個被執(zhí)行)
使用else if 比單分支滿足條件的做法,有更高的效率,所有的分支,同時只會執(zhí)行一個
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.多選多的結(jié)構(gòu) (多個分支結(jié)構(gòu)、有多個被同時執(zhí)行)(switch)
- 格式:switch(key) 其中key支持的類型有:
1. int類型
2.可以自動升級為int的類型(byte、short、char、Integer)
3. enum(枚舉類型)
4.在JDK8之后還支持string類型
- 在沒有break時會全部被執(zhí)行
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:
//這個條件下執(zhí)行的部分
System.out.println("成績優(yōu)秀");
case 2:
System.out.println("成績良好");
case 3:
System.out.println("成績一般");
default:
//default等同于else,在switch中用default
System.out.println("成績不良");
}
}
/*運行結(jié)果為:
成績優(yōu)秀
成績良好
成績一般
成績不良*/
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:
//這個條件下執(zhí)行的部分
System.out.println("成績優(yōu)秀");
case 2:
System.out.println("成績良好");
case 3:
System.out.println("成績一般");
default:
//default等同于else,在switch中用default
System.out.println("成績不良");
}
}
}
/*key值不同值下的運行結(jié)果:
成績良好
成績一般
成績不良
*/
- 在break之后,選中哪個就執(zhí)行哪個(有多選一的效果)
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:
//這個條件下執(zhí)行的部分
System.out.println("成績優(yōu)秀");
break;//關(guān)閉
case 2:
System.out.println("成績良好");
break;
case 3:
System.out.println("成績一般");
break;
default:
//default等同于else,在switch中用default
System.out.println("成績不良");
}
}
}
- 跑穿(沒有加break時,可以進入多個分支),只要以上條件都滿足時,我都執(zhí)行
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:
//這個條件下執(zhí)行的部分
System.out.println("成績優(yōu)秀");
case 2:
System.out.println("成績良好");
case 3:
System.out.println("成績一般");
default:
//default等同于else,在switch中用default
System.out.println("成績不良");
System.out.println("繼續(xù)加油");//滿足上面的四個條件,不管key的值是多少,此代碼都執(zhí)行。
}
}
}
注釋:設(shè)計跑穿就是為了支持多對多的關(guān)系。
C.重復(fù)結(jié)構(gòu)
- do while(until)
- 先執(zhí)行循環(huán),再判別。
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++;//循環(huán)變量自加
}
while(i<count);
}
}
- while
- 先判別,再執(zhí)行循環(huán)
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++;//循環(huán)變量自加
}
}
}
注釋:while循環(huán)要比do..while循環(huán)好多了,因為while循環(huán)的可讀性要比后者好太多。
- for
- (continue )跳出本次循環(huán)
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;//跳出本次循環(huán),跳到右邊距離最近的}的左邊
System.out.print(i);
}
}
}
/*運行結(jié)果
0124
*/
- (break)跳出本層循環(huán)
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;//跳出本次循環(huán),跳到右邊距離最近的}的右邊
System.out.print(i);
}
}
}
/*運行結(jié)果
012
*/
- (return) 跳出函數(shù)
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;//跳出本函數(shù)
System.out.print(i);
}
}
}
/*運行結(jié)果
012
*/
- forEach(遍歷集合)
- for循環(huán)和while循環(huán)的區(qū)別:
- for循環(huán)。定長循環(huán),依靠固定循環(huán)次數(shù)作為結(jié)束條件。
- while循環(huán)。標(biāo)志性循環(huán),依靠標(biāo)志來結(jié)束循環(huán)(文件是否讀到最后一行,用戶的輸入是否結(jié)束)。
4.函數(shù)(在JAVA中叫方法)
面向?qū)ο蟮恼Z言叫方法
面向過程的語言叫函數(shù)
在JAVA中沒有函數(shù)這么一說,只有方法一說。實際上方法就是函數(shù),函數(shù)就是方法,只是在不同的語言不同的稱呼而已。有class聲明的就是類。類就是對一類事物的聲明,在JAVA中函數(shù)就是方法,就是后面帶有()的。類只是聲明,對象才是真實存在的可以干活的東西,所有的方法(也就是函數(shù))都需要用對象去調(diào)用(不包括靜態(tài)的static)
- 什么是函數(shù)(函數(shù),子程序,過程)
函數(shù)是一段可以復(fù)用的子程序。
函數(shù)(function):有返回值(在C語言中void表示沒有返回值)
過程(procedure):無返回值
- 為什么要使用函數(shù)
代碼的復(fù)用,提高了效率
- 什么時候?qū)懸粋€函數(shù)
- 復(fù)用
在寫某個代碼時,發(fā)現(xiàn)這個代碼似曾相識(寫過)
- 分割邏輯
不應(yīng)該超過50行
一個方法最好只能有一個功能(單一功能原則)
功能簡單更加利于復(fù)用
- 函數(shù)的定義
- 函數(shù)定義的區(qū)域:類體以內(nèi),方法以外。
- 一模一樣(同名同參)的函數(shù)只能調(diào)用一次
- 方法定義有7個組成要素:
public static void main (String[] args) throws Exception {
}
1.權(quán)限修飾符 public
2.static/final/abatract
3.返回類型 void
4.方法(函數(shù))名稱 main
5.形式參數(shù)列表 (String[] args)
6.異常列表 throws Exception
7.{ } 方法體
注釋:3 4 5 是必須的
//兩個例子
void test1 (){}
abstaract void test1();//抽象方法
- 函數(shù)如何返回返回值
- 只要函數(shù)聲明一個不是void返回類型,所有分支必然需要一個返回值。
- 返回值通過return語句進行返回的,而且數(shù)據(jù)類型必須和方法聲明的返回類型匹配。
- 函數(shù) 的調(diào)用
- 如何調(diào)用一個方法
1.可以多次調(diào)用
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.至少在現(xiàn)在的時候方法(函數(shù))的實參(調(diào)用的時候叫實參)和形參(定義的時候叫形參)必須一致
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) {//函數(shù)定義時叫形參
System.out.println("JAVA使我快樂"+order);
}
}
運行結(jié)果
/*
JAVA使我快樂1
JAVA使我快樂2
JAVA使我快樂3
*/
- 函數(shù)可以直接或間接的調(diào)用自己
遞歸
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
如何利用JAVA正則表達(dá)式輕松替換JSON中的大字段
這篇文章主要給大家介紹了關(guān)于如何利用JAVA正則表達(dá)式輕松替換JSON中大字段的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
SpringBoot實現(xiàn)無限級評論回復(fù)的項目實踐
本文主要介紹了SpringBoot實現(xiàn)無限級評論回復(fù)的項目實踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
SpringBoot中實現(xiàn)數(shù)據(jù)字典的示例代碼
這篇文章主要介紹了SpringBoot中實現(xiàn)數(shù)據(jù)字典的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
老生常談Java?網(wǎng)絡(luò)編程?——?Socket?詳解
這篇文章主要介紹了Java?網(wǎng)絡(luò)編程?——?Socket?相關(guān)知識,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05
SpringBoot實現(xiàn)RabbitMQ三種使用方式
本文主要介紹了SpringBoot實現(xiàn)RabbitMQ三種使用方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
SpringBoot項目整合MybatisPlus并使用SQLite作為數(shù)據(jù)庫的過程
SQLite是一個緊湊的庫,啟用所有功能后,庫大小可以小于 750KiB, 具體取決于目標(biāo)平臺和編譯器優(yōu)化設(shè)置, 內(nèi)存使用量和速度之間需要權(quán)衡,這篇文章主要介紹了SpringBoot項目整合MybatisPlus并使用SQLite作為數(shù)據(jù)庫,需要的朋友可以參考下2024-07-07
Spring的自定義擴展標(biāo)簽NamespaceHandler解析
這篇文章主要介紹了Spring的自定義擴展標(biāo)簽NamespaceHandler解析,在很多情況下,我們需要為系統(tǒng)提供可配置化支持,簡單的做法可以直接基于Spring的標(biāo)準(zhǔn)Bean來配置,Spring提供了可擴展Schema的支持,這是一個不錯的折中方案,需要的朋友可以參考下2023-12-12

