Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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 请告诉我,如果我们想在主方法之外的方法中使用scanner类对象,为什么要第二次声明它?_Java - Fatal编程技术网

Java 请告诉我,如果我们想在主方法之外的方法中使用scanner类对象,为什么要第二次声明它?

Java 请告诉我,如果我们想在主方法之外的方法中使用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(); } } 比如,在访问方法Los中的Scanner类之前,为什么我要在方法lod中再次声明Scanner类对象。您不需

例如:

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();
 }
}
比如,在访问方法Los中的Scanner类之前,为什么我要在方法lod中再次声明
Scanner
类对象。

您不需要! 您可以像这样在类级别声明Scanner对象

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

    ....
}

在Java中,对象可以在Methods内部或外部创建,因此它们仅用于该方法或整个类,但我不建议您这样做,因为每次使用该类时,都会创建该方法,即使您正在访问一个不使用该方法的方法。相反,您可以在方法外部声明它,并且该类中的所有方法都可以访问它,但是必须在每个方法内部单独创建它,并且它们将在方法末尾被销毁。例如:

class example{
    Canstructor name;
    public void method1(){
        name = new Constructor();
    }
    public void method2(){
        name = new Constructor();
    }
}
。。。如果需要,为什么要第二次声明scanner类对象 在主方法之外的方法中使用它

你不必这么做,这也不是一个干净的方式。我将使用以下方法之一:

  • 扫描仪
    对象声明为实例变量。但是,您将无法在
    静态
    方法(包括
    main
    )中直接使用它,因为您无法直接访问
    静态
    方法中的非
    静态
    成员。在
    静态方法中
    只能通过类的实例访问实例变量,例如

    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();
        }
    }
    
  • 扫描仪
    对象声明为类变量(即类级别的静态变量),例如

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

  • 你不必这么做。您可以创建一个范围更广(类)的变量,并且可以在两种方法中使用它(只要初始化正确)。对象不会在方法末尾被“销毁”。您应该实例化一次构造函数类,并在其他方法中使用实例。
    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();
        }
    }