【发布时间】:2018-03-29 12:18:01
【问题描述】:
我们使用 System.out.println 而不实例化它或创建它的对象。数学课和许多其他课程也是如此(我猜)。这些课程有什么特别之处吗?我们可以以同样的方式使用这些类中声明的类和方法吗?请帮忙。
【问题讨论】:
-
我想你在问为什么这个类 API 保持静态而不是实例,对吗?
我们使用 System.out.println 而不实例化它或创建它的对象。数学课和许多其他课程也是如此(我猜)。这些课程有什么特别之处吗?我们可以以同样的方式使用这些类中声明的类和方法吗?请帮忙。
【问题讨论】:
这是一种叫做“静态”的方法。为了调用静态方法,您不需要类的实例。
这还有其他副作用,例如不存在的“this”,因此静态方法不能调用实例方法。
这主要用于某些通常是无状态的实用程序类。
数学就是一个很好的例子。
我建议阅读一些关于 Java 中的静态方法和静态方法的知识。
【讨论】:
您不必为System 和Math 类创建对象,因为这些类中的方法和变量是static。这意味着它们属于类本身,而不是类的instances。
参考见:
【讨论】:
为什么我们不必在 java 中创建 System 或 Math 类的对象并直接使用它们?
因为Math的方法被声明为static方法,并且因为System.in/System.out/System.err是static变量。
这些课程有什么特别之处吗?
没有。任何声明为static 的变量或方法都会以这种方式运行。
我们可以以同样的方式使用这些类中声明的类和方法吗?
我真的不明白你在那里问什么。但是,如果您问是否可以创建 Math 或 System 的实例,以便您可以执行以下操作:
Math myMath = new Math();
myMath.min(1, 2);
不,你不能。这两个类都没有公共构造函数,所以你不能new它们。
如果你能做到,那就太糟糕了!
参考:
【讨论】:
首先,你不能创建 Math 类的实例,因为它只有一个构造函数,并且它被标记为私有,你不能从类外部创建它的实例。 Snapshot of the source code of the class Math 其次,您不需要这样做。Math类中的所有方法都是静态的,只需使用类名和点运算符即可调用其中任何一个。
【讨论】:
系统类不能实例化/创建对象,因为这个系统类有私有构造函数。 而且它的所有成员和方法都是静态的,可以通过类名直接访问。 这个简单而有效的答案会对您有所帮助。
【讨论】:
我们不会实例化所有其他类或方法,因为 JVM(Java 虚拟机)已经将它们加载到项目中,因此我们可以一次又一次地使用这些类。一个这样的例子是 main 方法。这些类/方法已经为我们预定义好了,所以我们不需要实例化这些类/方法,因为它们是静态的。
【讨论】:
您无需创建System 和Math 类的对象即可使用它,因为它们具有静态方法。静态方法属于类,因此不需要实例化。
虽然你可以创建它的对象,然后也可以使用那些方法,但是为静态方法创建一个类是没有用的。
【讨论】:
您不必为了使用math 类的方法而实例化对象。
static。这里的方法可以由类本身直接调用。JVM 中定义。我们不需要实例化来使用这个类的方法。【讨论】: