Пожалуйста, можете ли вы сказать мне причину, по которой мы объявляем объект класса scanner во второй раз, если мы хотим использовать его в методе вне основного метода?

#java

#java

Вопрос:

Например:

 static void lod(){
 Scanner j = new Scanner(System.in);
 String m = j.next();
}

 public static void main(String[] args) {
  Scanner j = new Scanner(System.in);
  String val = j.next();
 }
}
  

Например, почему я должен снова объявлять объект Scanner класса в методе lod, прежде чем обращаться к классу scanner в методе Los.

Комментарии:

1. Вам не нужно. Вы можете создать переменную с более широкой областью видимости (класса), и вы сможете использовать ее в обоих методах (при условии, что она правильно инициализирована)

Ответ №1:

… почему мы объявляем объект класса scanner во второй раз, если хотим использовать его в методе вне основного метода?

Вам не обязательно это делать, и это также не самый чистый способ сделать это. Я бы использовал один из следующих способов:

  1. Объявите Scanner объект как переменную экземпляра. Однако вы не сможете использовать его непосредственно внутри static метода (включая main ), поскольку вы не можете напрямую обращаться к не- static члену внутри static метода. В static методе вы сможете получить доступ к переменной экземпляра только через экземпляр класса, например

     import java.util.Scanner;
    
    public class MyClass {
        Scanner scanner = new Scanner(System.in);
    
        public static void main(String[] args) {
            MyClass obj = new MyClass();
            System.out.print("Enter a word: ");
            System.out.println(obj.scanner.nextLine());
        }
    
        static void lod() {
            MyClass obj = new MyClass();
            String m = obj.scanner.next();
        }
    }
      
  2. Объявите Scanner объект как переменную класса (т. Е. Статическую переменную на уровне класса), например

     import java.util.Scanner;
    
    public class MyClass {
        static Scanner scanner = new Scanner(System.in);
    
        public static void main(String[] args) {
            System.out.print("Enter a word: ");
            System.out.println(scanner.nextLine());
        }
    
        static void lod() {
            String m = scanner.next();
        }
    }
      
  3. Передайте Scanner объект вызываемым методам main , например

     import java.util.Scanner;
    
    public class MyClass {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.print("Enter a word: ");
            System.out.println(scanner.nextLine());
        }
    
        static void lod(Scanner scanner) {
            String m = scanner.next();
        }
    }
      

Ответ №2:

Вам не нужно! Вы можете объявить объект Scanner на уровне класса следующим образом,

 class Test {
    static Scanner j = new Scanner(System.in);

    ....
}
  

Ответ №3:

В Java объекты могут быть созданы внутри метода или снаружи, и поэтому они предназначены только для этого метода или для всего класса, но я не рекомендую вам делать это, потому что каждый раз, когда используется класс, создается метод, даже если вы получаете доступ к методу, который его не использует. Вместо этого вы можете объявить его вне метода, и он будет доступен для всех методов из класса, но его нужно будет создавать отдельно внутри каждого метода, и они будут уничтожены в конце метода. Пример:

 class example{
    Canstructor name;
    public void method1(){
        name = new Constructor();
    }
    public void method2(){
        name = new Constructor();
    }
}
  

Комментарии:

1. Объект не будет «уничтожен» в конце метода.

2. Вы должны создать экземпляр класса конструктора один раз и использовать экземпляр в других методах.