Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否总是需要在方法内部编写try-catch(),static void main()是否是方法,static void main()是否是方法?_Java_Serialization_Try Catch - Fatal编程技术网

Java 是否总是需要在方法内部编写try-catch(),static void main()是否是方法,static void main()是否是方法?

Java 是否总是需要在方法内部编写try-catch(),static void main()是否是方法,static void main()是否是方法?,java,serialization,try-catch,Java,Serialization,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.

为什么不在一个方法内的尝试捕获会起作用

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();
        }

        System.out.println(robot2);

        try(FileOutputStream fos = new FileOutputStream("robot.dat");
            ObjectOutputStream oos = new ObjectOutputStream(fos)) {//ia toate datele ,atributele gasite -n obiectul dat,anterior, cand le-am setat la inceputul programului
            //le scrie byte cu byte in fisier
                oos.writeObject(robot);
        } catch(IOException e) {
            e.printStackTrace();
        }

        Robot robot3 = new Robot();
        try(FileInputStream fis = new FileInputStream("robot.dat");//se baga datele, luate anterior, in robot3;
            ObjectInputStream ois = new ObjectInputStream(fis)) {
                robot3 = (Robot)ois.readObject();
        } catch(IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }


        System.out.println(robot3);
        System.out.println(new Robot());

        BinaryOperation op = new Addition();
        op = new BinaryOperation() {

            @Override
            public double operation(int x, int y) {
                return x - y;
            }
        };

        op = (int a, int b) -> a * b;
        op = (a, b) -> a / b;
        op = (a, b) -> { return Math.pow(a, b); };
        double result = op.operation(2, 3);

        System.out.println(result);

        DisplayService ds = (m) -> System.out.println(m);
        ds = m -> { System.out.print("Message: "); System.out.println(m);};
        ds.display("Hello from the Lambda expression");
    }

}
这是我的老师写的代码,我读到try-catch()只在方法中起作用,但在上面的代码中,它不在方法中起作用。在try-catch之前声明一个新对象并编写try而不将其包含在方法中是否足够


是的,static void main()是一个方法,这就是为什么我们可以在static void main()中编写try-catch语句而不会出现错误的原因。

public static void main(String[]args){…}
是一个方法,try-catch块在这个主方法中执行

一般来说,要回答您的问题:您可以在方法中编写try-catch块,也可以使用静态块(将在main方法之前执行):

但是,您不能编写以下内容:

class ClassName { 
    //try-catch here
}

不在方法内部是什么意思?在上面的代码中,它位于main方法中
class ClassName { 
    //try-catch here
}