final没赋值,用构造方法赋值,为什么还报错?

来源:9-5 Java 中的 final 的使用

转行写代码

2016-04-08 16:54

http://img.mukewang.com/570771660001295004210292.jpg为什么还报错





写回答 关注

12回答

  • 慕少9615151
    2018-07-24 16:09:32

    构造方法
    特点:
    1.方法名称和类名相同
    2.不用定义返回值类型
    3.不可以写return语句


  • qq_小鼬_03824441
    2016-08-23 10:21:28

    你写的public void eat (){}不是构造方法,应该是  public Animal(){}    和类名相同

  • Sky_X
    2016-08-15 22:59:24

    你写的那个不是构造方法

  • Sky_X
    2016-08-15 22:44:57

    final修饰之后就已经是常量了,常量是不会被赋值的

  • 求知的蟑螂
    2016-07-15 13:46:16

    final 修饰一个变量时,该变量只能被赋值一次,为常量。

    final public int age;  

    已经定义age变量为常量了,初始化了。

    weixin...

    该解释说的对。 public int age;(age作为成员变量,如果在定义的时候没有被赋值,那么,虚拟机就会给该变量赋默认值,int类型的默认值是0,所以此时,属性age已经有值了,值为0。然后加上final以后就变为public final int age;此时该属性age就变为最终变量,最终变量的意思是 值不可以被改变,那么这个age的值为0是不可以被改变的。所以,你在下面eat();方法里面,编写的age=10;就会报错。 报出的错误异常就是: 错误: 无法为最终变量age分配值,age=10;)

    2019-06-17 15:44:22

    共 1 条回复 >

  • 雪中_悍刀行
    2016-07-09 18:20:19

    其中  eat()  是普通方法,不是构造方法,亲,看清楚了

  • cherry洋丁
    2016-04-10 08:01:35

    你那个eat()也不是构造方法啊,final修饰的属性在声明时没赋值,是可以在构造方法里赋值的。

    public class Animal {

    final public int age;

    public void eat(){

    System.out.println("动物具有吃东西的能力");

    }

    public Animal(){

    System.out.println("Animal执行了");

    age=20;

    }

    }


  • nizhuan1130
    2016-04-09 10:14:42

    楼上说的不对,Java里面final可以进行留白,并且在构造方法里面赋值。

    public class Test {
       private final int testNum;
       public Test(int test) {
          this.testNum = testNum;
       }
    }

    或者

    public class Test {
       private final int testNum;
       public Test() {
          testNum = 10;
       }
    }

    都是可以的。问题里不可以是因为并没有使用构造方法而是在方法里面赋值,这是不可以的。

    楼上说的例子里面,因为有了static关键字,所以这个量是属于类的,就必须要在初始化的时候赋值,不能留白。而没有关键字的static的时候,量是在对象初始化的时候才初始化,所以可以在构造方法里面赋值。

    nizhua...

    第一段代码里面构造方法的参数应为testNum,打错了不好意思。

    2016-04-09 10:16:39

    共 1 条回复 >

  • changrui0608
    2016-04-09 10:02:57

    Java中final的设计就是这样的,只能在定义的时候赋值,不能在其他地方赋值或修改(区别于“只能赋值一次”)

    final的用处多数在于,当你需要一个确定的值表达某个含义的时候,用final修饰它,一方面防止错误操作(比如不小心把这个值修改了),另一方面起到说明文档的作用,告诉其他程序员这个值是表达某个特定意义的常量。

    比如我们可以使用final修饰圆周率PI

    static final double PI = 3.1415926;

    然后可以方便地使用PI来做计算

    double getArea (double radius) {
        return (PI * radius * radius);
    }

    因为对于final修饰的值,是对于每个该类下的对象都是确定且一致的,所以通常有final就也有static。

    最后,一般final修饰的常量,命名用大写字母,用下划线分隔单词的命名方式,例如

    static final MY_INT_CONSTANT = 1024;

    以上

    changr...

    的确不准确,没学扎实想当然了,所以这里能不能编辑或者删除啊。。。。

    2016-04-19 16:54:21

    共 2 条回复 >

  • 夜阑风语丿
    2016-04-09 08:26:33

    final修饰一个变量后变成常量,常量不可以修改,赋值,当初定义的是什么就是什么

  • Java小子1
    2016-04-08 17:50:47

    构造方法不能指出返回类型。

  • 冠希般纯洁如水
    2016-04-08 17:31:00

    final修饰的就是最终的 了你不能进行赋值了

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530107 学习 · 6086 问题

查看课程

相似问题