java中可以写静态类_关于类:Java中的静态类有什么用?

我读过,我可以定义一个类为static,但我不明白为什么我需要这样做。静态类有什么好处?我什么时候需要使用它们?我会欣赏例子。

类的static关键字只允许用于嵌套类,在另一个类内。

非静态嵌套类(也称为内部类)和静态嵌套类之间的区别在于,第一个类的对象总是有一个对应的"外部"对象,而后一个类的对象则没有(它们只有私有级别的访问权限,并且在命名空间中)。

这里有一个例子:

class Outer {

static class StaticNested {}

class Inner {}

}

现在我们可以创建如下对象:

Outer o = new Outer();

Outer.StaticNested sn = new Outer.StaticNested();

Outer.Inner i = o.new Inner();

o是i的对应外部对象,而sn没有这样的元素。(通常您将从外部对象的方法创建内部类的对象,在那里您可以简单地编写new Inner(),它将this作为外部对象。)

从Inner的外部,我们无法得到相应的外部物体,但在内部,我们可以写Outer.this来引用外部物体。如果需要,这可以在多个级别上工作。

对,参见Java.Sun.com/DOCS/Booo/JLS/TurdIdEdith/HTML/Helip;

您不应该从第三行的"static class inner"中删除"static"吗?

@Qartal哎呀…你说得对,谢谢。奇怪的是,近5年来没有人发现这一点。

您可以这样将内部类定义为静态类(为了彻底了解,该类将成为静态嵌套类):

class A {

public static class Inner { }

}

这意味着类Inner在某种程度上与A有关,但不附属于特定的实例。这主要是在两者之间建立某种关系的一种方式。

如果你是一个Java初学者,我建议你不要浪费太多的时间去寻找一些有用的应用程序。请记住,这种可能性存在,并且当您将更好地理解面向对象编程一般和Java,特别是,您将再次出现在这里。

需要注意的是,只有内部类可以被定义为静态类,而"普通"类不能。

请注意,JoshuaBloch建议除非有充分的理由,否则所有内部类都应该是静态的。所以提问者不应该担心,除非他们需要,但应该把静态关键字放在上面。

来自Sun认证程序员的Java 6学习指南:

A static nested class is simply a class that's a static member of the enclosing class.... The class itself isn't really"static"; there's no such thing as a static class. The static modifier in this case says that the nested class is a static member of the outer class. That means it can be accessed, as with other static members, without having an instance of the outer class.

显而易见的下一个问题是"static是什么意思?"它的意思是,每个类有一个,而不是每个对象有一个。换句话说,有一个版本是每个人共享的,不与任何特定实例绑定,而不是类的每个实例一个)。这一点听起来很明显,但是在希望使用静态成员并且还希望使用类的情况下,应该使用静态类。静态类有时也可以作为小型助手方法的容器,因为它们可以访问封闭类的私有成员。

以下是我在学校时记得的一个例子:

public class Shapes {

List shapes;

private static class ShapeSorter implements Comparator {

...

}

...

请注意,不能有顶级静态类;它没有可作为成员的封闭类。由于范围问题,也不能在方法内部声明静态类。

关于Java中静态的意思,堆栈溢出有几百个其他问题。以下是一些可以让你去的地方:

什么是"静态"?

为什么你不能在Java中声明一个类作为静态?

JAVA:静态类?

Java中的静态嵌套类,为什么?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值