Java开发中如何跨方法使用获取到的用户输入字符串
问题原因&修复方案
核心问题排查
- 首先你的程序不符合Java的入口方法规范:Java程序的主入口方法必须声明为
public static void main(String[] args),你当前的main方法缺少static修饰符,JVM无法识别到合法的程序入口,你写的业务逻辑根本没有被执行,自然没有输出。 - 成员变量初始化逻辑不合理:你将Scanner实例化、读取用户输入的代码直接放在类的成员变量定义区域,这部分代码只会在Program类的实例被创建时才会执行,没有实例化的前提下不会触发输入读取,也不会产生后续的处理结果。
- 静态上下文访问规则不匹配:你之前只给方法加static但没有同步调整变量的修饰符,会触发「静态方法无法访问非静态成员」的编译错误,自然无法正常运行。
修复后代码
import java.util.Scanner; public class Program { // 仅保留公用的Scanner作为成员变量 private Scanner read = new Scanner(System.in); // 修正为符合规范的静态入口方法 public static void main(String[] args) { // 先实例化Program类,触发成员变量初始化 Program program = new Program(); // 在实例上下文中执行业务逻辑 program.domainCharLimit(); } public void domainCharLimit() { // 将输入读取移到方法内,按需执行 String firstName = read.nextLine().replace("'", ""); String lastName = read.nextLine().replace("'", ""); String domainUsername = firstName + "." + lastName; if (domainUsername.length()>20) { domainUsername = domainUsername.substring(0, 20); } System.out.print(domainUsername); read.close(); } }
修改点说明
- 补全了main方法的
static修饰符,匹配JVM的入口要求 - 把输入读取逻辑从成员变量定义处移到业务方法内部,避免实例初始化时无预期的阻塞读取
- 在main方法中先实例化Program类,再调用非静态的业务方法,符合Java的访问规则
- 补充了缺失的
import java.util.Scanner声明(如果你的代码已经提前导入可以省略) - 冗余的临时变量
cutName被简化,直接修改domainUsername的值即可
内容的提问来源于stack exchange,提问作者Nick Tagliamonte
相关产品推荐
相关产品推荐

