本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
3分5秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 示例 1 : 在声明的时候赋值 示例 2 : 在声明的时候没有赋值 示例 3 : final 修饰其他 示例 4 : 练习-final 示例 5 : 答案-final
i在第4行已经被赋值过了,所以这里会出现编译错误
public class HelloWorld {
public void method1() {
final int i = 5;
i = 10; //i在第4行已经被赋值过了,所以这里会出现编译错误
}
}
public class HelloWorld { public void method1() { final int i = 5; i = 10; //i在第4行已经被赋值过了,所以这里会出现编译错误 } }
如果在声明的时候未赋值,那么可以在后面代码进行唯一的一次赋值
public class HelloWorld {
public void method1() {
final int i;
i = 10; //i在第4行,只是被声明,但是没有被赋值,所以在这里可以进行第一次赋值
i = 11; //i在第6行已经被赋值过了,所以这里会出现编译错误
}
}
public class HelloWorld { public void method1() { final int i; i = 10; //i在第4行,只是被声明,但是没有被赋值,所以在这里可以进行第一次赋值 i = 11; //i在第6行已经被赋值过了,所以这里会出现编译错误 } }
如果final修饰的是参数,能否在方法里给这个参数赋值?
public class HelloWorld {
public void method1(final int j) {
j = 5; //这个能否执行?
}
}
public class HelloWorld { public void method1(final int j) { j = 5; //这个能否执行? } }
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
2022-12-11
还是没懂,题目里没写调用的语句,那赋的初值是多少也就不知道了吧,没赋值怎么能说赋过值了
8 个答案
菜小菜 跳转到问题位置 答案时间:2024-05-10 在调用该方法的时候会传值,此值为初始值。换句话说,代码 j = 5; 会导致编译错误,因为你试图修改一个被声明为 final 的变量。
uziokl 跳转到问题位置 答案时间:2024-05-07 不可以,因为在调用方法的时候,就一定会第一次赋值了,后面不能再进行多次赋值
木宇 跳转到问题位置 答案时间:2024-04-18
public class HelloWorld6 {
//变量final
//当一个变量被final修饰的时候,该变量只有一次赋值的机会
public void method1(){
final int i = 1;
// i =10;
//因为i已经被赋值过一次了所以这里会报错
}
/*练习
public class HelloWorld {
public void method1(final int j) {
j = 5; //这个能否执行?
}
}
*/
public void method2(final int j){
// j = 5;
System.out.println("不能,因为method被调用时进行的首次赋值");
System.out.println("j="+j);
}
public static void main(String[] args) {
HelloWorld6 h = new HelloWorld6();
h.method2(3);
}
}
axue 跳转到问题位置 答案时间:2023-08-08 不能运行
22407 跳转到问题位置 答案时间:2023-05-04 不行,因为在调用方法的时候已经赋值了,故不能再次赋值。
LUO萝北 跳转到问题位置 答案时间:2023-04-27 不行,调用方法时总会提供参数值,就已经算第一次赋值了
even87Equ 跳转到问题位置 答案时间:2023-01-16 你大发条 跳转到问题位置 答案时间:2023-01-08 final int i;
i = 10; //i在第4行,只是被声明,但是没有被赋值,所以在这里可以进行第一次赋值
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2022-04-02
不能,用main可以
9 个答案
Z_XXXX 跳转到问题位置 答案时间:2023-09-18 如果用final修饰方法的参数,是不能在方法中重新给这个参数赋值的。
原因是用final修饰的参数在编译时会创建一个副本保存参数值,在方法内部就是使用这个副本,不能修改副本存放的值。
例如:
```java
public void method(final int x) {
x = 5; // 错误,不能为final参数赋值
}
```
上面代码试图为参数x重新赋值,编译时会报错:"cannot assign value to final variable x"。
但是需要注意的是,如果参数是一个对象,final只是保证参数引用不能改变,但不会阻止修改对象内部的属性。
例如:
```java
public void method(final Student stu) {
stu.setName("John"); // 可以修改对象内部状态
}
```
这个例子中,final防止的是把stu重新指向另一个Student对象,但不会阻止修改stu对象本身的属性。
所以,用final关键字作为参数,主要是为了防止重新赋值参数引用,而不是防止修改参数状态。
YWC992 跳转到问题位置 答案时间:2023-04-17 不能
小木木 跳转到问题位置 答案时间:2023-03-18 不能运行
左耳进右耳出 跳转到问题位置 答案时间:2023-01-07 不能,但是为什么new final的时候还能进行二次赋值
jhoy 跳转到问题位置 答案时间:2022-12-17 参数里边放基本类型和引用类型,final在方法中使用,用于修饰放在开端位置
卷ta 跳转到问题位置 答案时间:2022-11-08 不能 南苛 跳转到问题位置 答案时间:2022-11-04 不能
芬达味橘猫 跳转到问题位置 答案时间:2022-04-25 public class Test5 {
public void method1(final int j) {
System.out.println(j);
}
public static void main(String args[]){
new Test5().method1(5);
new Test5().method1(6);
}
}
271518l 跳转到问题位置 答案时间:2022-04-16 请问这里的aj是对象吗?aj.mesed(4)是实现这个对象吗?
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2021-02-18
final初始化补充
2021-01-13
final 补充
2020-11-06
为什么第二个方法会报错
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 36 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|