一,區塊作用域
首先在深入學習控制結構之前,需要先了解區塊(block)的概念。
區塊:即複合語句,是指由一對大括號括起來的若干條簡單的 Java 語句。塊確定了變數的作用域。一個區塊可以嵌套在另一個區塊中。
public class TestDemo220425 { public static void main(String[] args) { int n = 10; { int k = 20; int n = 20; } } }
在這段程式碼中,我們主函數裡面的括號括起來的部分就是區塊。一個區塊可以嵌套在另一個區塊裡面,但是注意,在Java裡面,不能在嵌套的區塊裡面聲明同名的變量,例如上面程式碼的內部區塊裡面 int n = 20的做法就是錯誤的。這裡要區分C/C 裡面有全域變數遇到同名局部變數的時候會優先使用局部變量,屏蔽全域變量,這在Java裡面是不允許這樣做的(Java無全域變數的概念,這裡只是類比)。
二,順序結構
順序結構比較簡單,依照程式碼書寫的順序一行一行執行。
圖示:
三,分支結構
圖示:
注意:if /else if 之間是一個並列的關係,不像是if else是一個非此即彼的關係,這種叫做多分支的結構。
有關分支結構的幾個注意點:
1,if括號裡面的表達式只能是布林表達式,沒有什麼非0為真,0表示假。
2,Java裡面的程式碼風格我們推薦行尾風格。
3,懸空else問題,也就是說if/else語句最好一定要把括號加上,這樣程式碼可讀性更好,如果不加,當有多個if/else語句時, else一定是與最近的else進行匹配
public class TeseDemo220424 { public static void main(String[] args) { int x = 10; int y = 10; if (x == 10) if (y == 10) System.out.println("aaa"); else //这个else其实匹配的是if(y == 10) System.out.println("bbb"); } }
switch語句問題(重點)
public class TeseDemo220424 { public static void main(String[] args) { int a = 3; switch(a){ default: System.out.println("输入错误!"); break; case 1: System.out.println(1); break; case 2: System.out.println(2); break; } } }
注意:
1,無論default的位置在哪裡,只要沒有匹配到任何一個case,就會直接走default。
2,每一個case語句以及default語句後面的break語句都不能省略,不然就會穿透執行,除非是在特定的情況下,不然break都不能掉。
3,switch結構裡面的關鍵字只有case,break,continue是用在迴圈裡面的,這裡是分支結構,不要混淆。
4,switch括號裡面的資料的類型只能是byte, short, int, char,String, enum類型,然後case後面的常數與switch匹配就行。 (注意不能是long,因為整形都會往int轉,但是long轉int會有精度損失)。
5,case後面的常數值不能夠重複,每一個case就代表一種不同的情況。
6,switch的括號裡面可以放表達式,但不能像if語句一樣,可以放一些較為複雜的表達式。
7,switch語句可以嵌套,但不好看。
四,循環
三大循環:while循環,for循環,do while循環(循環具體的基本定義就不做介紹了,這裡只是點一些要注意的點)
4.1,易錯點
1,循環的幾個部分,循環變數的定義,條件判斷,循環體,循環變數的迭代。一定要注意循環變數的迭代,如果說一個循環變數沒有迭代直至向著跳出循環的方向進行的話,那麼就可能造成死循環了。
2,不要在循環內部對循環變量做手腳,即使你需要使用你的循環變量,用一個臨時的變量來接收它的值,然後再去使用。
3,輕易不要將浮點數當作循環變數。
public class TestDemo220425 { public static void main(String[] args) { for(double x = 0;x != 10;x += 0.1){ System.out.println("haha"); } } }
不出意外的,這段程式碼死循環了,也就是我說的將浮點數當作循環變數。因為0.1在儲存的時候,小數部分是無法用二進制準確表示的,所以我們每次加的都是一個近似值,那麼這裡可能剛好加了之後可能剛好跳過了10,所以循環就一直進行了下去。
4.2,break語句
public class TeseDemo220424 { public static void main(String[] args) { int i = 1; while(i <= 10){ if(i == 2){ break; } System.out.println("hehe"); i++; } } }
程式運行截圖:
break語句的作用是跳出它所在的循環,例如上面當i == 2的時候,就會跳出while循環,所以只會輸出一個hehe。
break的擴展用法:
在Java中,是沒有goto語句的,但是因為設計者認為goto語句思想還是沒有問題的在某些特定的條件下,確實可以起到很好的跳出循環的效果,所以在Java裡面就發明了**帶標籤的break語句,作用是可以達到break到標籤所指定的循環的外部。 (標籤只要是合法的識別碼即可)**
範例:
public class TestDemo220425 { public static void main(String[] args) { label1: while(true){ for(int i = 0;i < 10;i++){ if(i == 3){ break label1; } System.out.println(i); } } System.out.println("已跳出循环!"); } }
程式運行截圖:
可以看到,到我们利用标签后,可以指定跳出到哪里。如果这里只是用break,不用标签的话,那么break就只会跳出里层的for循环,外面的while还是一个死循环,用了标签之后,当i== 3,就可以直接跳出到while循环的外部。
4.3,continue语句
public class TeseDemo220424 { public static void main(String[] args) { int i = 1; while(i <= 10){ if(i == 2){ continue; } System.out.println("hehe"); i++; } } }
程序运行截图:
continue语句的作用是结束本轮循环而开始下一次的循环,如上题,当i == 2,所以就会直接跳过后面的语句,也就是i++不会执行了,导致i一直等于2,所以陷入了死循环。当然如果你这里用for循环就不会这样了,因为i++的执行顺序在前面,continue影响不到
continue扩展用法:
同样的,在continue里面,也是可以使用标签的,可以指定跳到与标签匹配的循环的首部。
示例:
public class TestDemo220425 { public static void main(String[] args) { label1: for(int i = 0;i < 10;i++){ if(i == 3){ continue label1; } System.out.println(i); } }
程序运行截图:
五,输入输出
5.1,输出到控制台
利用%结合上面的转换符就可以进行格式化的输出,当然在进行格式化输出的时候,也可以运用一些标志,比如输出的时候带前缀,带正负号等等…
5.2,从键盘输入
public class TeseDemo220424 { public static void main(String[] args) { Scanner myscanner = new Scanner(System.in); System.out.println("请输入年龄"); int num = myscanner.nextInt(); System.out.println(num); System.out.println("请输入名字"); String str = myscanner.nextLine();//读入一行 System.out.println(str); System.out.println("请输入专业"); String str1 = myscanner.next(); System.out.println(str1);//读入一个字符串,遇到空格停止 } }
这里就是要注意你的输入与你接收的方法要对应,另外就是当你用了nextLine()来接收一行的时候,要注意它前面有不有用输入的方法,因为你的换行会被当成一行读入到nextLine()里面,这里就类似于C语言里面吃掉缓冲区里面的回车是一个道理。
程序运行截图:
扩展,在用键盘进行输入的时候,我们是能够看到我们自己的输入的,但是在某些情况下,比如输入密码,我们一般是不想让人看到的,所以这里可以运用到Console类。(这里只做简要介绍)
Console类:访问与当前Java虚拟机关联的基于字符的控制台设备(如果有的话)的方法,也即使从控制台接收输入的方法。
使用示例:
import java.io.Console; public class TestDemo220425 { public static void main(String[] args) { Console cons = System.console(); String username = cons.readLine("User name: "); char[] passwd = cons.readPassword("Password:"); } }
在IDEA下的运行截图:
❌???怎么直接报空指针异常了,寻思着这里也没用到指针吧,感到十分的不解…????????
后来,度娘告诉我是这样的:在使用IDEA等集成开发环境中,使用Console将全为null,表示Java程序无法获得Console实例,是因为JVM不是在命令行中被调用的,或者输入输出被重定向了。以至于我们只能去控制台下或者linux环境下去运行程序,如下图在控制台下运行:
可以看到在控制台下运行正常,并且我们输入的密码是看不到的(这里真的输入了的哦,只是看不到,中国人不骗中国人的!????)
5.3,循环输入
public class TeseDemo220424 { public static void main(String[] args) { Scanner myscanner1 = new Scanner(System.in); while(myscanner1.hasNextInt()){ int age = myscanner1.nextInt(); } } }
hasNextInt():如果此扫描器输入中的下一个标记可以使用nextInt()
方法将其解释为默认基数中的int值,则返回true。也即是说只有你下一个输入的是int类型的值才能够进入循环。
程序运行截图:
循环输入的时候可以ctrl + D 进行正常退出
六,猜数字游戏
这里主要是介绍Java里面的生成随机数的方法
所在包:Java.util.random
import java.util.Random; public class TeseDemo220424 { public static void main(String[] args) { // 生成随机数 Random random = new Random(); int rannum = random.nextInt(100);//生成[0,100) 的随机数 其他范围可以通过在后面加上数来进行范围改变,默认左边都是从0开始 } }
对于int rannum = random.nextInt();
如果你后面nextInt()中不给值,那么它产生的就是所有有效的整数,包括正数,负数,0
注意:Random random = new Random(2022);
这里在定义随机数对象的时候是可以传参的,因为生成随机数是以时间戳为参考的,所以当你传入一个数后,他就只会以这个数为标准进行时间戳的计算,进而产生的随机数每次都是一样的。
其他方法:
其他方法主要就是Math.random(),这个产生的是0~1之间的小数,左闭右开。当然这个是没有上面那种产生同一个随机数的用法的。
以上是Java邏輯控制怎麼使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

新興技術對Java的平台獨立性既有威脅也有增強。 1)雲計算和容器化技術如Docker增強了Java的平台獨立性,但需要優化以適應不同雲環境。 2)WebAssembly通過GraalVM編譯Java代碼,擴展了其平台獨立性,但需與其他語言競爭性能。

不同JVM實現都能提供平台獨立性,但表現略有不同。 1.OracleHotSpot和OpenJDKJVM在平台獨立性上表現相似,但OpenJDK可能需額外配置。 2.IBMJ9JVM在特定操作系統上表現優化。 3.GraalVM支持多語言,需額外配置。 4.AzulZingJVM需特定平台調整。

平台獨立性通過在多種操作系統上運行同一套代碼,降低開發成本和縮短開發時間。具體表現為:1.減少開發時間,只需維護一套代碼;2.降低維護成本,統一測試流程;3.快速迭代和團隊協作,簡化部署過程。

Java'splatformindependencefacilitatescodereusebyallowingbytecodetorunonanyplatformwithaJVM.1)Developerscanwritecodeonceforconsistentbehavioracrossplatforms.2)Maintenanceisreducedascodedoesn'tneedrewriting.3)Librariesandframeworkscanbesharedacrossproj

要解決Java應用程序中的平台特定問題,可以採取以下步驟:1.使用Java的System類查看系統屬性以了解運行環境。 2.利用File類或java.nio.file包處理文件路徑。 3.根據操作系統條件加載本地庫。 4.使用VisualVM或JProfiler優化跨平台性能。 5.通過Docker容器化確保測試環境與生產環境一致。 6.利用GitHubActions在多個平台上進行自動化測試。這些方法有助於有效地解決Java應用程序中的平台特定問題。

類加載器通過統一的類文件格式、動態加載、雙親委派模型和平台無關的字節碼,確保Java程序在不同平台上的一致性和兼容性,實現平台獨立性。

Java編譯器生成的代碼是平台無關的,但最終執行的代碼是平台特定的。 1.Java源代碼編譯成平台無關的字節碼。 2.JVM將字節碼轉換為特定平台的機器碼,確保跨平台運行但性能可能不同。

多線程在現代編程中重要,因為它能提高程序的響應性和資源利用率,並處理複雜的並發任務。 JVM通過線程映射、調度機制和同步鎖機制,在不同操作系統上確保多線程的一致性和高效性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)