java objects, shared variables
我有一个简单的问题。如果我在一个在主类中被[声明]的对象中声明一个变量,如下所示:
1 | public static int number; |
(通常我这样声明:
1 | private int number; |
号
)
它能用在另一个对象中吗?这个对象也是在主类中被声明的?顺便说一句,我不在乎ATM的安全性,我只想做点工作,不在乎保护)
下面是Java语言规范的一个引述:
JLS 8.3.1.1If a field is declared
static , there exists exactly one incarnation of the field, no matter how many instances (possibly zero) of the class may eventually be created. Astatic field, sometimes called a class variable, is incarnated when the class is initialized.A field that is not declared
static (sometimes called a non-static field) is called an instance variable. Whenever a new instance of a class is created, a new variable associated with that instance is created for every instance variable declared in that class or any of its superclasses.[Example program follows...]
号
简而言之,
由于它们属于类,因此不需要访问所述类的实例(假设有足够的可见性),实际上,通过实例而不是类型表达式访问
- Java静态方法最佳实践
- 静态方法
- Java中静态方法调用非静态方法
- 非静态变量不能从静态上下文引用(Java)
- 何时不在Java中使用静态关键字?
- 静态变量和方法
这里实际上有两个问题:内部类上下文中的public和private,以及静态变量。
第1部分:
静态意味着您不需要类的实例来访问该变量。假设您有如下代码:
1 2 3 |
您可以通过以下方式访问该属性:
1 |
号
如果删除静态关键字,则应执行以下操作:
1 |
您正在实例上下文中访问属性,该实例是由new关键字创建的类的副本。
第2部分:
如果在同一个Java文件中定义了两个类,其中一个必须是内部类。内部类可以有一个静态关键字,就像属性一样。如果是静态的,可以单独使用。如果不是静态的,则只能在类实例的上下文中使用。
前任:
1 2 3 4 | class MyClass { public static class InnerClass { } } |
。
然后你可以做:
1 | new MyClass.InnerClass(); |
如果没有"静态",您将需要:
1 | new MyClass().new InnerClass(); //I think |
。
如果内部类是静态的,则只能从外部类访问静态属性。如果内部类是非静态的,它可以访问任何属性。内部类不尊重公共、受保护或私有的规则。因此,以下是合法的:
1 2 3 4 5 6 7 8 9 |
。
如果内部类具有关键字static,这将不起作用,因为消息不是static。
如果包含"数字"的类称为MyClass您可以从任何方法中将其称为myclass.number。
但是,对变量执行此操作并不是好的设计。
由于您的