2

我是一名新的 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. 为什么我需要将 my 放在 myinstance variable上方main method?- 为什么这里面不像局部变量?
  2. 我们传入了parametersinside constructor (String Text),但是为什么底部方法没有parametersinside of printText()
  3. 在定义那个对象时 是否constructor需要?classclass
  4. classes当我删除constructor,时检查我的另一个object。我对 a 的点非常模糊,constructor我仍然对我们为什么需要使用它感到模糊?

示例:
如果我删除了,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. 类=门
  2. 创建对象 = 复制类和调整门类型的能力,例如木门或金属门。
  3. 方法 = 关门/开门

构造函数会做什么来帮助解决上述问题?

4

4 回答 4

2
  1. 实例变量放置在任何类方法体之外。实例变量可以被类的所有方法使用(除非这些方法是静态的)#。是否将它们放在顶部/底部是个人喜好,但Java 样式指南建议将它们放在顶部。所以跟随它。

  2. public void printText()不必,因为它只关心在这个类上可以访问的成员变量 textToPrint(参见#

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

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

于 2013-07-10T09:03:21.067 回答
1

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

    公共 HelloWorld() { 超级(); }

  4. 我猜你对静态调用有点困惑。即使您没有相应类的对象,也会调用静态方法。System.out.println("你好,世界!"); 例如是这样一个静态调用。构造函数必须定义创建对象的方式。因此,它们在每个班级中无处不在。如果您只是不构建自己的自定义构造函数,这通常意味着,在实例化期间不必执行任何初始操作。
我希望,这可以以某种方式帮助你。乍一看肯定很难理解所有面向对象的概念,我感觉更难解释它。

于 2013-07-10T09:16:49.220 回答
0
  1. 这是范围的问题。您希望能够再次在此处访问该变量:public void printText() { System.out.print(textToPrint); } 这就是您在开头而不是在主函数中声明它的原因。
  2. 只是答案1的结论:你不需要传递一个变量,因为textToPrint是一个实例变量

祝你学习顺利!:)

于 2013-07-10T09:02:43.230 回答
0

这里有一些答案:

  1. 如果您不想这样做,则根本不需要放置此变量。您总是可以将它们从一种方法传递到另一种方法。
  2. 因为它保存在变量 textToPrint 中,该变量在对象 myObject 的整个生存期内都可用,并且已经在构造函数中设置。如果你喜欢这样做,你可以在方法的调用上传递它
  3. 有一个默认构造函数。不写一个就用这个。
  4. 是的,您可以像在上一个示例中那样简单地进行操作。但我想这个练习的想法是向你展示构建应用程序的不同方法
于 2013-07-10T09:04:00.103 回答