如何在java中使用扫描仪?
import java.util.Scanner; public class Initials { Scanner getin = new Scanner (System.in); public static void main(String[] args) { String Name; System.out.println("Enter your name's Initials::"); Name=getin.nexlinet(); } }
错误:无法从静态上下文引用非静态变量?
首先, Scanner
对象没有一个名为nexlinet
的方法,我猜你想要nextLine()
。
关于错误,您不能从static
方法引用non-static
变量(在这种情况下,该方法是main
)。
为什么? 因为即使没有创建类的实例,也可以使用static
变量。
怎么解决?
-
您可以将变量
getin
声明为static
:static Scanner getin = new Scanner(System.in);
-
或者,您可以创建类的实例并访问实例字段
getin
:Initials some_name = new Initials(); // ... name = t.getin.nextLine();
笔记:
- 尝试遵循Java命名约定。 对方法/变量使用
'mixedCase'
,对类/接口使用'CamelCase'
。 - 我建议你阅读有关访问修饰符的内容。 为什么? 看看第二种解决方法。 类
Initials
应该为实例字段getin
提供getter / setter方法,因此您没有对它的完全访问权限。 此外,将实例字段声明为private
(并使用getter / setter )是一种很好的做法。
尝试这个:
// ur code public static void main(String[] args) { Scanner getin = new Scanner (System.in); // <-- move scanner declaration inside main Name=getin.nextLine(); // <-- note this change also // ur code
你必须在main方法中创建扫描器类对象。
因为外部声明的非静态变量无法访问静态方法。
public static void main(String[] args) { Scanner getin = new Scanner (System.in); String Name; System.out.println("Enter your name's Initials::"); Name=getin.nextLine(); }
静态方法:无法访问非静态变量。 无法调用非静态方法。 不能使用“this”关键字。 不能使用“超级”关键字。 无法覆盖静态方法。 所以你不能访问main方法内部的非静态对象,因为它是一个静态方法。
import java.util.Scanner; public class Initials { public static void main(String[] args) { Scanner getin = new Scanner (System.in); String Name; System.out.println("Enter your name's Initials::"); Name=getin.nexlinet(); } }
您不了解静态和非静态变量或方法。
1)无论是静态还是非静态方法,都可以访问静态变量或方法。 2)静态方法无法访问非静态方法或变量。
所以修改后的代码应该是:
import java.util.Scanner; public class Initials { public static void main(String[] args) { String Name; Scanner getin = new Scanner (System.in); System.out.println("Enter your name's Initials::"); Name=getin.nexLine(); } }
否则将扫描仪修改为static Scanner getin = new Scanner (System.in);
import java.util.Scanner;
public class Initials {
public static void main(String[] args) { Scanner getin = new Scanner (System.in); String Name; System.out.println("Enter your name's Initials::"); Name=getin.next(); }
}