声明java类中的变量(private,static,final)

时间:2016-11-01 07:44:12

标签: java static private

Java中有很多关于staticfinal变量的讨论。 我真的想知道以下声明之间的区别。似乎令人困惑

public class foo() {
    private static final int a;
    private static int b;
    private final int c;
    private int d;
    public static final int e;
    public static int f;
    public final int g;
    public int h;
}

可以在班级内外修改/访问哪一个?

P.S:In Java, difference between default, public, protected, and private中的问题是一个更大的范围。我正专注于一些令人困惑的问题!

6 个答案:

答案 0 :(得分:4)

private表示只能通过类foo的实例访问它。

public表示可以从拥有对类foo实例的引用的任何对象访问它。

static表示它属于该类,因此它由所有foo个实例共享。

final表示无法更改其初始值。

初始化后,

final属性无法修改。可以修改static个属性,但请记住,所有实例都共享新值。 private属性只能由foo实例本身修改。

这意味着static final属性:无法修改;由所有实例共享。

答案 1 :(得分:1)

public属性可以从任何类访问。

private属性只能在声明它的类中访问。 (这就是我们需要在其他类中包含getter和setter来检索私有变量的原因)

final属性无法修改并设置为其他值。

static属性在类本身及其实例中被访问。

答案 2 :(得分:1)

private static final int a; // accessed only         / inside only
private static       int b; // accessed and modified / inside only
private        final int c; // accessed only         / inside only
private              int d; // accessed and modified / inside only
public  static final int e; // accessed only         / inside and outside
public  static       int f; // accessed and modified / inside and outside
public         final int g; // accessed only         / inside and outside
public               int h; // accessed and modified / inside and outside

如你所见:

  • static无论如何都没有效果
  • finalaccessed and modified缩减为accessed only
  • private / public确定inside only / inside and outside

答案 3 :(得分:0)

在类标识符的上下文中,语句具有如下所述的含义: 首先,privatepublic关键字是访问符号,这意味着所有具有private关键字的成员仅在声明它们的类的范围内可见。具有public关键字的所有成员都可以在班级范围之外查看。

e.g

class foo{
      public int myVar;
      private int myBar;
}

现在,如果你实例化`foo'

foo f = new foo();
f.myVar // is valid
f.myBar // is invalid and generates compile time error.

static关键字表示标识符的分配对于类的所有实例都是通用的,因此在编译器第一次遇到类型定义时分配此标识符。因为,任何类的类型分配只发生一次,所以只保留了一个静态字段实例,可以在该类的所有对象中访问它。

final关键字表示(在标识符的上下文中),这些标识符可以初始化一次,然后关闭以进行任何修改。 (在方法的上下文中,它意味着派生类不能覆盖该方法)。

现在回到你的问题,以下陈述将意味着:

private static final int a; 
// 'a' has scope local to the class and its value is accessible through Type
// and shared across all instances of that type and its value cannot be
// changed once initialised. 
private static int b;
// 'b' has scope local to the class and its value is accessible through Type
// and shared across all instances of that type.
private final int c;
// 'c' has scope local to the class and its value cannot be changed once 
// initialised.
private int d;
// 'd' has scope local to the class
public static final int e;
// 'e' has scope beyond the class, it can be accessed outside the class 
// through an instance of this class and its value is accessible through
// Type and shared across all instances of that type 
// and its value cannot be changed once initialised. 
public static int f;
// 'f' has scope beyond the class, it can be accessed outside the class and   
// value is accessible through Type and shared across all instances of that
// type
public final int g;
// 'g' has scope beyond the class, it can be accessed outside the class
// through an instance of this class 
// and its value cannot be changed once initialised.
public int h;
// 'h' has scope beyond the class, it can be accessed outside the class
// through an instance of this class

干杯!

答案 4 :(得分:0)

public - 声明为public的类,成员方法,构造函数,接口等可以从任何其他类访问。​​我们可以说它具有全局访问权。

private - 声明为private的成员方法,memeber变量和构造函数只能在声明的类本身内访问。如果类中存在公共getter方法,则可以在类外部访问声明为private的变量。

final - final将确保该字段为常量且无法更改

static - 它与类型相关联,而不与实例相关联。即,对于所有对象,只有一个字段的副本,而不是每个对象的单个副本。意味着该字段的所有对象之间将共享一个字段副本

static final - 该类的所有实例将共享相同的值,并且在首次初始化后无法修改。

答案 5 :(得分:-2)

  1. private意味着在课外不能看到它。
  2. static表示变量与类关联,而不是与对象关联。这意味着对于任何对象,其静态变量将由同一个类的所有对象共享。 (more information)
  3. final表示一旦为变量赋值,就无法重新分配。
  4. 在课堂外,您只能访问public个变量,但无法修改final个变量。