为什么在Java中不能将类声明为静态?
当前回答
如上所述,一个类不能是静态的,除非它是另一个类的成员。
如果你想要设计一个“不能有多个实例”的类,你可能想要研究一下“单例”设计模式。
这里是初学者单例信息。
警告:
如果您正在考虑使用 单例模式,抵制与所有 你的可能。这是最简单的方法之一 设计模式来理解,可能 最受欢迎的,绝对是 大多数滥用。 (来源:JavaRanch,如上图所示)
其他回答
只有嵌套类可以是静态的。通过这样做,您可以使用嵌套类而无需外部类的实例。
class OuterClass {
public static class StaticNestedClass {
}
public class InnerClass {
}
public InnerClass getAnInnerClass() {
return new InnerClass();
}
//This method doesn't work
public static InnerClass getAnInnerClassStatically() {
return new InnerClass();
}
}
class OtherClass {
//Use of a static nested class:
private OuterClass.StaticNestedClass staticNestedClass = new OuterClass.StaticNestedClass();
//Doesn't work
private OuterClass.InnerClass innerClass = new OuterClass.InnerClass();
//Use of an inner class:
private OuterClass outerclass= new OuterClass();
private OuterClass.InnerClass innerClass2 = outerclass.getAnInnerClass();
private OuterClass.InnerClass innerClass3 = outerclass.new InnerClass();
}
来源:
关于嵌套类的Oracle教程
关于同一话题:
Java:静态与非静态内部类 Java内部类和静态嵌套类
所以,我来晚了,但这是我的两种观点——哲学上补充科林·赫伯特的答案。
在高层次上,你的问题涉及对象和类型之间的区别。虽然有很多Car(对象),但只有一个Car类(类型)。将某些内容声明为静态意味着您在“类型”空间中操作。只有一个。顶级类关键字已经在“type”空间中定义了一个类型。因此,“公共静态类Car”是多余的。
如上所述,一个类不能是静态的,除非它是另一个类的成员。
如果你想要设计一个“不能有多个实例”的类,你可能想要研究一下“单例”设计模式。
这里是初学者单例信息。
警告:
如果您正在考虑使用 单例模式,抵制与所有 你的可能。这是最简单的方法之一 设计模式来理解,可能 最受欢迎的,绝对是 大多数滥用。 (来源:JavaRanch,如上图所示)
默认情况下,顶级类是静态的。默认情况下,内部类是非静态的。您可以通过显式地将内部类标记为静态来更改它们的默认值。顶级类由于是顶级类,所以不能具有非静态语义,因为没有父类可以引用。因此,无法更改顶级类的默认值。
我认为这可能就像喝一杯咖啡一样简单! 看看这个。 定义类时不显式使用static关键字。
public class StaticClass {
static private int me = 3;
public static void printHelloWorld() {
System.out.println("Hello World");
}
public static void main(String[] args) {
StaticClass.printHelloWorld();
System.out.println(StaticClass.me);
}
}
这不是静态类的定义吗? 我们只使用绑定到类的函数。 注意,在这种情况下,我们可以在该嵌套中使用另一个类。 看看这个:
class StaticClass1 {
public static int yum = 4;
static void printHowAreYou() {
System.out.println("How are you?");
}
}
public class StaticClass {
static int me = 3;
public static void printHelloWorld() {
System.out.println("Hello World");
StaticClass1.printHowAreYou();
System.out.println(StaticClass1.yum);
}
public static void main(String[] args) {
StaticClass.printHelloWorld();
System.out.println(StaticClass.me);
}
}
推荐文章
- 如何添加JTable在JPanel与空布局?
- Statement和PreparedStatement的区别
- 为什么不能在Java中扩展注释?
- 在Java中使用UUID的最重要位的碰撞可能性
- 转换列表的最佳方法:map还是foreach?
- 如何分割逗号分隔的字符串?
- Java字符串—查看字符串是否只包含数字而不包含字母
- Mockito.any()传递带有泛型的接口
- 在IntelliJ 10.5中运行测试时,出现“NoSuchMethodError: org.hamcrest. matcher . descripbemismatch”
- 使用String.split()和多个分隔符
- Java数组有最大大小吗?
- 在Android中将字符串转换为Uri
- 从JSON生成Java类?
- 为什么java.util.Set没有get(int index)?
- Swing和AWT的区别是什么?