关于hello world,实例变量和构造函数(Java student)的几个问题

时间:2013-07-10 08:47:49

标签: java methods constructor

我是一名新的java学生,我们正在撰写我们的第一份申请 在深入了解这些章节之前,我想澄清一下我的困惑。

以下是我的示例代码:

public class HelloWorld
{
    // Instance Variable?
    private String textToPrint;
    //main method     
    public static void main(String [] args)
    {
        //Creating first object from our helloworld.java class 
        HelloWorld myObject = new HelloWorld("Hello, World!");
        // This is calling our method printText() created below, this knows to 
        myObject.printText();
    }
    // Constructor 
    public HelloWorld(String text)
    {
        // initialise instance variables
        textToPrint = text;
    }
    // First Method
    public void printText()
    {
        System.out.print(textToPrint);
    }
}

问题:

  1. 为什么我需要将instance variable放在main method之上?       - 为什么这不像局部变量?
  2. 我们在parameters内传递了constructor (String Text),但是 为什么底部方法在parameters内没有printText()
  3. 定义对象时constructor是否需要class class
  4. 当我删除classesconstructor时,请查看我的其他object。 我对constructor的观点非常模糊,对我来说仍然很模糊 为什么我们需要使用它?
  5. 示例:
    如果我删除了constructor,我仍然可以将“Test”的局部变量传递到System.out.println()方法的括号中。

        public class Testing
        {
           public static void main(String [] args)
           {
               String test = "Hello world";
               System.out.println(test);
           }
    
        }
    

    或只是

        public class Simple
        {
            public static void main(String [] args)
            {
            System.out.println("Hello, World!");
            }
        }
    

    以上两者都没有对象或方法,所以我假设constructor用于帮助定义这些?

    为即将成为java程序员的人提供一些友好的提示。

    下面我的第一个评论的另一个编辑: 我目前对OOP的理解。

    1. Class = Doors
    2. 创建对象=复制类和能力以调整门的类型,例如木制或金属。
    3. 方法=关闭/打开门
    4. 构造函数将如何帮助实现上述目标?

4 个答案:

答案 0 :(得分:2)

  1. Instance variables被放置在任何类方法体之外。 实例变量可以由类的所有方法使用(除非这些方法是 static 。个人喜好是将它们放在顶部/底部,但Java style guidelines建议将它们置于顶部。所以请遵循它。

  2. public void printText()不必,因为它只关心member variable textToPrint,这个类可以访问(参见

  3. 如果您不编写自己的构造函数,则会自动创建默认构造函数(没有参数的构造函数) 。阅读this了解更多信息 - 没有比教程更好的答案。

  4. 当您需要初始化新Object的状态时,您需要一个构造函数。请参阅tutorial中的示例以更好地理解这一点。

答案 1 :(得分:1)

  1. 实例变量放在方法之外,因为它们可用于整个对象/实例。将变量放在方法中使它们成为局部变量,这使得它只能从方法内部访问。因此,当多个方法尝试访问相同的值时,通常首选实例变量。
  2. 由于您已经通过构造函数将文本传递给实例,因此printText-method不再需要任何参数。由于文本存储在实例变量中,因此可以稍后访问它(当调用printText时)。
  3. 是的,类中需要构造函数。这并不意味着您必须自己编写代码。如果不编码构造函数,将自动插入默认构造函数,如下所示:

      

    public HelloWorld(){super(); }

  4.   
  5. 我猜你对静态通话有点困惑。即使您没有相应类的对象,也会调用静态方法调用。 System.out.println(“Hello,World!”);例如是这样的静态调用。构造函数是定义方式,如何创建对象的必要条件。因此,它们在每个班级都是无所不在的。如果您不构建自己的自定义构造函数,通常意味着在实例化期间不必执行任何初始化操作。
  6.      我希望,这可以帮助你。第一眼看到所有面向对象的概念肯定很难理解,我觉得解释它更难。

答案 2 :(得分:0)

  1. 这是范围问题。您希望能够再次访问此变量:public void printText() { System.out.print(textToPrint); } 这就是你在开头而不是在主函数中声明它的原因。
  2. 只是答案编号1的结论:你不需要传递一个变量,因为textToPrint是一个实例变量
  3. 祝你好运! :)

答案 3 :(得分:0)

这里有一些答案:

  1. 如果您不想这样做,则根本不需要放置此变量。您可以将它们从一种方法传递到另一种方法。
  2. 因为它保存在变量textToPrint中,它可以在构造函数中设置的objec myObject和alredy的整个实时期间保存。如果您愿意,可以通过方法的调用传递它
  3. 有一个默认构造函数。如果你不写一个,将使用这个。
  4. 是的,你可以像上一个例子中那样完成它。但我想这个练习的想法是向你展示建立你的applikation的不同方法