java类中局部变量和成员变量有啥区别?
举个例子,我们可以定义一个Person类,其中有两个成员变量name和age,以及一个构造方法和一个show方法。在构造方法中,我们可以使用this关键字来引用成员变量,以区分同名的形式参数;在show方法中,我们可以定义一个局部变量message,用来存储要输出的信息。代码如下:
public class Person {//成员变量String name; //默认值为nullint age; //默认值为0//构造方法public Person(String name, int age) {//使用this关键字来引用成员变量this.name = name;this.age = age;}//show方法public void show() {//局部变量,必须先赋值才能使用String message = "我叫" + name + ",今年" + age + "岁。";System.out.println(message);}
}
我们可以创建一个Person对象,并调用其show方法,看看输出结果:
public class Test {public static void main(String[] args) {//创建一个Person对象Person p = new Person("张三", 18);//调用show方法p.show();}
}
输出结果为:
我叫张三,今年18岁。
为什么"“我叫” + name + “,今年” + age + “岁。”;" 可以使用成员变量name和age?不需要加上this.name和this.age?
这是一个很好的问题。在Java中,如果在方法中使用成员变量的名字,而没有和局部变量或形式参数重名,那么就可以直接使用成员变量的值,不需要加上this关键字。这是因为Java会自动在方法中寻找与成员变量同名的变量,如果没有找到,就会默认使用this关键字来引用成员变量。这样可以简化代码的编写,也可以避免一些错误。
例如,在show方法中,我们使用了name和age两个成员变量的名字,而没有在方法中定义同名的局部变量或形式参数,所以Java会自动认为我们是要使用this.name和this.age的值,所以可以直接写成"“我叫” + name + “,今年” + age + “岁。”;"。
但是,如果在方法中有和成员变量同名的局部变量或形式参数,那么就必须使用this关键字来区分,否则Java会优先使用局部变量或形式参数的值,而忽略成员变量的值。这样可能会导致一些逻辑错误或意外的结果。
例如,如果我们在show方法中定义了一个局部变量name,如下:
public void show() {//局部变量,和成员变量同名String name = "李四";String message = "我叫" + name + ",今年" + age + "岁。";System.out.println(message);
}
那么,当我们调用show方法时,输出结果就会变成:
我叫李四,今年18岁。
public void show() {//局部变量,和成员变量同名String name = "李四";//使用this关键字来引用成员变量String message = "我叫" + this.name + ",今年" + age + "岁。";System.out.println(message);
}
这样,当我们调用show方法时,输出结果就会恢复正常:
我叫张三,今年18岁。