Java中的构造函数内部的私有变量

时间:2016-04-22 23:06:18

标签: java constructor private

我很困惑为什么在构造函数内部或main内部创建变量时我无法表示变量private,但是可以在类内部的那些外部创建变量。

public class Stuff
{
    private double x;

    public Stuff(int i, double d) {
        private double y;
    }

    public static void main(String[] args) {
        private double z;
    }
}

2 个答案:

答案 0 :(得分:4)

访问修饰符在函数内部没有意义,因为在函数结束后变量会立即超出范围

答案 1 :(得分:1)

类具有可由某些其他类访问的字段和方法,并且始终是类本身,具体取决于访问级别修饰符(私有,默认访问,受保护或公共)。您可以将字段和方法视为类的属性/属性。

一个字段就是你所描述的“一个不在任何方法中的类中的变量”。字段描述类具有的值,方法描述类(或类的对象)可以执行的操作。

为了简化本文,忽略static关键字,类是用于创建对象的模板。您为某个类创建的每个对象都有一组自己的字段和方法(除非该字段或方法是static)。

如果您将某个班级的字段设置为private 以外的,则该班级可以访问该字段。只有类本身(本质上意味着类的方法)才能达到它。私有方法也是如此。只有该类的其他方法才能访问私有方法。

考虑这个例子:

public class Person {
    private String name;
    public int id;

    public Person(String name, int id) {
        this.name = name;
        this.id = id;
    }

    public String getName() {
        return name;
    }
}

如果有人想通过直接引用该名称来获取此人的姓名,他们将无法这样做,因为名称为private。他们必须使用getName()方法来完成它。

Person person = new Person(John, 5);
System.out.print(person.name); //does not work

Person person = new Person(John, 5);
System.out.print(person.getName()); //works

这很好,因为如果名称可以直接访问,你可以写:

person.name = "Felicity";

并更改不需要的人的姓名(我们可以使用id执行此操作,这可能会导致麻烦)。当名称是私人名称时,这是不可能的。

方法中的变量不是字段。这意味着它不是对象的属性。它只是一个临时变量,允许该方法执行它想要做的事情。该方法执行完毕后,该变量将被销毁。将这样的变量声明为private或其他任何变量都是完全没有意义的,因此是不允许的。