不同的对象,同名变量应该有两个不同的值,但不是吗?
Different Objects, same name variable should have two different values but doesn't?
目的:获取用户输入的姓名和年龄,并在末尾打印一条消息:
"Name is Age."
NameIsAge.java
public class NameIsAge
{
static String userName;
static int userAge;
NameIsAge (String userName, int userAge)
{
userName = this.userName;
userAge = this.userAge;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
final void run(String[] args)
{
System.out.println(userName + " is " + userAge);
}
}
NameIsAgeLauncher.java
import java.util.Scanner;
public final class NameIsAgeLauncher {
private NameIsAgeLauncher()
{
}
public static void main(String[] args) {
String userName = null;
int userAge = 0;
Scanner stdIn = new Scanner(System.in);
System.out.println("Enter your name: "); //Prompts user to enter name.
NameIsAge.userName = stdIn.nextLine(); //Name from Practice should be equal to what the user enters.
System.out.println("Enter your age: "); //Prompts user to enter name.
NameIsAge.userAge = stdIn.nextInt(); //Name from Practice should be equal to what the user enters.
NameIsAge blah = new NameIsAge(userName, userAge);
NameIsAge halb = new NameIsAge ("Campbell", 97);
halb.setUserName("Campbell");
halb.setUserAge (97);
System.out.println(blah.userName + " is " + blah.userAge + ".");
System.out.println(halb.userName + " is " + halb.userAge + ".");
}
}
这会打印出:
Enter your name:
dsf
Enter your age:
32
Blah: Campbell is 97.
Halb: Campbell is 97.
它应该打印这个:
Blah: dsf is 32.
Halb: Campbell is 97.
Y 设置 halb 的值会发生变化吗?
这是由静态修饰符引起的。
static String userName;
static int userAge;
删除静态关键字是诀窍
静态修饰符表示它适用于所有实例。
顺便提一句。构造函数不好,应该是:
NameIsAge (String userName, int userAge)
{
this.userName = userName;
this.userAge = userAge;
}
完整代码如下:
辅助变量尽量使用局部变量
import java.util.Scanner;
public final class NameIsAgeLauncher {
private NameIsAgeLauncher()
{
}
public static void main(String[] args) {
String userName = null;
int userAge = 0;
Scanner stdIn = new Scanner(System.in);
System.out.println("Enter your name: "); //Prompts user to enter name.
userName = stdIn.nextLine(); //Name from Practice should be equal to what the user enters.
System.out.println("Enter your age: "); //Prompts user to enter name.
userAge = stdIn.nextInt(); //Name from Practice should be equal to what the user enters.
NameIsAge blah = new NameIsAge(userName, userAge);
NameIsAge halb = new NameIsAge ("Campbell", 97);
halb.setUserName("Campbell");
halb.setUserAge (97);
System.out.println(blah.userName + " is " + blah.userAge + ".");
System.out.println(halb.userName + " is " + halb.userAge + ".");
}
}
.
public class NameIsAge
{
String userName;
int userAge;
NameIsAge (String userName, int userAge)
{
this.userName = userName;
this.userAge = userAge;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
final void run(String[] args)
{
System.out.println(userName + " is " + userAge);
}
}
目的:获取用户输入的姓名和年龄,并在末尾打印一条消息:
"Name is Age."
NameIsAge.java
public class NameIsAge
{
static String userName;
static int userAge;
NameIsAge (String userName, int userAge)
{
userName = this.userName;
userAge = this.userAge;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
final void run(String[] args)
{
System.out.println(userName + " is " + userAge);
}
}
NameIsAgeLauncher.java
import java.util.Scanner;
public final class NameIsAgeLauncher {
private NameIsAgeLauncher()
{
}
public static void main(String[] args) {
String userName = null;
int userAge = 0;
Scanner stdIn = new Scanner(System.in);
System.out.println("Enter your name: "); //Prompts user to enter name.
NameIsAge.userName = stdIn.nextLine(); //Name from Practice should be equal to what the user enters.
System.out.println("Enter your age: "); //Prompts user to enter name.
NameIsAge.userAge = stdIn.nextInt(); //Name from Practice should be equal to what the user enters.
NameIsAge blah = new NameIsAge(userName, userAge);
NameIsAge halb = new NameIsAge ("Campbell", 97);
halb.setUserName("Campbell");
halb.setUserAge (97);
System.out.println(blah.userName + " is " + blah.userAge + ".");
System.out.println(halb.userName + " is " + halb.userAge + ".");
}
}
这会打印出:
Enter your name:
dsf
Enter your age:
32
Blah: Campbell is 97.
Halb: Campbell is 97.
它应该打印这个:
Blah: dsf is 32.
Halb: Campbell is 97.
Y 设置 halb 的值会发生变化吗?
这是由静态修饰符引起的。
static String userName;
static int userAge;
删除静态关键字是诀窍
静态修饰符表示它适用于所有实例。
顺便提一句。构造函数不好,应该是:
NameIsAge (String userName, int userAge)
{
this.userName = userName;
this.userAge = userAge;
}
完整代码如下:
辅助变量尽量使用局部变量
import java.util.Scanner;
public final class NameIsAgeLauncher {
private NameIsAgeLauncher()
{
}
public static void main(String[] args) {
String userName = null;
int userAge = 0;
Scanner stdIn = new Scanner(System.in);
System.out.println("Enter your name: "); //Prompts user to enter name.
userName = stdIn.nextLine(); //Name from Practice should be equal to what the user enters.
System.out.println("Enter your age: "); //Prompts user to enter name.
userAge = stdIn.nextInt(); //Name from Practice should be equal to what the user enters.
NameIsAge blah = new NameIsAge(userName, userAge);
NameIsAge halb = new NameIsAge ("Campbell", 97);
halb.setUserName("Campbell");
halb.setUserAge (97);
System.out.println(blah.userName + " is " + blah.userAge + ".");
System.out.println(halb.userName + " is " + halb.userAge + ".");
}
}
.
public class NameIsAge
{
String userName;
int userAge;
NameIsAge (String userName, int userAge)
{
this.userName = userName;
this.userAge = userAge;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
final void run(String[] args)
{
System.out.println(userName + " is " + userAge);
}
}