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

