#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 во второй раз, если хотим использовать его в методе вне основного метода?
Вам не обязательно это делать, и это также не самый чистый способ сделать это. Я бы использовал один из следующих способов:
-
Объявите
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(); } }
-
Объявите
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(); } }
-
Передайте
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. Вы должны создать экземпляр класса конструктора один раз и использовать экземпляр в других методах.