IDEA斷點調試
1、設置斷點
選擇要設置斷點的代碼行,在行號的區域后面單擊左鍵即可。
2、開啟調試會話
點擊Debug按鈕開啟調試。
IDEA下方出現Debug視圖,紅色箭頭指向的是現在調試程序停留的代碼行,方法f2()中程序的第23行。
Frames是程序的方法調用棧區,在這個區域顯示了程序執行到斷點處所調用過的方法,越下面的方法越早被調用。
3、單步調試
3.1、step over
點擊紅色箭頭指向的按鈕,程序向下執行一行,(如果當前行有方法調用,這個方法將被執行完畢返回,然后到下一行)
3.2、step into
點擊紅色箭頭指向的按鈕,程序向下執行一行,如果該行有自定義方法,則進入自定義方法的邏輯(不會進入官方類庫的方法)。
3.3、force step into
該按鈕在調試時能進入任何方法。
3.4、step out
如果在調試的時候,step into / force step into進入了一個方法,並覺得該方法沒有問題,你就可以使用step out跳出該方法,返回該方法被調用處的下一行語句,注意:該方法已執行完畢。
3.5、Drop Frame
點擊該按鈕后,你將返回到當前方法的調用處重新執行,並且所有上下文變量都回到那個時候,只要調用鏈中還有上級方法,可以跳到其中的任何一個方法。
4、高級調試
4.1、跨斷點調試
設置多個斷點開始調試。
想移動到下一個斷點,點擊紅色箭頭指向的按鈕。
4.2、設置變量值
這個功能可以更加快速的跳出循環語句。
4.3、跳到斷點處和跳到光標所在行
糾錯
1、下面關於Java中包的敘述正確的是 ACD
A、在Java中可以使用import語句導入包
B、在Java中可以使用package語句導入包
C、位於同一個包中的類,不需要導入包就可以直接訪問
D、不同的包中可以出現類名相同的類
在Java中package用於定義包,import用於導入包。
2、下列有關抽象類的敘述正確的是 C
A、抽象類中一定含有抽象方法
B、抽象類既能被實例化也能被繼承
C、抽象類的聲明必須包含abstract關鍵字
D、抽象類中不能有構造方法
3、下列關於構造函數的說法正確的是 AB
A、方法名必須與類名相同
B、使用new關鍵字創建對象時,Java虛擬機會自動調用構造函數
C、我們在定義一個類時,必須要聲明至少一個構造函數
D、構造函數中不能使用return語句
一個類默認會存在一個無參的構造函數,所以可以不用聲明;
構造函數中可以使用return語句,但是只能是return;
4、關於繼承,以下說法正確的是 AD
A、Java中只支持單繼承,一個類只能繼承一個類,但是可以有多個子類
B、一個類如果沒有自己寫無參構造方法,那么子類將無法繼承
C、子類可以當父類用,父類不可以當子類用
D、子類重寫父類方法時訪問權限不能更低
在繼承中,父類的構造方法不能繼承,但是子類可以通過super關鍵字進行調用
子類可以當父類用,叫做多態;父類可以當子類用,應該叫向下轉型。
5、下列說法正確的是 ABD
A、實例方法可以直接調用超類的實例方法
B、實例方法可以直接調用超類的類方法
C、實例方法可以直接調用其他類的實例方法
D、實例方法可以直接調用本類的類方法
實例方法調用其他類的實例方法,必須先創建對象,通過對象調用
6、小芳的媽媽每天給她2.5元錢,她都會存起來,但是,每當這一天是存錢的第5天或者5的倍數的話,她都會花去6元錢,請問,經過多少天,小芳才可以存到100元錢。
package org.westos.demo2;
/**
* @author lwj
* @date 2020/5/8 20:36
*/
public class Test {
public static void main(String[] args) {
double sum = 0;
double dayOfMoney = 2.5;
int cost = 6;
int index = 0;
int total = 100;
while (sum < total) {
index++;
sum += dayOfMoney;
if (index % 5 == 0) {
sum -= cost;
}
}
System.out.println(index);
//74
}
}
7、求 s=a+aa+aaa+aaaa+aa...a 的和,其中a是一個數字,例如
2+22+222+2222+2.....2 最大有幾個2由鍵盤錄入得到
例如提示用戶 請輸入你要求和的數字
用戶輸入的是3
請輸入你要的最大的數字個數
用戶輸入的是5
那么就是求 3+33+333+3333+33333 的和。
我的方法(low)
package org.westos.demo2;
import java.util.Scanner;
/**
* @author lwj
* @date 2020/5/8 20:40
*/
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入你要求和的數字:");
int num = sc.nextInt();
System.out.println("請輸入你要的最大數字的個數:");
int length = sc.nextInt();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
sb.append(num);
}
String s = sb.toString();
int max = Integer.parseInt(s);
int add = add(max);
System.out.println(add);
//37035
}
public static int add(int num) {
if (num / 10 == 0) {
return num;
}
return num + add(num / 10);
}
}
//3
//5
//37035
老師的方法(時間復雜度、空間復雜度小)
class Demo2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入你要求和的數字:");
int num = sc.nextInt();
System.out.println("請輸入你要的最大數字的個數:");
int length = sc.nextInt();
//3 + 33 + 333 + 3333 + 33333
int temp = 0;
//代表每個元素
int sum = 0;
for (int i = 0; i < length; i++) {
temp += num;
sum += temp;
num *= 10;
}
System.out.println(sum);
//37035
}
}