ฉันกำลังผ่านโปรแกรมซ็อกเก็ต ในนั้นprintStackTrace
เรียกว่าIOException
วัตถุในบล็อกจับ
ทำอะไรได้printStackTrace()
จริง?
catch(IOException ioe)
{
ioe.printStackTrace();
}
ฉันไม่รู้จุดประสงค์ของมัน ใช้ทำอะไร?
ฉันกำลังผ่านโปรแกรมซ็อกเก็ต ในนั้นprintStackTrace
เรียกว่าIOException
วัตถุในบล็อกจับ
ทำอะไรได้printStackTrace()
จริง?
catch(IOException ioe)
{
ioe.printStackTrace();
}
ฉันไม่รู้จุดประสงค์ของมัน ใช้ทำอะไร?
e.printStackTrace(); System.exit(1);
นี่ฉันต้องการถามคำถามเดียวกันกับ OP แต่ในหลอดเลือดดำอื่น: จุดประสงค์ของสิ่งนี้คืออะไร? JRE จะไม่พิมพ์ stacktrace โดยอัตโนมัติและออกเมื่อเกิดข้อยกเว้นหรือไม่? คือไม่มี "Exception Handling" เกิดขึ้นมากนักใช่ไหม ??
คำตอบ:
มันเป็นวิธีการในException
กรณีที่พิมพ์ร่องรอยสแต็คของอินสแตนซ์System.err
เป็นเครื่องมือที่เรียบง่าย แต่มีประโยชน์มากสำหรับการวินิจฉัยข้อยกเว้น จะบอกคุณว่าเกิดอะไรขึ้นและเกิดขึ้นที่ไหนในโค้ด
นี่คือตัวอย่างของวิธีการใช้ในทางปฏิบัติ:
try {
// ...
} catch (SomeException e) {
e.printStackTrace();
}
catch
บล็อก :-)
throw new RuntimeException(e)
ฉันก็อยากรู้เกี่ยวกับเรื่องนี้เช่นกันดังนั้นฉันจึงรวบรวมโค้ดตัวอย่างเล็กน้อยเพื่อให้คุณเห็นว่ามันทำอะไร:
try {
throw new NullPointerException();
}
catch (NullPointerException e) {
System.out.println(e);
}
try {
throw new IOException();
}
catch (IOException e) {
e.printStackTrace();
}
System.exit(0);
โทรprintln(e)
:
java.lang.NullPointerException
โทรe.printStackTrace()
:
java.io.IOException
at package.Test.main(Test.java:74)
System.err.println(e);
จะเหมาะสมกว่า
ช่วยในการติดตามข้อยกเว้น ตัวอย่างเช่นคุณกำลังเขียนวิธีการบางอย่างในโปรแกรมของคุณและหนึ่งในวิธีของคุณทำให้เกิดข้อผิดพลาด จากนั้น printstack จะช่วยคุณระบุว่าวิธีใดทำให้เกิดข้อบกพร่อง Stack จะช่วยได้ดังนี้:
ขั้นแรกวิธีการหลักของคุณจะถูกเรียกและแทรกลงในสแต็กจากนั้นวิธีที่สองจะถูกเรียกและแทรกลงในสแต็กตามลำดับ LIFO และหากมีข้อผิดพลาดเกิดขึ้นที่ใดที่หนึ่งภายในวิธีใด ๆ สแต็กนี้จะช่วยระบุวิธีการนั้น
printStackTrace()
ช่วยให้โปรแกรมเมอร์เข้าใจว่าปัญหาเกิดขึ้นที่ใด printStacktrace()
เป็นวิธีการหนึ่งของคลาสThrowable
ของjava.lang
แพ็คเกจ มันพิมพ์หลายบรรทัดในคอนโซลเอาต์พุต บรรทัดแรกประกอบด้วยหลายสตริง ประกอบด้วยชื่อของคลาสย่อย Throwable และข้อมูลแพ็คเกจ จากบรรทัดที่สองเป็นต้นไปจะอธิบายจำนวนตำแหน่งที่ผิดพลาด / at
สายเริ่มต้นด้วย
บรรทัดสุดท้ายจะอธิบายปลายทางที่ได้รับผลกระทบจากข้อผิดพลาด / ข้อยกเว้นเสมอ บรรทัดสุดท้ายที่สองแจ้งให้เราทราบเกี่ยวกับบรรทัดถัดไปในสแต็กที่การควบคุมไปหลังจากได้รับการถ่ายโอนจากหมายเลขบรรทัดที่อธิบายไว้ในบรรทัดสุดท้าย ข้อผิดพลาด / ข้อยกเว้นแสดงถึงเอาต์พุตในรูปแบบสแต็กซึ่งถูกป้อนเข้าในสแต็กโดยfillInStackTrace()
วิธีการของThrowable
คลาสซึ่งจะกรอกรายละเอียดการถ่ายโอนการควบคุมโปรแกรมลงในกองการดำเนินการ บรรทัดที่ขึ้นต้นด้วยat
ไม่มีอะไรนอกจากค่าของสแต็กการดำเนินการ ด้วยวิธีนี้โปรแกรมเมอร์สามารถเข้าใจได้ว่าปัญหาที่แท้จริงอยู่ที่ใดในโค้ด
พร้อมกับวิธีการมันเป็นความคิดที่ดีที่จะใช้printStackTrace()
e.getmessage()
printStackTrace()
พิมพ์ตำแหน่งที่มีข้อยกเว้นเกิดขึ้นในซอร์สโค้ดซึ่งทำให้ผู้เขียนที่เขียนโปรแกรมเห็นสิ่งที่ผิดพลาด แต่เนื่องจากมันแสดงปัญหาในซอร์สโค้ดผู้ใช้ที่อาจมีหรือไม่มีประสบการณ์ในการเขียนโค้ดอาจไม่สามารถเข้าใจสิ่งที่ผิดพลาดได้ดังนั้นหากโปรแกรมอนุญาตให้ผู้ใช้ส่งข้อความแสดงข้อผิดพลาดไปยังผู้เขียน ผู้ใช้อาจไม่สามารถให้ข้อมูลที่ดีเกี่ยวกับสิ่งที่ผิดพลาดได้
คุณควรพิจารณาLogger.getLogger()
วิธีการนี้ซึ่งมีสิ่งอำนวยความสะดวกในการจัดการข้อยกเว้น (การบันทึก) ที่ดีกว่าและนอกจากนี้การprintStackTrace()
ไม่มีข้อโต้แย้งถือว่าล้าสมัยและควรใช้เพื่อวัตถุประสงค์ในการดีบักเท่านั้นไม่ใช่สำหรับการแสดงผลของผู้ใช้
printStackTrace()
ช่วยให้โปรแกรมเมอร์เข้าใจว่าปัญหาที่เกิดขึ้นจริงที่เกิดขึ้น printStackTrace()
วิธีการเป็นสมาชิกของชั้นเรียนThrowable
ในjava.lang
แพคเกจ
printStackTrace
เป็นวิธีการหนึ่งของThrowable
คลาส วิธีนี้แสดงข้อความแสดงข้อผิดพลาดในคอนโซล ที่เราได้รับข้อยกเว้นในซอร์สโค้ด วิธีการเหล่านี้สามารถใช้ได้กับ catch block และอธิบาย:
สามวิธีที่อธิบายถึงข้อยกเว้นบนคอนโซล (ซึ่ง printStackTrace เป็นหนึ่งในนั้น) ได้แก่ :
printStackTrace()
toString()
getMessage()
ตัวอย่าง:
public class BabluGope {
public static void main(String[] args) {
try {
System.out.println(10/0);
} catch (ArithmeticException e) {
e.printStackTrace();
// System.err.println(e.toString());
//System.err.println(e.getMessage());
}
}
}
printStackTrace () ช่วยให้โปรแกรมเมอร์เข้าใจว่าปัญหาเกิดขึ้นจริงที่ใด ช่วยในการติดตามข้อยกเว้น เป็นเมธอด printStackTrace () ของคลาส Throwable ที่สืบทอดมาจากคลาสยกเว้นทุกคลาส วิธีนี้จะพิมพ์ข้อความเดียวกันของวัตถุ e และหมายเลขบรรทัดที่เกิดข้อยกเว้น
ต่อไปนี้เป็นอีกตัวอย่างหนึ่งของ print stack ของ Exception ใน Java
public class Demo {
public static void main(String[] args) {
try {
ExceptionFunc();
} catch(Throwable e) {
e.printStackTrace();
}
}
public static void ExceptionFunc() throws Throwable {
Throwable t = new Throwable("This is new Exception in Java...");
StackTraceElement[] trace = new StackTraceElement[] {
new StackTraceElement("ClassName","methodName","fileName",5)
};
t.setStackTrace(trace);
throw t;
}
}
java.lang.Throwable: นี่คือ Exception ใหม่ใน Java ... ที่ ClassName.methodName (fileName: 5)
การใช้ e.printStackTrace () method ใน Java คืออะไร?
จุดประสงค์ของการใช้วิธีนี้e.printStackTrace();
คือเพื่อดูว่าอะไรผิดปกติ
ตัวอย่างเช่นเราต้องการจัดการกับข้อยกเว้น ลองดูตัวอย่างต่อไปนี้
public class Main{
public static void main(String[] args) {
int a = 12;
int b = 2;
try {
int result = a / (b - 2);
System.out.println(result);
}
catch (Exception e)
{
System.out.println("Error: " + e.getMessage());
e.printStackTrace();
}
}
}
ฉันใช้วิธีการe.printStackTrace();
เพื่อแสดงสิ่งที่ผิด
ในผลลัพธ์เราจะเห็นผลลัพธ์ต่อไปนี้
Error: / by zero
java.lang.ArithmeticException: / by zero
at Main.main(Main.java:10)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
printStackTrace()
บอกว่าคุณได้รับข้อผิดพลาดที่บรรทัดใดเพราะเหตุใดคุณจึงได้รับข้อผิดพลาด
ตัวอย่าง:
java.lang.ArithmeticException: / by zero
at MinNumber.main(MinNumber.java:8)