如果我有这个示例代码:
public class Test{
static String myVariable = "hi";
public Test(){
System.out.println(myVariable);
System.out.println(Test.myVariable);
}
public static void main(String[] args) throws SQLException{
new Test();
}
}
现在两者都会打印“hi”,但我想知道它们之间的区别,何时我应该使用另一个,或者我应该总是只使用其中一个,因为它是常态。
我很抱歉这个非常基本的例子,但是当我让我的系统工作时,我并没有真正理解两者之间的区别
答案 0 :(得分:6)
它们都引用相同的变量,因此原则上它们是相同的。然而,在实践中,第一选择存在与局部变量冲突的风险;例如,在您的第一个String myVariable = "bye";
输出println()
后跟bye
之前添加hi
。
使用其中一个肯定没有“规则”。使用哪个使您的代码更具可读性,但要注意冲突的变量名称。 Eclipse和其他IDE可以设置为warn you when you do so,这非常有用。
答案 1 :(得分:2)
当你想要确保从类中调用Route::get('sitemap', function(){
// create new sitemap object
$sitemap = App::make("sitemap");
// set cache key (string), duration in minutes (Carbon|Datetime|int), turn on/off (boolean)
$sitemap->setCache('laravel.sitemap', 60);
$posts = DB::table('posts')->orderBy('created_at', 'desc')->get();
foreach ($posts as $post)
{
$sitemap->add($post->slug, $post->modified, $post->priority, $post->freq);
}
变量或者想要从另一个类引用它时(如果它不是{{1}),你会更喜欢Test.myVariable
最好是static
)
private
答案 2 :(得分:1)
如果你在那个班级,没有区别。 myVariable
和Test.myVariable
都指向同一个对象。
如果您从其他班级致电myVariable
,则必须使用Test.myVariable
语法来引用正确的对象。
答案 3 :(得分:0)
没有区别。但是应始终使用Test.myVariable
因为它直接表明它是读取代码的人的静态变量,否则会导致难以发现的错误。
答案 4 :(得分:0)
对于第一个,您直接打印myVariable。对于第二个,您从Test类打印myVariable。您指的是同一个实体。随着程序变大,我建议使用Test.myVariable以避免混淆。但是,从技术上讲,它是你选择你想要呈现这个静态变量的方式。有时候,将静态变量表示为myVariable可能更有意义。只是保持一致。他们允许这两种方法是有原因的:)。