為什么不在方法內(nèi)部的 try-catch 有效?package ro.ase.acs.main;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import ro.ase.acs.classes.Addition;import ro.ase.acs.classes.Robot;import ro.ase.acs.interfaces.BinaryOperation;import ro.ase.acs.interfaces.DisplayService;public class Main { public static void main(String[] args) { Robot robot = new Robot(); robot.setName("Lego Mindstorms"); robot.setAutonomy(2); robot.setProductionYear(2015); try(FileOutputStream fos = new FileOutputStream("robot.bin"); DataOutputStream data = new DataOutputStream(fos)) {//baga in fisier datele setate mai sus; data.writeUTF(robot.getName()); data.writeFloat(robot.getAutonomy()); data.writeInt(robot.getProductionYear()); } catch(IOException e) { e.printStackTrace(); } Robot robot2 = new Robot(); try(FileInputStream fis = new FileInputStream("robot.bin");//se citesc datele din fisier;se creeaza un al 2-lea obiect cu datele pe care le-am bagat anterior in fisier; DataInputStream data = new DataInputStream(fis)) { robot2.setName(data.readUTF()); robot2.setAutonomy(data.readFloat()); robot2.setProductionYear(data.readInt()); } catch(IOException e) { e.printStackTrace(); }}這是我老師寫(xiě)的代碼,我讀到 try-catch() 只有在方法內(nèi)部時(shí)才有效,但在上面的代碼中,它在不在方法內(nèi)部的情況下也有效。是否足以聲明一個(gè)新對(duì)象在 try-catch 之前編寫(xiě) try 而不將其包含在方法中?是的,static void main() 是一種方法,這就是為什么我們可以在 static void main() 中編寫(xiě) try-catch 語(yǔ)句而不會(huì)出現(xiàn)錯(cuò)誤的原因。
1 回答

至尊寶的傳說(shuō)
TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
public static void main(String[] args) { ... }是一個(gè)方法,try-catch塊是在這個(gè)main方法內(nèi)部執(zhí)行的。
一般性地回答您的問(wèn)題:您可以在方法中編寫(xiě) try-catch 塊,也可以使用靜態(tài)塊(將在 main 方法之前執(zhí)行):
class ClassName {
static {
//try-catch here
}
}
但是,你不能寫(xiě)這樣的東西:
class ClassName {
//try-catch here
}
添加回答
舉報(bào)
0/150
提交
取消