【问题标题】:What is the purpose of the "new" keyword in Java, PHP, etc.? [duplicate]Java、PHP 等中的“new”关键字的目的是什么? [复制]
【发布时间】:2019-11-24 09:41:42
【问题描述】:

在许多语言中,我们使用new 来实例化一个类的新实例。例如,在 Java 中:

class MyClass {
    int number = 1;

    MyClass(int n) {
        self.number = n;
    }
}
MyClass obj1 = new MyClass(5);

但是,随着我越来越多地使用 Python,我开始想知道为什么 new 关键字甚至是必要的。在 Python 中,我们可以简单地这样做:

class MyClass:
    def __init__(self, n):
        self.n = n
obj1 = MyClass(5)

那么,关键字的用途是什么?是否存在一些我们通过使用关键字来解决的语法歧义?

【问题讨论】:

  • 因为这就是语言的设计方式。因为 Java 是基于 C++ 的,而 C++ 就是这样设计的。
  • @Andreas 我同意 Java 可能拥有它,因为它基于 C++ 拥有它,但是问题变成了“为什么 C++ 拥有它?
  • 您可以就每种语言中的每个语法设计决策提出这个问题。为什么 Python 中没有大括号?为什么分号在 Python/JavaScript 中是可选的?大多数时候,答案将是“只是因为”。其他时候会是“因为 X 语言想要简化 Y 语言的语法”。
  • @DeepSpace 你可以很容易地反驳相反的观点,为什么 Java 和 C++ 在调用函数之前没有使用 call 关键字?通常答案是“因为没有必要,所以为什么要让用户做不必要的工作?”似乎语言语法的基本原理通常遵循一些推理。
  • @GrumpyCrouton Java 的“只是因为”new 被使用只是因为 在 C++ 中被使用。问题是关于“为什么在 Java 中?”,所以答案是:只是因为。关于Java的问题,C++有它的原因并不重要。

标签: java php python syntax


【解决方案1】:

明确地说“我要创建一个类的新实例”

这是为了区别于方法调用,你甚至可以这样做:

public class Main {
    public static void main(String[] args) {
        Foo();
        new Foo();
    }

    public static void Foo() {
        System.out.println("Method");
    }

    public static class Foo {
        public Foo() {
            System.out.println("Class");
        }
    }
}

运行 main 给你

Method
Class

【讨论】:

  • 所以基本上只是为了让方法和子类共享一个名字?
  • 它是否记录在某处?还是你的“感觉”?或者只是常识告诉你的?
  • @michalk 约定我猜。 Java 深受 C 家族的影响,其中内存管理是显式的。这是“新”允许用户更轻松地判断内存分配位置的时代的残余
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 2010-12-11
  • 2011-07-11
相关资源
最近更新 更多