【问题标题】:Java: Everything is an objectJava:一切都是对象
【发布时间】:2014-06-07 10:14:16
【问题描述】:

让我们来看看非常简单的代码:

public class MyProg {

    public static void main(String[] args)
    {
         System.out.println("hello world");
    }
}

MyProg 是一个类。我的问题是我们如何从这个类中实例化一个对象?必须在任何类中的构造函数方法在哪里?是什么导致“MyProg”的行为与 Java 中的任何其他普通类一样。

【问题讨论】:

  • “编译器会自动为任何没有构造函数的类提供无参数的默认构造函数。” 更多信息,请阅读:docs.oracle.com/javase/tutorial/java/javaOO/index.html
  • Stackoverflow 不能替代 Java 书籍或教程。您的问题在任何有关类和对象的章节中都有回答。您的问题表明没有研究工作。
  • 这个问题似乎跑题了,因为它是关于学习java的
  • 这个问题似乎是题外话,因为任何一本正经的 Java 书籍或教程都涵盖了这个问题。
  • 并非 Java 中的所有内容都是对象。例如原始类型:intlongboolean...

标签: java class oop


【解决方案1】:

您可以创建一个 MyProg:

MyProg myProg = new MyProg();

这是一个完全有效的类,就像任何其他类一样。它只是没有任何方法,所以它没有做那么多。

您的“主”类的特别之处在于 JVM 被告知只运行 main 方法。有这样的类是很常见的:

public class App {
    public static void main(String[] args) {
        App app = new App();
        // do stuff with app
    }
}

这是main 方法首先实例化该类的对象的情况。请注意,main 始终是static,这是它与对象的关联,让您在学习编写第一个 Java 程序时不必考虑对象。

【讨论】:

    【解决方案2】:

    您尚未创建该类的对象。如果您没有提供构造函数,Java 编译器将添加一个默认的无参数构造函数

    MyProg(){
      //This is the default no argument constructor.
    }
    

    关于默认构造函数的更多观点(根据 JLS):

    如果类不包含构造函数声明,则自动提供不带参数的默认构造函数。
    如果该类被声明为 public,则默认构造函数被隐式地赋予访问修饰符 public。
    如果类被声明为受保护,则默认构造函数被隐式赋予访问修饰符 protected。
    如果该类被声明为私有,则默认构造函数被隐式地赋予访问修饰符私有。
    否则,默认构造函数具有没有访问修饰符所隐含的默认访问权限。

    要实例化一个对象,你必须这样做:

    MyProg myProg = new MyProg();
    

    new 运算符通过为新对象分配内存并返回对该内存的引用来实例化一个类。 new 运算符还调用对象构造函数。

    【讨论】:

      【解决方案3】:

      如果你想创建这个类的对象,你可以写new MyProg()。但是这样做没有多大意义,因为这个类不存储数据,也没有非静态方法;所以它的一个对象根本没有用。

      它的构造函数由编译器自动生成。但如果您不希望这种情况发生,您可以添加自己的构造函数。

      祝你学习 Java 好运。但我不认为在 Stack Overflow 上提问是最好的开始方式。如果您使用在线 Java 教程或投资一本书,可能会更好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-26
        相关资源
        最近更新 更多