Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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中只初始化一次局部变量 在C++中,下面的代码: #include <stdio.h> static const char *init() { printf("in init()\n"); } static void func() { static const char *str = init(); printf("in func()\n"); } int main() { for (int i=0; i<10; ++i) { func(); } return 0; }_Java_Initialization_Variable Assignment_Final - Fatal编程技术网

如何在Java中只初始化一次局部变量 在C++中,下面的代码: #include <stdio.h> static const char *init() { printf("in init()\n"); } static void func() { static const char *str = init(); printf("in func()\n"); } int main() { for (int i=0; i<10; ++i) { func(); } return 0; }

如何在Java中只初始化一次局部变量 在C++中,下面的代码: #include <stdio.h> static const char *init() { printf("in init()\n"); } static void func() { static const char *str = init(); printf("in func()\n"); } int main() { for (int i=0; i<10; ++i) { func(); } return 0; },java,initialization,variable-assignment,final,Java,Initialization,Variable Assignment,Final,在这种情况下,funcName将在每个方法中获得唯一的值,但初始化成本很高。final限定符通过单个方法调用使变量保持常量 因为您希望每个实例有一个值,所以可以在方法之外使用实例成员变量 private final String str = init(); private void func() { System.out.println("in func()"); } 如果希望在所有实例的所有方法调用中使用单个值,可以在方法外部使用静态成员变量 private static fina

在这种情况下,funcName将在每个方法中获得唯一的值,但初始化成本很高。

final限定符通过单个方法调用使变量保持常量

因为您希望每个实例有一个值,所以可以在方法之外使用实例成员变量

private final String str = init();

private void func()
{
    System.out.println("in func()");
}
如果希望在所有实例的所有方法调用中使用单个值,可以在方法外部使用静态成员变量

private static final String str = init();

private void func()
{
    System.out.println("in func()");
}

以下是一个相当接近的近似值:

class test {

    private static final String str = init();

    private static String init()
    {
        System.out.println("in init()");
        return "FOO";
    }

    private void func()
    {
        System.out.println("in func()");
    }

    public test()
    {
        for (int i=0; i<10; ++i) {
            func();
        }
    }

    public static void main(String[] args)
    {
        test app = new test();
    }
}
类测试{
私有静态最终字符串str=init();
私有静态字符串init()
{
System.out.println(“in init()”;
返回“FOO”;
}
私有void func()
{
System.out.println(“in func()”);
}
公开考试()
{

对于(int i=0;i您需要输入字符串str和函数init()be staticstr不能是静态的,它将不会编译。init()不能是静态的,因为它依赖于实例数据。不是问题,每个多个调用的成员函数只需一次初始化调用。请参阅最后的示例:myfunc1()和myfunc2()你也可以通过实例成员来实现这一点——只要对每个方法使用不同的实例成员,而在C语言中,你会使用静态局部变量。我知道,正如问题中所述,我一直在寻找一种更易于管理的解决方案,而不是为我的类中的每个方法创建一个实例变量。没有太多需要管理的地方m C/C++是它的位置(以及它是每个实例还是每个类的选择)。如果您愿意,您可以将成员字段放在每个方法的前面。如果
init()
实际上需要上下文,则在类构造或更高版本之前未初始化的成员,将
str
初始化为null并具有
init()
如果(str==null)
只做它的长事情
。不幸的是,这并没有提供答案,这就是为什么我在问题的末尾提供了进一步的示例或myfunc1()和_myfunc2()。
private static final String str = init();

private void func()
{
    System.out.println("in func()");
}
class test {

    private static final String str = init();

    private static String init()
    {
        System.out.println("in init()");
        return "FOO";
    }

    private void func()
    {
        System.out.println("in func()");
    }

    public test()
    {
        for (int i=0; i<10; ++i) {
            func();
        }
    }

    public static void main(String[] args)
    {
        test app = new test();
    }
}