刚学会了调用方法和思想我会尝试一下,但我的代码无法正常运行。它应该采取2个名字和打印。就这样。我的变量是全局的,所以我的所有方法都应该能够看到它们,但是当程序运行时它会打印'null'。有人可以解释为什么这不起作用?这与传递变量有关吗?我想如果它是全球性的我不需要这样做?
import java.util.Scanner;
public class UserID {
String firstName;
String secondName;
public void readNames(){
Scanner scan = new Scanner(System.in);
System.out.print("Enter first name: ");
firstName = scan.nextLine();
System.out.print("Enter second name: ");
secondName = scan.nextLine();
scan.close();
}
public void printID(){
System.out.println("Your user ID is: " + firstName);
}
public static void main(String[] args) {
UserID readNames = new UserID();
UserID printID = new UserID();
readNames.readNames();
printID.printID();
}
}
答案 0 :(得分:0)
原因是您从“UserID”类的一个实例调用read方法,然后尝试从另一个实例中检索名称。您创建的每个实例(每次执行新实例时)都会创建一组新数据。如果你要交换'printID.printID();',这可能会变得更加清晰。 'readNames.printID();'
至于修复,您应该尝试只创建一个实例,然后在该实例上调用两个方法。
答案 1 :(得分:0)
问题是您正在创建UserID类的两个对象。 在readName对象中,您正在更改firstName和secondName变量,但在printID对象中它们仍为null。这是因为非静态变量与不是类的对象相关联。因此,当您在printID对象中打印变量时,它会输出null。与上一个答案一样,您可以使用readName交换printID。
readNames.printID();
或者您可以通过将变量设置为静态来使变量与类而不是对象相关联。然后,对于您创建的所有对象,firtName和secondName将是常见的。
static String firstName;
static String secondName;
答案 2 :(得分:0)
更改您的代码如下
readNames.readNames();
readNames.printID();
printID.readNames();
printID.printID();
下面的变量是instance variables
,它们存在于您创建它的对象范围内。
String firstName;
String secondName;
在您的代码中,您初始化了readNames
对象上的变量。因此,要打印这些变量的值,您必须在该实例上调用printID()
方法。您没有在printID()
实例上调用readNames
方法,而是在printID
对象实例上调用了该方法。但printID
实例未设置变量,并且您将Null作为该实例的默认值。
如果您使用readNames()
&的同一个对象,您将获得正确的输出printID()
。
还有一件事:拥有良好的命名约定,不要对对象和方法使用相同的名称。