为什么还报错
构造方法
特点:
1.方法名称和类名相同
2.不用定义返回值类型
3.不可以写return语句
你写的public void eat (){}不是构造方法,应该是 public Animal(){} 和类名相同
你写的那个不是构造方法
final修饰之后就已经是常量了,常量是不会被赋值的
final 修饰一个变量时,该变量只能被赋值一次,为常量。
final public int age;
已经定义age变量为常量了,初始化了。
其中 eat() 是普通方法,不是构造方法,亲,看清楚了
你那个eat()也不是构造方法啊,final修饰的属性在声明时没赋值,是可以在构造方法里赋值的。
public class Animal {
final public int age;
public void eat(){
System.out.println("动物具有吃东西的能力");
}
public Animal(){
System.out.println("Animal执行了");
age=20;
}
}
楼上说的不对,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的时候,量是在对象初始化的时候才初始化,所以可以在构造方法里面赋值。
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;
以上
final修饰一个变量后变成常量,常量不可以修改,赋值,当初定义的是什么就是什么
构造方法不能指出返回类型。
final修饰的就是最终的 了你不能进行赋值了