Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从构造函数调用函数_Java - Fatal编程技术网

Java 从构造函数调用函数

Java 从构造函数调用函数,java,Java,在构造Breuk对象时,默认情况下如何调用Edit()方法 public class Breuk { public Breuk() {//constructor } private static Breuk Edit (Breuk b){ //function } } 每次创建一个新的Breuk对象时,默认情况下会调用Edit()方法,因为它位于构造函数中。由于该方法是静态的,因此必须以静态方式调用它,即ClassName.staticMethod()。

在构造
Breuk
对象时,默认情况下如何调用
Edit()
方法

public class Breuk {
    public Breuk() {//constructor

    }

    private static Breuk Edit (Breuk b){ //function 

    }
}

每次创建一个新的Breuk对象时,默认情况下会调用
Edit()
方法,因为它位于构造函数中。由于该方法是静态的,因此必须以静态方式调用它,即
ClassName.staticMethod()
。由于该方法需要一个
Breuk
对象作为参数,因此您将
引用传递给它,表示正在构造的对象

顺便说一下,根据Java约定,所有方法名称都应该是小写的。因此,考虑更名为代码>编辑(…)<代码>到<代码>编辑(…)<代码> > < /P>
首先,您应该坚持Java命名约定,即方法名称应为小写。因此,您应该将
Edit()
方法重命名为
Edit()

如果在构造
Breuk
类的实例时,希望在默认情况下调用
edit()
方法,则可以使用初始值设定项块

摘录自:

Java编译器将初始值设定项块复制到每个构造函数中。因此,这种方法可以用于在多个构造函数之间共享一块代码

例如,您可以尝试以下方法:

public class Breuk {

    { // initializer block
        Breuk.edit(this); // always called by default, 
                          // no matter which constructor is used
    }

    public Breuk() { // no-args constructor

    }

    public Breuk(int a1, int a2) { // another constructor

    }

    private static Breuk edit(Breuk b) { // function 

    }
}
在这里,我假设您希望将正在构造的实例传递给
edit()
方法,这就是
this
作为参数传递的原因

编辑:


如果这个假设是正确的,我建议您使用
edit()
方法返回
void
,因为您不能将实例分配给
这个
,因为它是
最终的
(而且也没有任何意义)。

只需从默认构造函数的末尾调用该方法。这里不需要考虑任何“默认”调用。实施它就行了

public class Breuk {
    public Breuk() {
        // constructor
        edit(this);
    }

    private static Breuk edit (Breuk b){ 
        // class-level processing on any Breuk that is constructed 

    }
}

你的意思是
private static Breuk Edit(Breuk b)吗{
?是的,很抱歉,这就是我的意思从构造函数调用方法就像从其他任何地方调用方法一样。不过需要注意的是:如果要从构造函数调用实例方法,最好将实例方法
设为final
。这闻起来很像。为什么需要def调用该方法ault?还请解释一下为什么这会满足OP的要求。它为后来出现的任何人增加了价值,无论OP是否理解。我不确定这是否回答了最初的问题。我认为这回答了一个更复杂的问题。它还使用了相当不寻常的Java语法-我从未见过在re中这样做我承认,我把重点放在“默认”上。对我来说,“默认”意味着“自动”,即不在构造函数中进行调用。您注释为默认构造函数的内容实际上只是一个无参数构造函数。如果您没有显式定义一个构造函数,则默认构造函数就是其中的一个(碰巧也是一个无参数构造函数)。您如何知道这一点“没有必要考虑任何默认调用”?OP实际上是在问“当我构造一个Breuk对象时,默认调用Edit()方法”。从给出的示例中,只有一个构造函数。在这种情况下,简单的答案就是我建议的。如果他说“从我所有的构造函数”“然后,我开始考虑使用this(…)使构造函数相互链接语法,然后,如果它不起作用,我会考虑复制调用来编辑而不是初始化块,这比拼写它更难调试。好的,正如有人在评论中建议的,这似乎是XY问题。也许我们应该请OP来澄清。对于初始化器块,它是一个基本概念Co。在甲骨文官方的Java教程中(不是在一些高级时事通讯中)。无论如何,我们在猜测OP可能想问我们什么,所以这次讨论没有结果。你的观点绝对正确,我的观点也一样。
public class Breuk {
    public Breuk() {
        // constructor
        edit(this);
    }

    private static Breuk edit (Breuk b){ 
        // class-level processing on any Breuk that is constructed 

    }
}