class Test{
private String name;
private final int age;
public final double grade;
public String getName()
{
 return name;
}
public int getAge()
{
 return age;
}
public double getGrade()
{
 return grade;
}
public static void main(String[] args)
{
 Test t=new Test();
 t.name="zpcand";//可以
 t.age=23;//不可以,为什么?final修饰的变量不可以被重新  //赋值,但这里是程序中第一次对其赋值啊。。而且final修  //饰的变量不会被系统默认初始化的啊???
   t.grade=77.3;//不可以,为什么?
 System.out.println("个人信息:"+t.getName +t.getAge+ t.getGrade);
}
}final修饰的变量不可以被重新赋值,但这里是程序中第一次对age,grade这两个变量赋值啊,为什么不可以?而且final修饰的变量不会被系统默认初始化的啊.

解决方案 »

  1.   


    public static void main(String[] args) {
            Test t=new Test();
    /*
            t.name = "zpcand";//可以
            t.age = 23;//不可以,为什么?final修饰的变量不可以被重新
            //赋值,但这里是程序中第一次对其赋值啊。。而且final修 //饰的变量不会被系统默认初始化的啊???
            t.grade = 77.3;//不可以,为什么?
            System.out.println("个人信息:" + t.getName() + t.getAge() + t.getGrade());
    */
        }
    //编译期一次只能报有限个错误,按照上面的注释掉,再编译一下看看
      

  2.   

    final关键字修饰的时候,只能在定义的时候进行赋值。
    你做的操作其实是修改final修饰的值,所以肯定会出错。
    你的应该也会提示你的final变量没有赋初始值。
      

  3.   

    楼主,final型实例变量的初始化就俩地方,一个是变量定义处,一个是构造函数,你自创的在main中初始化让我很欣赏哈~~
      

  4.   

    final修饰的是常量
    常量是不能改变的
    private final int age = 20;
    public final double grade = 90.5;
    只能在初始化的时候赋值
      

  5.   

    哦,原来final赋值的地方是规定死的。
      

  6.   

    多看报错的提示
    提示应该会给你很多启发的。
    不一定要来csdn上面问的
    当你通过提示修改代码后运行成功
    你就能想明白了。。
      

  7.   


    final修饰变量开始直接赋值,以后取值就行,不能修改了
      

  8.   

    final就是常量,可以定义初始化和构造器初始化,因为已经是常量,必须在那两个地方初始化,是最终不变的
      

  9.   

    其实我直接用DOS下的Javac编译的。还没开始用IDE。