一篇文章帶你了解JAVA結(jié)構(gòu)化編程詳情
1.什么是結(jié)構(gòu)化編程
編程中只使用三大結(jié)構(gòu)
不能使用goto語句
1972年美國科學家,發(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) {//符合判別表達式執(zhí)行體 System.out.println("成年"); }else {//不復合判別表達式執(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í)行。 } } }
注釋:設計跑穿就是為了支持多對多的關(guān)系。
C.重復結(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)。標志性循環(huán),依靠標志來結(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ù)是一段可以復用的子程序。
函數(shù)(function):有返回值(在C語言中void表示沒有返回值)
過程(procedure):無返回值
- 為什么要使用函數(shù)
代碼的復用,提高了效率
- 什么時候?qū)懸粋€函數(shù)
- 復用
在寫某個代碼時,發(fā)現(xiàn)這個代碼似曾相識(寫過)
- 分割邏輯
不應該超過50行
一個方法最好只能有一個功能(單一功能原則)
功能簡單更加利于復用
- 函數(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)文章
SpringBoot實現(xiàn)無限級評論回復的項目實踐
本文主要介紹了SpringBoot實現(xiàn)無限級評論回復的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03SpringBoot中實現(xiàn)數(shù)據(jù)字典的示例代碼
這篇文章主要介紹了SpringBoot中實現(xiàn)數(shù)據(jù)字典的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09老生常談Java?網(wǎng)絡編程?——?Socket?詳解
這篇文章主要介紹了Java?網(wǎng)絡編程?——?Socket?相關(guān)知識,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05SpringBoot實現(xiàn)RabbitMQ三種使用方式
本文主要介紹了SpringBoot實現(xiàn)RabbitMQ三種使用方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07SpringBoot項目整合MybatisPlus并使用SQLite作為數(shù)據(jù)庫的過程
SQLite是一個緊湊的庫,啟用所有功能后,庫大小可以小于 750KiB, 具體取決于目標平臺和編譯器優(yōu)化設置, 內(nèi)存使用量和速度之間需要權(quán)衡,這篇文章主要介紹了SpringBoot項目整合MybatisPlus并使用SQLite作為數(shù)據(jù)庫,需要的朋友可以參考下2024-07-07Spring的自定義擴展標簽NamespaceHandler解析
這篇文章主要介紹了Spring的自定義擴展標簽NamespaceHandler解析,在很多情況下,我們需要為系統(tǒng)提供可配置化支持,簡單的做法可以直接基于Spring的標準Bean來配置,Spring提供了可擴展Schema的支持,這是一個不錯的折中方案,需要的朋友可以參考下2023-12-12