代码之家  ›  专栏  ›  技术社区  ›  user2975787

Java构造函数看起来不像它应该的样子

  •  0
  • user2975787  · 技术社区  · 12 年前

    当我问这个问题时,我参考了Y.Daniel Liang的书《Java编程入门,综合版,第九版》。每次我看到一个使用构造函数创建的对象时,它都是这样的:

    Car engine = new Car(). 
    

    但在Daniel Liang的书中,我发现了以下代码(这里只写了前9行):

       public class SimpleGeometricObject {
          private String color = "white";
          private boolean filled;
          private java.util.Date dateCreated;
    
          /** Construct a default geometric object */
          public SimpleGeometricObject() {
             dateCreated = new java.util.Date();
       }
    

    我不明白的是,为什么对象“dateCreated”不是以正常方式创建的,即:

    SimpleGeometricObject dateCreated = new SimpleGeometrciObject();
    

    我很困惑。

    4 回复  |  直到 12 年前
        1
  •  2
  •   Hosni    12 年前

    实际上dateCreated是java.util包中Class Date中的一个Object 并且位于您正在定义的SimpleGeoMetricObject中

    换句话说,Java人写了这样的话:

      package java.util;
    
     public Class Date{
        //with its own attributes 
       public Date(){
          ...
        //and its own constructor
       }
         ...//and it's own methods
    }
    

    并将其提供给开发人员,以便我们可以在自己的类/对象中使用它,顺便说一下,如果您像这样导入包 import java.util.Date; 在文件的开头,您只需要如下构造Date: Date objectDate = new Date();

        2
  •  0
  •   GermaineJason    12 年前

    dateCreated只是SimpleGeometricObject的一个属性/变量。因此,dateCreated的类型为Date,技术上可以使用以下方法调用其构造函数:

    dateCreated = new java.util.Date();
    
        3
  •  0
  •   Alexandros    12 年前

    您不需要:

    java.util.Date dateCreated=new java.util.Date();
    

    因为dateCreated字段数据类型已在中定义:

    private java.util.Date dateCreated;
    

    因此,基本上:

     private java.util.Date dateCreated 
    

    定义数据类型,但初始化为null

     dateCreated=new java.util.Date();
    

    初始化dateCreated对象的默认值

        4
  •  0
  •   Ernest Friedman-Hill    12 年前

    他只是为Date类使用了完整的限定名,包括包名“java.util”。仅根据我们在这里看到的情况,他没有理由这样做。唯一真正的理由是,如果在另一个包中有另一个类,也称为Date,并且他需要能够区分这两个类。或者也许他只是出于某种原因提出了一个观点,Date类就在那个特定的包中。