Инициализация объекта вне основного метода java - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь код ниже, но он не позволяет мне инициализировать объект сокета вне метода main. Может кто-нибудь объяснить мне проблему?

import java.net.DatagramSocket;

public class Server
{
    DatagramSocket socket = new DatagramSocket();
    public static void main(String[] args) {
    Server server = new Server();
    //server.socket = new DatagramSocket(); this is the suggested and working way

    }
} 

/*The error is : error: unreported exception SocketException; must be caught or declared to be thrown
    DatagramSocket socket = new DatagramSocket();*/

Почему я не получаю ошибку, когда инициализирую другие объекты вне основного метода? Должны ли все объекты быть инициализированы внутри метода main?

Обновление: Что меня поразило, так это ответ на этот вопрос : «Как правило, вы не создаете объекты снаружи МЕТОДОВ - основных или иных. Таким образом, вы МОЖЕТЕ создавать объекты вне основного, но внутри какого-то ДРУГОГО метода ».

Почему это проблема?

Ответы [ 2 ]

1 голос
/ 07 марта 2020

Как правильно указывает другой ответ, вам нужно обработать исключение. Вы можете сделать что-то вроде этого:

import java.net.DatagramSocket;

public class Server
{
    DatagramSocket socket = newDatagramSocket();

    private static DatagramSocket newDatagramSocket() {
        try {
            return new DatagramSocket();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
            return null;
        }
    }

    public static void main(String[] args) {
        Server server = new Server();
        //server.socket = new DatagramSocket(); this is the suggested and working way

    }
}

В этом случае это обрабатывается трассировкой стека + выход с ошибкой, но другой альтернативой может быть null.

1 голос
/ 06 марта 2020

Проблема в том, что конструктор DatagramSocket генерирует исключение SocketException, поэтому Throwable должен быть перехвачен. Вы не можете поймать Throwable как участника класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...