Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 私有字段、点表示法、getter setter方法_Java - Fatal编程技术网

Java 私有字段、点表示法、getter setter方法

Java 私有字段、点表示法、getter setter方法,java,Java,很抱歉问了一些关于java的基本概念 我对如何访问类中的私有字段感到困惑 例如,我定义了一个类: private class Example{ private Timestamp fromdate; private Timestamp todate; private float amount; public example(Timestamp fromdate, Timestamp todate, float amount){ this.fromdate= fromdate; th

很抱歉问了一些关于java的基本概念

我对如何访问类中的私有字段感到困惑

例如,我定义了一个类:

private class Example{
private  Timestamp fromdate;
private  Timestamp todate;
private  float amount;
public example(Timestamp fromdate, Timestamp todate, float amount){
  this.fromdate= fromdate;
  this.todate= todate;
  this.amount = amount;
}}
请问我是否可以使用构造函数创建一个新的示例类,即

example ex = new example (fromdate, todate, amount)
我可以访问为ex变量声明的私有字段吗

从日期算起,从日期算起,从金额算起

什么时候,为什么我们需要声明getter和setter方法来获取对象内部的变量,而我们可以直接使用点表示法来获取类内部的字段

非常感谢

--------------编辑-------------------

还有一个问题,伙计们

请问如果我将上述类嵌套在另一个类中,是否可以直接使用点符号来获取私有字段

例如:

public class ExampleOutterClass{
   private class Example(...){...}
   ---Some Operation to get fromdate, todate, amount)---
   Example ex = new Example (fromdate, todate, amount);
   public Timestamp fromdate = ex.fromdate;
   public Timestamp todate = ex.todate;
   public float amount = ex.amount;
}
public class Point {
  private double x;
  private double y;
  public Point(double x, double y) {
    this.x = x;
    this.y = y;
  }
  public void setX(double x) {
    this.x = x;
  }
  public double getX() {
    return x;
  }
  // ... setter and getter for y
}
public class Point {
  private double x;
  private double y;
  public Point(double x, double y) {
    this.x = x;
    this.y = y;
  }
  public void move(double deltaX, double deltaY) {
    // some validations can be applied here
    x += deltaX;
    y += deltaY
  }
}
我在我的Jbuilder非常旧的开发工具ORZ中尝试上述实践,发现我可以直接使用点符号来引用私有字段,这很奇怪,所以我提出了这个问题


顺便说一句,非常感谢您的帮助

您不允许从课外访问私有字段,
为了做到这一点,您需要为此声明getter和setter。

否,您不能直接从类外的对象访问类的私有成员。私有成员只能由同一类中的函数访问。getter和setter被创建为获取或设置这些值的公共方法。其他类应该使用这些getter和setter来修改私有成员


您可能有一个问题:当您可以将变量本身公开,然后从另一个类访问它时,为什么我们需要getter和setter?请按照此问题进行操作:

在定义私有字段的类之外无法访问这些字段。为了访问这些字段,您可以创建getter或setter方法。Getter和setter方法通常在您希望私有成员是只读的或者希望成员的值被设置但不被读取时使用


当您希望在返回或设置某个值之前修改该值时,通常也会使用Setter和getter方法。Ravi给出了一个很好的答案,说明了为什么要使用getter和setter方法,而不是简单地将成员变量公开。

因为私有字段不能从类外访问。您不能仅通过以下方式访问:

从日期算起,从日期算起,从金额算起


从技术上讲,您可以将它们公开,并使用点符号方便地获取所需内容。为什么我们要使用getter和setter?您可能认为它们是大多数程序都接受的两种常用方法,它们可以定期检索您对类成员的访问。最重要的是,在某些设计模式中是有用的。您可以了解有关Javabean的更多信息,如setter和getter。

您不允许访问任何私有成员字段、类的方法

如果需要控制对类的私有成员的访问,那么必须将它们声明为私有,并提供方法来操作类的实例

控制对私有成员的访问的一种方法是定义setter和getter。但在这种情况下,您仍然允许每个人更改对象的内部状态。例如:

public class ExampleOutterClass{
   private class Example(...){...}
   ---Some Operation to get fromdate, todate, amount)---
   Example ex = new Example (fromdate, todate, amount);
   public Timestamp fromdate = ex.fromdate;
   public Timestamp todate = ex.todate;
   public float amount = ex.amount;
}
public class Point {
  private double x;
  private double y;
  public Point(double x, double y) {
    this.x = x;
    this.y = y;
  }
  public void setX(double x) {
    this.x = x;
  }
  public double getX() {
    return x;
  }
  // ... setter and getter for y
}
public class Point {
  private double x;
  private double y;
  public Point(double x, double y) {
    this.x = x;
    this.y = y;
  }
  public void move(double deltaX, double deltaY) {
    // some validations can be applied here
    x += deltaX;
    y += deltaY
  }
}
另一种方法是定义好的公共API,供其他人使用。在这种情况下,只有类可以更改其内部状态。例如:

public class ExampleOutterClass{
   private class Example(...){...}
   ---Some Operation to get fromdate, todate, amount)---
   Example ex = new Example (fromdate, todate, amount);
   public Timestamp fromdate = ex.fromdate;
   public Timestamp todate = ex.todate;
   public float amount = ex.amount;
}
public class Point {
  private double x;
  private double y;
  public Point(double x, double y) {
    this.x = x;
    this.y = y;
  }
  public void setX(double x) {
    this.x = x;
  }
  public double getX() {
    return x;
  }
  // ... setter and getter for y
}
public class Point {
  private double x;
  private double y;
  public Point(double x, double y) {
    this.x = x;
    this.y = y;
  }
  public void move(double deltaX, double deltaY) {
    // some validations can be applied here
    x += deltaX;
    y += deltaY
  }
}

你的构造器看起来不错。私有的思想是,除非实现公共getter方法,否则不能从类本身外部访问。通常需要隐藏类的内部工作方式。Java编码惯例规定,类名称应以大写字母开头,变量应以小写字母开头。因此,您的类名应该是示例,并且更易于阅读和理解:嵌套类并不完全是外部类的成员,但它们非常相似。就像成员可以访问任何其他成员一样,任何方法都可以调用其他成员,即使是在同一类嵌套类中声明的私有方法也可以访问所有其他成员,并由它们访问。那么应该标记为重复吗