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

wwtsj6pe  于 2023-03-11  发布在  Java
关注(0)|答案(3)|浏览(131)

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

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类对象之前,为什么要再次声明它?

xlpyo6sf

xlpyo6sf1#

...如果我们想在main方法之外的方法中使用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();
    }
}

1.将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();
    }
}

1.将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();
    }
}
5gfr0r5j

5gfr0r5j2#

你不需要这样做!你可以在类级别声明Scanner对象,如下所示:

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

    ....
}
x7rlezfr

x7rlezfr3#

在Java中,对象可以在方法内部或外部创建,所以它们只针对那个方法或整个类,但我不建议你这么做,因为每次使用类时,方法都会被创建,即使你访问的是一个不使用它的方法,相反,你可以在方法外部声明它,这样类中的所有方法都可以访问它,但是它必须在每个方法中单独创建,并且在方法结束时会被销毁。例如:

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

相关问题