首页 > 试题广场 >

以下代码的输出是?

[单选题]
class Foo {
    final int i;
    int j;
    public void doSomething() {
        System.out.println(++j + i);
    }
}
的输出是?
  • 0
  • 1
  • 2
  • 不能执行,因为编译有错
推荐
D。final类型的变量一定要初始化,因为final的变量不可更改。
编辑于 2015-02-05 11:13:27 回复(16)
楼上都不太准确

final作为对象成员存在时,必须初始化;但是,如果不初始化,也可以在类的构造函数中初始

因为java允许将数据成员声明为final,却不赋初值。但是,blank finals必须在使用之前初始化,且必须在构造函数中初始化  
发表于 2015-08-23 19:01:23 回复(18)
亲自测试了一下,类的final成员变量必须满足以下其中一个条件
 1、在构造函数中赋值 
 2、初始化赋值 

编辑于 2016-07-11 23:11:28 回复(4)
final修饰的变量相当于一个常量,必须在使用前进行初始化
发表于 2015-06-07 10:47:08 回复(0)
被final修饰的变量必须要被初始化,那初始化的方式有:
1、定义时初始化;
2、final 成员变量可以在初始化块中初始化,但是不可在静态初始化块中初始化,只能是静态的final成员变量才能在静态初始化块中初始化
3、在类的构造器中初始化,但是静态final成员变量是不能在构造函数是初始化的。
发表于 2016-07-16 00:18:13 回复(3)
不应该是没有main函数吗?。。。
发表于 2018-03-31 10:52:34 回复(8)
final修饰的变量是常量,必须进行初始化,可以显示初始化,也可以通过构造进行初始化,如果不初始化编译会报错。
发表于 2015-09-08 15:48:53 回复(1)
final 修饰的成员变量必须初始化。初始化的可以实现在声明处、代码块和构造函数中,否则编译会报错。
发表于 2017-04-19 09:39:13 回复(2)
选D
成员/类变量是有默认值的,局部变量没有默认值。
无论有没有被final修饰,局部变量只需要第一次使用的时候初始化就可以了。
成员变量被final修饰,必须显式初始化,或者在构造块,构造器中初始化。
类变量被final修饰,必须显式初始化,或者在静态块中初始化。

静态块不能访问成员变量。但是构造器和构造块可以访问(不被final修饰的)类变量。


发表于 2018-07-07 13:59:52 回复(0)
final变量定义的时候,可以先声明,而不给初值,这中变量也称为blank final
但是,blank finals必须在使用之前初始化
发表于 2016-12-13 13:25:01 回复(1)
难道不是因为没有主函数吗?
发表于 2017-12-12 15:53:00 回复(1)
final修饰的变量必须赋值,如果不显式赋值,必须使用构造方法赋值
public class Test {
    final int a;

    public Test(int a) {
        this.a = a;
    }
}
编辑于 2021-12-20 20:23:17 回复(0)
final修饰的变量在使用时必须要有值 
final修饰变量时必须满足其中一个条件:1、在构造函数中赋值; 2、初始化赋值
编辑于 2019-04-04 16:11:54 回复(0)
首先代码是错误的,然后给出的答案是错误的,误人子弟
发表于 2016-05-23 16:58:44 回复(1)
局部final变量可以不初始化,编译可以通过,但是使用时会报错
发表于 2015-08-15 14:28:02 回复(0)
final定义的变量是不可修改的,一般都与static一起使用,定义的时候必须要赋初始值
发表于 2021-12-27 15:30:39 回复(0)
class Foo {
    final int i;  //The blank final field i may not have been initialized
    int j;
    public void doSomething() {
        System.out.println(++j + i);
    }
}

final关键字知识点

1.final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误。final变量一旦被初始化后不能再次赋值。
2.方法内的局部变量必须在声明时赋值。 因为没有初始化的过程
3.在匿名类中所有变量都必须是final变量。
4.final方法不能被重写, final类不能被继承
5.接口中声明的所有变量本身是final的。类似于匿名类
6.final和abstract这两个关键字是反相关的,final类就不可能是abstract的。
7.final方法在编译阶段绑定,称为静态绑定(static binding)。
8.将类、方法、变量声明为final能够提高性能,这样JVM就有机会进行估计,然后优化。

final方法的好处

1.提高了性能,JVM在常量池中会缓存final变量

2.final变量在多线程中并发安全,无需额外的同步开销
3.final方法是静态编译的,提高了调用速度
4.final类创建的对象是只可读的,在多线程可以安全共享


原文连接:



发表于 2020-02-28 10:17:29 回复(0)
发表于 2019-10-29 11:33:26 回复(0)
本题主要考察 final 关键字的用法。上述代码示例中的 final 变量 i 在声明时没有进行初始化,这被称之为 “空白 final ”。空白 final 必须在构造器中初始化,否则编译出错。


关于对Java中  final关键字 的更详细的阐述,请查看我的博文“http://blog.csdn.net/justloveyou_/article/details/52798666”中 final 部分。欢迎留言,欢迎指教!
发表于 2016-12-05 17:09:18 回复(1)
常量必须初始化
发表于 2022-07-14 09:43:58 回复(0)
就是说final用之前必须赋值
发表于 2022-06-01 20:12:16 回复(0)