java - 为什么要在 main() 和外部方法中声明一个对象?

标签 java scope

如果我们想在第一次声明它的 main 方法之外的方法中使用它,谁能告诉我为什么要再次声明 Scanner 类对象?
例如:

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

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

为什么我应该在 lod() 方法中使用 Scanner 类对象之前再次声明它?

最佳答案

... why we declare a scanner class object the second time if we want to use it in a method outside the main method?

您不必这样做,而且这也不是一种干净的方法。我会使用以下方法之一:

  1. Scanner 对象声明为实例变量。但是,您将无法在 static 方法(包括 main)中直接使用它,因为您无法访问非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();
        }
    }
    

关于java - 为什么要在 main() 和外部方法中声明一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64619712/

相关文章:

java - 在元音和辅音之间添加空格?

java - 替换文件中的字符串

java - 如何在 Android 单元测试中用模拟数据填充适配器?

javascript - 在同一 View 中使用相同的指令并绑定(bind)不同的数据

coldfusion - 我应该将实用程序单例组件放在什么范围内?

csv - 在 Golang 中访问 for 循环之外的变量

java - 读取 html 文件用作电子邮件模板

java - 任何操作系统设置是否会影响 ExecutorService?

javascript - 在主渲染循环中访问部分 GLTF 导入(抱歉,如果菜鸟)

unit-testing - Guice:为什么@Singleton-annotated 类必须是不可变的/线程安全的?