final修饰的终态变量只能在声明变量时或构造函数里赋值嘛?

问题描述

final修饰的终态变量只能在声明变量时或构造函数里赋值嘛?

class GongChengShi {
final String name;//名字
final String dizhi;//地址
int age;//年龄
public GongChengShi(String name, int age) {
this.name = name;//构造函数初始化时给名字和年龄赋值
this.age = age;
}
void setDizhi(String dizhi){//在子类中调用这里给地址赋值
this.dizhi = dizhi;
}
}
输出结果
---------- javac ----------
Hello.java:36: 错误: 无法为最终变量dizhi分配值
this.dizhi = dizhi;
^
1 个错误

我dizhi在声明变量时直接赋值可以,在构造函数里赋值也可以,但是放到普通方法里赋值就不行了。
final修饰的变量只能在声明变量时赋值或者在构造函数里赋值嘛?

解决方案

第一点,成员变量必须有初始化值,也就是你没有给String赋值,系统默认会在给他一个null;你也知道他叫做最终变量,你类已经加载了你还想再给他赋值,而构造函数是在类加载的时候自动给他赋值的就不一样了。能理解吗?

解决方案二:

final修饰的终态变量只能在声明变量时或构造函数里赋值,其实终态变量就是常量

解决方案三:

final修饰的终态变量只能在声明变量时或构造函数里赋值,其实终态变量就是常量

解决方案四:

被final修饰的不就是常量了嘛,比如PI之类的,不知道理解的对不对

解决方案五:

个人认为你不该在类中用final来修饰,这样后面方法内就不能再给final修饰的变量赋值了

解决方案六:

个人认为你不该在类中用final来修饰,这样后面方法内就不能再给final修饰的变量赋值了

解决方案七:

final修饰的终态变量只能在声明变量时或构造函数里赋值,其实终态变量就是常量,常量是不能被赋值的,就相当于定义了PI一样。

时间: 2024-11-03 20:59:49

final修饰的终态变量只能在声明变量时或构造函数里赋值嘛?的相关文章

final修饰的非静态变量

问题描述 final修饰的非静态变量除了在声明处或构造函数中初始化,可以在其他地方初始化吗或者说只要在构造函数之前的任何允许的地方都可以初始化,谢谢 解决方案 还可以在块代码处,比如class A { final int a; { a =5; }}其他都不可以了解决方案二:楼上的正解解决方案三:因该是只能在声明处和构造函数初始化

JavaScript声明变量时为什么要加var关键字_javascript技巧

在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它. 复制代码 代码如下: var x = "XX"; y ="xxx"; 诸如此类.这有一个问题,比如说在代码中的某一行,我想使用的一个已声明的变量x,结果由于打字或者拼写错误,这个变量被写成y了,结果相当于"隐式"声明了一个变量y,在实际编程过程中,这种错误有时比较难以发现. 当你在当前上下文内进行这种"隐式&

PHP 闭包获取外部变量和global关键字声明变量的区别讲解

最近在学习workerman的时候比较频繁的接触到回调函数,使用中经常会因为worker的使用方式不同,会用这两种不同的方式去调用外部的worker变量,这里就整理一下PHP闭包获取外部变量和global关键字声明变量的区别. 闭包 闭包是一个常见的概念,我们通常可以将其与回调函数配合使用,可以使代码更加简洁易读. 闭包可以 通过拷贝的方式 让函数使用父作用域中的变量.如: $global = 'hello'; $bbb = function()use($global){ echo $globa

java-Java 中final修饰的成员变量在创建对象时候会不会被附初值?

问题描述 Java 中final修饰的成员变量在创建对象时候会不会被附初值? 如上所述 Java 中final修饰的成员变量在创建对象时候会不会被附初值? 我看周志明的jvm说在创建对象时候要给所有的内存空间都要初始化为零值(不包括对象头),我就想如果是final类型的会不会被初始化微零值再进行程序员自己编写的赋值语句呢?那样的话是不是就是两次对final变量赋值了? 解决方案 不会自动赋值.不赋值会报错.final修饰成员变量,会强制要求赋上值. 解决方案二: 会,比如int初值就是0 解决方

java当中的接口的变量都是final修饰的常量,那么方法的方法是final修饰的吗

问题描述 java当中的接口的变量都是final修饰的常量,那么方法的方法是final修饰的吗 java当中的接口的变量都是final修饰的常量,那么方法的方法是final修饰的吗 final能不能修饰类呢 解决方案 不知道你说的方法的方法是什么 final可以修饰类,但是含义不同,final类表示无法派生. 解决方案二: final可以修饰类,方法,和域, 如果修饰方法, 参考这个博客吧http://blog.csdn.net/zrf1335348191/article/details/501

Java编程那些事儿66——final修饰符

8.7.2 final final关键字是最终的.最后的意思,在程序中可以用来修饰类.成员变量和方法的声明,由该关键字修饰的内容都是不可变的. 8.7.2.1 final数据 final修饰的数据是常量,常量既可以出现在类的内部,也可以出现在方法或构造方法的内部.在程序中常量只能赋值一次. 其它说明可以参看前面的常量介绍. 在程序中,一般类内部的成员常量为了方便调用,一般都使用static修饰符进行修饰.示例代码如下: /** * 常量使用 */ public class Student { /

java中final修饰符实例分析_java

final修饰符: final修饰成员变量必须有程序员显示指定初始值. 类的Field:必须在静态初始化块中或声明该Field时指定初始值. 实例Field:必须在非静态初始块中,声明Field或者构造器中指定初始值. final局部变量:必须由程序员显示初始化. final修饰的基本变量和引用类型变量的区别? final修饰的基本变量:不能对基本变量重新赋值. final修饰的引用变量:只保证这个引用类型所引用的地址不会变,即 一直引用同一个对象,但这个对象完全可以发生改变. 复制代码 代码如

Java final 修饰符知识点总结(必看篇)_java

final从字面上理解含义为"最后的,最终的".在Java中也同样表示出此种含义. final可以用来修饰变量(包括类属性.对象属性.局部变量和形参).方法(包括类方法和对象方法)和类. 1. final修饰类: final修饰类即表示此类已经是"最后的.最终的"含义.因此,用final修饰的类不能被继承,即不能拥有自己的子类. 如果视图对一个已经用final修饰的类进行继承,在编译期间或发生错误. 2. final修饰方法: final修饰的方法表示此方法已经是&

java的接口可以直接拿来声明变量?

问题描述 java的接口可以直接拿来声明变量? public interface IUserManage { public void addUser(User user); public void modifyUser(User user); public void deleteUser(User user); } 现在有这么个接口,然后在另一个没有实现此接口的类里看到如下这句: private IUserManage userManage: 在这个类里,直接声明了userManage,并且us