首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用methofd分配final关键字

使用methofd分配final关键字
EN

Stack Overflow用户
提问于 2016-09-11 08:31:35
回答 3查看 108关注 0票数 0

我只是在使用final关键字并观察到下面的行为,这里我使用一个方法分配一个最终变量,该方法在构造函数之前被调用。

代码语言:javascript
复制
 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);

    }

以下代码的输出如下

代码语言:javascript
复制
Inside Method
Inside Constructor
1

我知道在构造函数完成之前需要分配最终变量,这就是这里发生的情况。

我无法找到的是如何在构造函数之前调用一个方法,我真的很感激对此的任何解释。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-11 08:46:00

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

代码语言:javascript
复制
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);
    }
}

现在为什么和如何在构造函数之前初始化实例变量(参见Why instance variables get initialized before constructor called? )

票数 3
EN

Stack Overflow用户

发布于 2016-09-11 08:45:54

如果将构造函数更改为

代码语言:javascript
复制
Test(){
    super();
    System.out.println("Inside Constructor");
}

并将调试点设置为super();,您将看到构造函数在init(1);之前被调用。它只是在您的System.out.println("Inside Constructor");之前被调用。

你也可以写:

代码语言:javascript
复制
public class Test {
    final int i;

    Test(){
        super();
        i = init(1);
        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);

    }
}
票数 2
EN

Stack Overflow用户

发布于 2016-09-11 08:39:08

代码中的这种行为是正确的,与您对最后一个关键字的分析无关.

init(1);是一种在类构造实例时被调用的方法.

因此,在构造函数之前,方法内部的所有内容都将被执行.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39434254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档