java类中局部变量和成员变量有啥区别?

java类中局部变量和成员变量有啥区别?

举个例子,我们可以定义一个Person类,其中有两个成员变量name和age,以及一个构造方法和一个show方法。在构造方法中,我们可以使用this关键字来引用成员变量,以区分同名的形式参数;在show方法中,我们可以定义一个局部变量message,用来存储要输出的信息。代码如下:

public class Person {
    //成员变量
    String name; //默认值为null
    int 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岁。

你可能感兴趣的:(java教程,java,python,开发语言)