【问题标题】:Private Variables inside inside a Constructor in JavaJava构造函数内部的私有变量
【发布时间】:2016-08-16 17:19:15
【问题描述】:

我很困惑为什么我不能在构造函数或主函数内部创建变量时将其表示为私有,但可以在类内部的外部执行它。

public class Stuff
{
    private double x;

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

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

【问题讨论】:

标签: java constructor private


【解决方案1】:

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

【讨论】:

  • 哦,所以它们是自动私有的?
  • @ClangorousChimera 我猜你可以这么想
  • 它们不是私有的,因为它们不作为 object 上的 fields 存在。它们是方法的局部变量
【解决方案2】:

一个类具有可以被某些其他类访问的字段和方法,并且总是类本身,这取决于访问级别修饰符(private、default-access、protected 或 public)。您可以将字段和方法视为类的属性/属性。

字段就是您所描述的“类中的一个变量,它不在任何方法中”。字段描述类具有的值,方法描述类(或类的对象)可以做什么。

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

如果您将类的字段设置为private nothingoutside,则该类可以访问它。只有类本身(本质上是指类的方法)可以访问它。私有方法也是如此。只有类的其他方法才能访问私有方法。

考虑这个例子:

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 进行此操作,这可能会导致麻烦)。当名称为私有时,这是不可能的。

一个变量inside一个方法,然而,不是一个字段。这意味着它不是对象的属性。它只是一个临时变量,存在以允许该方法执行它想要执行的操作。当方法完成执行时,变量被销毁。将这样的变量声明为 private 或其他任何内容是完全没有意义的,因此是不允许的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-31
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    相关资源
    最近更新 更多