idea 調試java技巧_IDEA 調試Java代碼的兩個技巧

本文介紹兩個使用IDEA 調試Java代碼的兩個技巧:

修改變量值

使用RuntimeException終止代碼執行

修改變量值

在Java代碼調試過程中,我們可以修改變量值,使其達到走指定分支的目的,或者使其滿足某個條件。我們以給變量beanName賦值為例,說明如何修改變量值。示例代碼如下:

public static void main(String[] args) {

String beanName = "矩形畫圖工具";

System.out.println("第一次打印:" + beanName);

System.out.println("第二次打印:" + beanName);//①

System.out.println("do something");

}

在①所在行打斷點后以debug模式運行main函數,進入變量視圖Variables,然后選擇變量beanName,再右鍵單擊變量選中Set Value(見圖1),就可以在變量視圖頁面根據變量類型修改變量值,我這里輸入“我是Wiener”,覆蓋其原始值“矩形畫圖工具”(見圖2)。

c16c336b31ce2ac8600ce9dda723539d.png

圖1

71192563b232860f50715177ac6d79d6.png

圖2

放開斷點后,控制臺打印結果如下,說明變量值被成功修改。

第一次打印:矩形畫圖工具

第二次打印:我是Wiener

do something

使用RuntimeException終止代碼執行

使用RuntimeException調試代碼的一個好處就是不產生臟數據,另一個好處是盡量少的改變代碼,不影響調用者代碼。對上述測試代碼稍加改造,加入一個RuntimeException異常:

public static void main(String[] args) {

String beanName = "矩形畫圖工具";

System.out.println("第一次打印:" + beanName);

if (true) {

throw new RuntimeException("測試,終止代碼 --------------");

}

System.out.println("第二次打印:" + beanName);

System.out.println("do something");

}

控制臺打印結果如下:

第一次打印:矩形畫圖工具

Exception in thread "main" java.lang.RuntimeException: 測試,終止代碼 --------------

at com.eg.wiener.controller.UserController.main(UserController.java:68)

由此可見,在拋出RuntimeException異常后,其后面的業務邏輯不再執行;如果在事務中拋出,則整個事務被回滾。這對于調試涉及大量保存和更新操作的代碼非常有用,允許你反復執行,并且數據庫中不產生臟數據。例如客戶下單過程中,要查詢客戶是否付款,付款后才把訂單狀態改為已支付,然后告知客戶出單成功,并通知倉庫發貨;假如在下單過程中拋出了一個莫名其妙的異常,那么,我們就可以在代碼中根據調試結果,在多個地方從前向后放入RuntimeException,直到定位到異常根源。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530315.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530315.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530315.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java 10進制轉 000x_java 如何把 00 轉換成 0x00 或者 10 轉換成 0x10

public static void main(String[] args) {String s "00000018A0010098C68E00989A690000000000BC614E000055AA55AA";System.out.println(s);byte[] b HexString2Bytes(s);System.out.println(Bytes2HexString(b));}/*** 將指定byte數組以16進制的形式打印到控制臺*…

java免檢異常_java-異常

java提供了異常處理機制:程序運行受阻時候的處理方式。1、異常分類Error:系統錯誤,由java虛擬機拋出,很少發生;免檢異常RuntimeException:程序設計錯誤,通常由java虛擬機拋出;免檢異…

java編程需要數學知識嗎_初學Java編程,需要英語和數學基礎嗎?

原標題:初學Java編程,需要英語和數學基礎嗎?“學習Java編程英語和數學是必備條件嗎?”很多Java零基礎學習或者轉型IT行業的都會有這樣的疑問,其實剛開始學習Java編程是不需要太高深的數學和英語基礎的。剛開始學習Java…

java map put報錯_java 集合(Map)

-------------------|Map 儲存的數據都是以鍵值對的形式,鍵不可重復,值可重復。----------------------------| HashMap----------------------------| TreeMap----------------------------| HashTableMap接口的方法:添加:put(K…

java簡單數據結構_圖解Java常用數據結構

最近在整理數據結構方面的知識, 系統化看了下 Java 中常用數據結構, 突發奇想用動畫來繪制數據流轉過程.主要基于 jdk8, 可能會有些特性與 jdk7 之前不相同, 例如 LinkedList LinkedHashMap 中的雙向列表不再是回環的.HashMap 中的單鏈表是尾插, 而不是頭插入等等, 后文不再贅敘…

jest java_?使用jest進行測試驅動開發

前言本文將使用jest進行測試驅動開發的示例,源碼在github。重點說明在開發中引入單元測試后開發過程,以及測試先行的開發思路。本文的重點是過程以及思維方法,框架以及用法不是重點。本文使用的編程語言是javascript,思路對其他語…

mysql sqlstate 08001_關于Toad連接DB2的sqlstate=08001錯誤

新裝的centos6.3db29.7,數據庫導入完了的之后用Toad連接訪問之的時候出錯了。DB2 Database Error: ERROR [08001] [IBM] SQL30081N A communication error has been detected. Communication protocol being used: "TCP/IP". Communication API being use…

mysql 設置主鍵命令_MySQL常用命令

1、修改MySQL密碼方法一:use mysql;update user set passwordPASSWORD(“123456”) where user‘root’;flush privileges;忘記密碼:sed -ri 3d skip-grant-tables /etc/my.cnfsystemctl restart mariadbuse mysql&…

python 整除的數組_計算和可被整除的所有子數組

在我學習面試的時候,我在GeeksForGeeks上找到了這個問題和解決方案,但不明白答案。在上面說的是Let there be a subarray (i, j) whose sum is divisible by ksum(i, j) sum(0, j) - sum(0, i-1)Sum for any subarray can be written as q*k rem where…

java ha_java – Haproxy Bad Gateway 502

所以我在Jetty servlet面前使用HAProxy.目前的目標只是在配置完所有內容后進行概念驗證,加載和壓力測試.但是我在配置haproxy時遇到問題.我知道這不是我的應用程序的問題,因為我有運行nginx(tengine),一切正常.所以它必須與haproxy配置或haproxy工作的方式不適合我的需要.所以我…

java ioutils_java – 無法解析符號’IOUtils’

我使用以下代碼在我的Android應用程序中創建一個臨時文件:public File streamToFile (InputStream in) throws IOException {File tempFile File.createTempFile("sample", ".tmp");tempFile.deleteOnExit();FileOutputStream out new FileOu…

java const關鍵字_const關鍵字:終于擁有真正的常量聲明語句

你好,今天大叔想和你嘮扯嘮扯 ES6 新增的關鍵字 —— const。在說 const 關鍵字之前,大叔先和你嘮嘮大叔自己對 const 的感受 —— JavaScript 尼瑪終于可以聲明真正的常量啦!大叔為啥會發出這樣滴感嘆?實在是“天下苦秦久矣”呀~…

workerman高并發異步mysql_workerman怎么實現高并發

并發概念太模糊,這里以兩種可以量化的指標并發連接數和并發請求數來說明。并發連接數是指服務器當前時刻一共維持了多少TCP連接,而這些連接上是否有數據通訊并不關注。 (推薦學習: workerman教程)例如一臺消息推送服務器上可能維持了百萬的設…

checkout 撤銷修改_Git的4個階段的撤銷更改

雖然git誕生距今已有12年之久,網上各種關于git的介紹文章數不勝數,但是依然有很多人(包括我自己在內)對于它的功能不能完全掌握。以下的介紹只是基于我個人對于git的理解,并且可能生編硬造了一些不完全符合git說法的詞語。目的只是為了讓git通…

移除Java對象中的屬性_在java對象中添加和刪除屬性

我怎樣才能在 java中實現這一點.我有一個具有屬性的對象.public class Object {private final Credentials Credentials;private final int PageSize;private final int PageStart;private final int DefaultFilterId;public Object(Credentials Credentials, int PageSize, in…

java軟件開發ea介紹_開發說明 — Eacloud 1.0 documentation

PHP 代碼示例( Linux 版)解壓后,參考 phplinux/v3.4.0.1/文檔/PHP版服務器端工具包(Linux版)軟件使用手冊.pdfDemo 運行1.安裝對應版本的 PHP2.安裝運行時環境(glibc 庫等)3.修改 PHP 的配置文件 php.ini修改 php.ini,使 php 允許加載擴展,并…

java中operationBox_Java使用PDFBox開發包實現對PDF文檔內容編輯與保存

pdfbox開發包下載地址:http://pdfbox.apache.org/程序實現了PDF文檔的創建,讀入,與修改PDF內容并保存。可能有個前提,PDF文檔不是加密的,如果加密怎么辦,我沒研究過!源代碼如下:pack…

java訪問權限最高_java 訪問權限

Java語言中的訪問權限修飾符有4種,但是僅有3個關鍵字,因為不寫訪問權限,在Java中被稱為默認權限,或同包權限,本文中以(default)代替。下面按照權限從小到大的順序對4中訪問權限分別介紹。class我個人,我有很…

java中 queryparam_java – 何時使用@QueryParam和@PathParam

我不是問這里已經問過的問題:What is the difference between PathParam and QueryParam這是一個“最佳實踐”或常規問題。什么時候使用PathParam和QueryParam。我可以想到的是,決定可能使用兩者來區分信息模式。讓我在下面說明我的LTPO – 不完美的觀察…

java中fork函數_java中的forkjoin框架的使用

fork join框架是java 7中引入框架,這個框架的引入主要是為了提升并行計算的能力。fork join主要有兩個步驟,第一就是fork,將一個大任務分成很多個小任務,第二就是join,將第一個任務的結果join起來,生成最后…