为什么我的静态变量在 Main 方法中不可用



我不知道我是否忘记了我的基础知识,即使我做了几年的Java工作。

我有一个具有静态块的类

static {
    Properties prop = new Properties();
    try {
        prop.load(new FileInputStream("PATH OF PROPERTIES FILE"));
        String properties22 = (String) prop.getProperty("propertyname");
        properties22Tokens = new StringTokenizer(properties22, ",");
         while(properties22Tokens.hasMoreTokens())
        {
            System.out.print(":::"+properties22Tokens.nextToken());
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

我已经在该变量上声明了公共静态声明,如下所示

公共静态字符串标记器属性22令牌;

我正在尝试在main方法中打印令牌,如下所示..但是没有令牌..哪个在吃代币?

public static void main(String arg[]) {
    System.out.print("in main..");
    while(properties22Tokens.hasMoreTokens())
    {
        System.out.print(":::"+properties22Tokens.nextToken());
    }
}

输出是 - 来自 propeties + 的一些令牌在 main..

我的预期输出 - 属性中的一些令牌 + main.. + 属性中的一些标记

有人可以修复并解释修复吗?

是的,汤姆是对的。你在静态块中"吃掉"了它们.
以下代码段返回 false.
while(properties22Tokens.hasMoreTokens()){
.......
}

现在的问题是为什么?
因为当我们创建字符串令牌器的对象并填充它时。它将创建两个变量。一个用于 StringTokenizer 对象的令牌的总大小。第二个是检查已向您提供了多少令牌.
在 stringTokenizer 上调用 hasMoreTokens() 时,它将比较变量值并返回布尔值,它可能是真或假.
当通过stringTokenizer调用nextToken()时,它将增加变量的值,该变量是为知道提供了多少令牌而创建的。

你在静态块中"吃"了它们。到main发生时,while(properties22Tokens.hasMoreTokens())将是错误的。

StringTokenizer 类会断开标记中的字符串,可以使用nextToken方法迭代标记。由于您已经使用以下循环遍历了静态块中的所有令牌:

while(properties22Tokens.hasMoreTokens())
{
    System.out.print(":::"+properties22Tokens.nextToken());
}

因此,任何进一步的hasMoreTokens电话都将返回false.因此,main方法中的while循环永远不会执行。

相关内容

  • 没有找到相关文章

最新更新