Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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_Multithreading_Static - Fatal编程技术网

Java 我应该使用静态方法还是静态字段

Java 我应该使用静态方法还是静态字段,java,multithreading,static,Java,Multithreading,Static,我想声明一些静态变量,并在代码中大量使用它们,因此在本例中,如果我想更改电话号码,我将在一个地方更改它: public class AppInformation{ static String phone_number="44444444"; } 所以现在我可以通过打电话给全班来获得电话号码: AppInformation.phone_number 另一个解决方案: public class AppInformation { public static String get_p

我想声明一些静态变量,并在代码中大量使用它们,因此在本例中,如果我想更改电话号码,我将在一个地方更改它:

public class AppInformation{
    static String phone_number="44444444";
}
所以现在我可以通过打电话给全班来获得电话号码:
AppInformation.phone_number

另一个解决方案:

public class AppInformation {

    public static String get_phone_number(){
        return "44444444";
    } 
}
现在我可以调用该方法:
AppInformation.get_phone_number
()

实际上我更喜欢第二种方法,因为它是线程安全的


这是正确的吗?还有其他建议吗?

将其声明为
公共静态最终字符串电话\u NUMBER=“4444”
。由于只能读取此变量,因此它是线程安全的

解释了为什么我将其命名为
PHONE\u NUMBER
,而不是
phoneNumber
(或者打破了我所知的所有Java惯例
PHONE\u NUMBER
),您可以将其声明为

静态最终字符串电话号码=“4444”;
不要再担心线程安全:)

您想说的是,您需要一个常量,在Java中,这个常量通常表示为:

public class AppInformation
{
  public static final String PHONE_NUMBER = "44444444";
}
注意,在您的示例中,您遗漏了:

  • ,在类的情况下,这意味着该值将是包私有的
  • final
    keywork,这意味着可以在程序运行时修改该值

如果程序不更改编号,则第一个编号是线程安全的-尽管您无法仅通过查看它来证明它是线程安全的,您可以使用第二个编号来证明它是线程安全的。如果程序确实更改了号码,那么第二个号码将不起作用。因此,我应该将其声明为私有静态最终字符串PHONE_number!如下所述。@user3516596不带
final
线程可以对其进行写入(稍后从中读取)。如果您不提供任何同步-它不是(线程)安全的。我应该将其声明为公共还是私有?我应该将其声明为公共还是私有?\取决于您希望它显示的位置-如果
电话号码
仅在类
AppInformation
中使用,则它应该是
私有的
;但是,如果您打算在整个应用程序中使用
电话号码
,那么它应该是
公用的
。同样的逻辑如下,对于
受保护的
和包私有(请参阅我在回答中输入的访问修饰符链接)是的,非常感谢,这非常有帮助,因此我想我会将其声明为私有,因为我只是通过类本身来调用它,我指的是AppInformation.PHONE_NUMBER.:)