【问题标题】:Java OOP conceptJava OOP 概念
【发布时间】:2013-06-10 05:44:23
【问题描述】:
public class MyClass {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

从上面,如果我们说MyClass是类,public static void main(String[] args)是方法,那么我想知道代码的哪一部分会被认为是对象。

如果说类有对象,对象有方法,那么在上面的代码中,对象是哪一部分?这里有创建对象吗?

【问题讨论】:

  • 简答;对象是类的实例
  • @RaduMurzea 实际上对于初学者来说更难解释......所以答案更少

标签: java oop object-oriented-analysis


【解决方案1】:

static 方法不属于对象引用,而是属于类。您可以执行static 方法而无需创建类的实例。知道这一点后,将在此处创建的唯一对象引用将是:

  • String[] args对象
  • args 数组中的每个 String
  • "Hello world"String.

请注意,args 及其内容不是由您创建的,JVM 会这样做(感谢 Thilo 的评论)。

【讨论】:

  • 而且这些字符串也不是由您的代码创建的(JVM 启动器会自动创建)。
  • 这里肯定只创建了两个对象 - "Hello World!" 和数组 args
  • 实际上,字符串字面量“Hello World”可以说是由 main 方法创建的(尽管严格来说,字符串的工作方式也不是这样)
  • +1 和.. 不知道这是否有助于混淆更多,但outPrintStream 对象:P
  • 只有在执行程序时将参数发送到主方法时才会创建 arg 内容。否则,根据 OP,只有 1 和 3 适用。
【解决方案2】:

在上述情况下,不会创建您的类的对象。为此,您需要编写:

MyClass myclass = new MyClass();

【讨论】:

    【解决方案3】:

    那里没有创建对象。因为这是程序启动的主要方法。 如果不是static,否则需要对象的instance才能执行。

    【讨论】:

    • "Hello world" String 呢?
    【解决方案4】:

    静态方法不需要创建对象来执行。加载类时,类上的静态成员由 JVM 自动加载。

    JVM 专门为在 Java 中执行找到 main 方法并从执行开始执行它。

    然后,main 方法中的每个语句都会执行到终止点。

    在main方法中String args[]是一个对象数组,当你需要通过命令行传递参数时它很有用。

    所以,最终static 方法在JVM加载类 时执行。所以我们不需要实例/对象来执行main 方法

    那么主要方法是什么时候加载到 JVM 上的呢?它在您初始化创建任何类似这样的对象时加载

    MyClass myobj = new MyClass();
    

    它调用默认构造函数MyClass()并加载类

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      相关资源
      最近更新 更多