当前位置: 首页 > 知识库问答 >
问题:

使用methofd[duplicate]分配final关键字

郎建章
2023-03-14

我刚刚在玩final关键字,并观察到下面的行为,这里我使用一个方法赋值一个final变量,并且该方法在构造函数之前被调用

 public class Test {

    final int i=init(1);

    Test(){
        System.out.println("Inside Constructor");
    }

    public int init(int i){
        System.out.println("Inside Method");
        return i;
    }

    public static void main(String [] args){
        Test i=new Test();
        System.out.println(i.i);

    }

下面的代码输出如下

Inside Method
Inside Constructor
1

我知道在构造函数完成之前需要赋值final变量,这就是这里发生的事情

我找不到的是如何在构造函数之前调用方法,我非常感谢对此的任何解释

共有1个答案

师腾
2023-03-14

它与final关键字无关。尝试以下(刚删除的final)输出将相同。首先初始化实例变量,然后调用构造函数

public class Test {
     int i = init(1);

    Test() {
        System.out.println("Inside Constructor");
    }

    public int init(int i) {
        System.out.println("Inside Method");
        return i;
    }

    public static void main(String[] args) {
        System.out.println("start");
        Test i = new Test();
        System.out.println(i.i);
    }
}

现在为什么和如何在构造函数之前初始化实例变量,看看为什么在调用构造函数之前初始化实例变量?

 类似资料:
  • 使(或其他集合)成为final的优点/缺点是什么?如果我们尝试这样做呢: 这是有效的吗?现在引用A将指向L所指向的这个数组列表?请帮帮忙。

  • final是java中的访问修饰符还是非访问修饰符? Thread类公共最终无效setName(字符串名称)的setName()方法真的是最终的吗?如果是,是否意味着一旦线程名称更改,以后就不能更改,因为最终关键字...? 或者final不是方法setName()的一部分? 请给我正确的答案。。

  • 问题内容: 如果我在一个类中有以下声明,其中是抽象类型: 是否能让我仍然能够更改中的对象的状态,但阻止我将新对象添加到列表中?如果我写错了,请您解释一下正在做什么以及何时应该使用关键字。 问题答案: 不,final关键字不会使列表或其内容不可变。如果您想要一个不可变的列表,则应使用: final关键字的作用是防止您为’synapses’变量分配新值。即,您不能写: 但是,您可以编写:

  • 本文向大家介绍详解Java中的final关键字的使用,包括了详解Java中的final关键字的使用的使用技巧和注意事项,需要的朋友参考一下 final含义 final是Java中的一个保留关键字,可以声明成员变量、方法和类。一旦你将引用声明为final类型,你将不能再改变这个引用了。编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。 final变量 凡是对成员变量或者本地变量(

  • 本文向大家介绍详解Java编程中static关键字和final关键字的使用,包括了详解Java编程中static关键字和final关键字的使用的使用技巧和注意事项,需要的朋友参考一下 Java static关键字以及Java静态变量和静态方法 static 修饰符能够与变量、方法一起使用,表示是“静态”的。 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以st

  • 关于在C中使用关键字final,我有一个问题。我知道虚函数是在基类中声明的成员函数,它应该在派生类中重写。通过动态绑定,将根据负责调用的对象的类型调用适当的方法。但是,为了防止基类中的成员函数在任何派生类中被重写,我们将使用final关键字。 为什么我们使用“最终”来防止基类中的成员函数在派生类中被覆盖,同时我们仍然必须一起使用关键字VIRTUAL(允许覆盖)。 我试图删除虚拟这个词,但我得到一个