Модификатор static при создании объекта

Почему при создании объекта вне метода main надо использовать static

import java.util.Scanner;
class Main {
    static Scanner in = new Scanner(System.in);
    public static void main(String[] args) {

    }
}

а при создании объекта в методе main static не нужен

import java.util.Scanner;
class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
    }
}

Но при этом внутри статического метода нельзя создать статический объект

import java.util.Scanner;
class Main {
    public static void main(String[] args) {
        static Scanner in = new Scanner(System.in);
    }
}

Ответы (1 шт):

Автор решения: Nowhere Man

Почему при создании объекта вне метода main надо использовать static

Потому что метод main в данном случае объявлен как статический, а статический метод имеет прямой доступ только к статическим полям класса, которым и будет являться экземпляр сканера.

а при создании объекта в методе main static не нужен

В данном случае внутри метода объявляется локальная переменная для объекта сканера. К локальным переменным метода (даже если метод статический) модификатор static НЕ применяется, так как его основное предназначение -- обозначить поля/методы, определённые для всего класса, а не его отдельных экземпляров.

Но при этом внутри статического метода нельзя создать статический объект

Создать статический объект ничто не запрещает, а определить статическую локальную переменную -- бессмысленно, так как это нарушает определение самого понятия "статический".

private static Scanner scanner;

public static void main(String ... args) {
    scanner = new Scanner(System.in);
}
→ Ссылка