Java同一类中跨方法调用变量的报错解决咨询
问题分析与解决方案
代码与错误信息
原Java代码
// default packages import java. util.*; import java. lang.*; import java.io.*; import java.net.*; import java. awt.*; import java. applet.*; class msg { void data() { String name, dep, age, bdg, hob; System.out.println("\nStudent data .....:)"); System.out.print("\nEnter your name:"); Scanner a = new Scanner(System.in); name = a.nextLine(); System.out.print("\nEnter your department:"); Scanner b = new Scanner(System.in); dep = b.nextLine(); System.out.print("\nEnter your age:"); Scanner c = new Scanner(System.in); age = c.nextLine(); System.out.print("\nEnter your blood-group:"); Scanner d = new Scanner(System.in); bdg = d.nextLine(); System.out.print("\nEnter your hobbies:"); Scanner e = new Scanner(System.in); hob = e.nextLine(); } void showdata() { System.out.println("\nStudent data inserted successfully .....:)"); System.out.println("Name :" + name); System.out.println("Department :"+dep); System.out.println("Age :"+age); System.out.println("Blood-Group :"+bdg); System.out.println("Hobbies :"+hob); } } public class display { public static void main(String[] args) { msg d=new msg(); d.data(); d.showdata(); System.out.println("Welcome to java development !!!"); } }
运行报错信息
defaultjava.java:32: error: cannot find symbol System.out.println("Name:"+name); ^ symbol: variable name location: class msg
错误原因
data方法里定义的name、dep、age、bdg、hob都是局部变量,这类变量的作用域仅限于定义它们的方法内部,方法执行完毕后变量就会被销毁,因此showdata方法无法访问这些变量。
修复方案
把这些变量提升为msg类的实例成员变量,让同一类的所有非静态方法都能访问。修改后的代码如下:
// default packages import java.util.*; import java.lang.*; import java.io.*; import java.net.*; import java.awt.*; import java.applet.*; class msg { // 将变量定义为类的实例成员变量 String name, dep, age, bdg, hob; void data() { Scanner scanner = new Scanner(System.in); System.out.println("\nStudent data .....:)"); System.out.print("\nEnter your name:"); name = scanner.nextLine(); System.out.print("\nEnter your department:"); dep = scanner.nextLine(); System.out.print("\nEnter your age:"); age = scanner.nextLine(); System.out.print("\nEnter your blood-group:"); bdg = scanner.nextLine(); System.out.print("\nEnter your hobbies:"); hob = scanner.nextLine(); scanner.close(); } void showdata() { System.out.println("\nStudent data inserted successfully .....:)"); System.out.println("Name :" + name); System.out.println("Department :" + dep); System.out.println("Age :" + age); System.out.println("Blood-Group :" + bdg); System.out.println("Hobbies :" + hob); } } public class display { public static void main(String[] args) { msg d = new msg(); d.data(); d.showdata(); System.out.println("Welcome to java development !!!"); } }
注:优化了原代码中重复创建Scanner的问题,只用一个Scanner处理所有输入更简洁高效。
关于同一类方法间变量调用的说明
- 同一类中,不能直接调用其他方法的局部变量,因为局部变量的作用域仅限于自身方法内部,外部方法无法访问。
- 若要让多个方法共享变量,常见方式有两种:
- 将变量定义为类的实例成员变量(如上述修复方案),同一类的所有非静态方法都可访问。
- 将变量作为参数传递给目标方法,比如
data方法返回包含所有信息的对象,或直接把变量作为参数传入showdata。
内容的提问来源于stack exchange,提问作者Shubham-Misal
相关产品推荐
相关产品推荐

