所以我对
的概念感到有些困惑在没有首先实例化的情况下调用类的实例方法 一个对象
这在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();
}
}
因此我必须首先实例化一些日期?我可以在不实例化某种“日期”对象的情况下调用实例方法吗?
答案 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);