理解java中的类

时间:2015-01-31 20:57:52

标签: java class conceptual

所以我对

的概念感到有些困惑
  

在没有首先实例化的情况下调用类的实例方法   一个对象

这在java中如何工作?我是否必须实例化一个对象,以便我可以在对象上调用一个方法。

例如,以下是我的课程。

public class Date{
        public String month;
        public int day;
        public int year;
    public void writeOutput()
    {
        System.out.println("Today is : " + this.month + " " + this.day + " , " + this.year);
    }
}

public class DateTest{
    public static void main(String[] yolo){
        Date today;
        today = new Date();
        today.month = "January";
        today.day = 31;
        today.year = 2015;
        today.writeOutput();
    }
}

因此我必须首先实例化一些日期?我可以在不实例化某种“日期”对象的情况下调用实例方法吗?

4 个答案:

答案 0 :(得分:3)

这是我的评论的副本:

  

如果它不存在,你可以养狗吗? (而且只有概念   狗存在)。现在想象狗作为班级的概念,   树皮作为一种方法而雷克斯作为狗的一个例子。所以是的,你需要   instanciate a class(Dog Rex = new Dog();)为了使用方法   (Rex.bark())。当然,您可以使用允许的静态方法   做一些像Dog.bark()这样的事情,但它并不是真正的OOP。

答案 1 :(得分:1)

关于:

  

因此我必须首先实例化一些日期?我可以调用实例方法而不实例化" date"某种对象?

正确。要调用Date的实例方法,必须首先创建一个Date对象,当前正在main方法中执行该对象。

    Date today;  // declare Date variable today
    today = new Date();  // create instance and assign it to today

请注意,您的代码可以直接操作Date字段,这是应该避免的。

答案 2 :(得分:1)

语句today = new Date();实例化class Date的实例,并将该实例的引用分配给变量today

这允许通过today变量引用实例变量和方法。如果没有实例,那些成员将不存在。

答案 3 :(得分:0)

是的,您可以通过使用静态字段和工厂方法来调用方法而无需实例化。

public class Date{
    public static String month;
    public static int day;
    public static int year;
public static void writeOutput()
{
    System.out.println("Today is : " + this.month + " " + this.day + " , " + this.year);
}}

然后您可以执行以下操作:

Date.month = "January";
Date.day = 1;
Date.year=2015;
Date.writeOutput();

这样你就不需要实例化了。但是,这不一定是好的做法。如果您不需要类变量,则静态工厂方法很好,但是将必要的参数传递给方法。例如:

public class Date
{

public void writeOutput(String year, int day, int month)
{
    System.out.println("Today is : " + month + " " + day + " , " + year);
}
}

然后你可以打电话

Date.writeOutput("January", 1, 1);