为了账号安全,请及时绑定邮箱和手机立即绑定

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

http://img1.sycdn.imooc.com//570771660001295004210292.jpg为什么还报错





正在回答

12 回答

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


0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

你写的那个不是构造方法

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

final public int age;  

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

1 回复 有任何疑惑可以回复我~
#1

weixin_慕娘0302045

该解释说的对。 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 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

public class Animal {

final public int age;

public void eat(){

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

}

public Animal(){

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

age=20;

}

}


0 回复 有任何疑惑可以回复我~

楼上说的不对,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的时候,量是在对象初始化的时候才初始化,所以可以在构造方法里面赋值。

1 回复 有任何疑惑可以回复我~
#1

nizhuan1130

第一段代码里面构造方法的参数应为testNum,打错了不好意思。
2016-04-09 回复 有任何疑惑可以回复我~

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;

以上

1 回复 有任何疑惑可以回复我~
#1

nizhuan1130

说的并不是很准确。
2016-04-09 回复 有任何疑惑可以回复我~
#2

changrui0608

的确不准确,没学扎实想当然了,所以这里能不能编辑或者删除啊。。。。
2016-04-19 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
首页上一页12下一页尾页

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信