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