私有静态最终字段

use*_*548 11 java field

我只想澄清一下.有什么区别 -

private static int STUDENT_AGE = 18; 
Run Code Online (Sandbox Code Playgroud)

private static final int STUDENT_AGE = 18; 
Run Code Online (Sandbox Code Playgroud)

在球场内?

Jon Skeet解释说"根本与某个特定实例无关",好吧我想我明白了.那么最终在这种情况下究竟做了什么呢?

下面的代码不起作用是因为学生年龄被指定为静态最终?这是否意味着默认年龄根本无法覆盖?那么是否可以创建指定非默认年龄的构造函数?

private String myName;
private String myAddress;
private int myYearEnrolled;
private String myGender; 
private static final int STUDENT_AGE = 18; 

public Student(String name, String address, int year, String gender) {
    myName = name;
    myAddress = address;
    myYearEnrolled = year;
    myGender = gender; 
}

   public Student(int age)
{
     STUDENT_AGE = age; 
}
Run Code Online (Sandbox Code Playgroud)

ata*_*man 21

static表示"根本不与特定实例相关" - final表示您无法在初始化后更改此值,并且必须初始化此值.

组合finalstatic使您能够创建常量.这不再以公共方式推荐(完全可以用于私人环境中的魔术数字),因为它不是类型安全的.使用Enumpost java 1.5或按照Joshua Blochs Effective Java和这个问题的建议创建自己的类型安全enum pre java 1.5 .

备注:大约一年后阅读这篇文章,我想我需要强调public static final一般字段没有任何问题,只是命名常量应该用enums或其他类型安全替代.


Sum*_*sai 6

声明变量后final,其值不能在以后更改.在您提供的代码示例中,声明了一个常量,用于定义特定活动的学生年龄.这可能意味着将存在某种活动的条件,即将学生的年龄与此常数进行比较.如果学生年龄大于18岁,那么只允许他继续学习.