Java中字段的简单解释
Simple explanation of fields in Java
最后一个打印语句不应该输出"Vince"吗?我想知道为什么它没有以及它背后的概念。
参见下面的代码:
public class Example
{
static String name;
public static void main(String[] args)
{
Example.name = "Vince";
System.out.println(Example.name) // will print "Vince"
name = "Tony";
System.out.println(name); // will still print "Tony"
System.out.println(Example.name); // will print "Tony"
}
}
范围内没有其他符号称为 name
(例如,没有局部变量),因此 name
指的是与 Example.name
相同的东西。
如果代码表示,例如:
String name; // a local variable with the same name
name = "Tony";
System.out.println(name); // will still print "Tony"
System.out.println(Example.name);
那么最后一行 将 打印 Vince
,因为这样你就将 Tony
赋值给局部变量。
尝试 2 回答这个问题。
name
是一个 static
字段。 static
意味着这个 field/attribute 被所有相同类型的对象共享。这意味着如果我要创建 Example
的实例,将其命名为 Nancy
,然后我创建 Nancy.name = "Drew"
,这意味着 System.out.println(name)
现在等于 "Drew"
因为静态字段在同一类型的所有对象之间共享。
要点是,通过将字段设置为 static
,它可以保证更改为 Example.name
或 this.name
更改为的任何值,具体取决于哪个值更新.
link this
关键字 - https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
这是一个很好的例子,但有点不同 -
最后一个打印语句不应该输出"Vince"吗?我想知道为什么它没有以及它背后的概念。
参见下面的代码:
public class Example
{
static String name;
public static void main(String[] args)
{
Example.name = "Vince";
System.out.println(Example.name) // will print "Vince"
name = "Tony";
System.out.println(name); // will still print "Tony"
System.out.println(Example.name); // will print "Tony"
}
}
范围内没有其他符号称为 name
(例如,没有局部变量),因此 name
指的是与 Example.name
相同的东西。
如果代码表示,例如:
String name; // a local variable with the same name
name = "Tony";
System.out.println(name); // will still print "Tony"
System.out.println(Example.name);
那么最后一行 将 打印 Vince
,因为这样你就将 Tony
赋值给局部变量。
尝试 2 回答这个问题。
name
是一个 static
字段。 static
意味着这个 field/attribute 被所有相同类型的对象共享。这意味着如果我要创建 Example
的实例,将其命名为 Nancy
,然后我创建 Nancy.name = "Drew"
,这意味着 System.out.println(name)
现在等于 "Drew"
因为静态字段在同一类型的所有对象之间共享。
要点是,通过将字段设置为 static
,它可以保证更改为 Example.name
或 this.name
更改为的任何值,具体取决于哪个值更新.
link this
关键字 - https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
这是一个很好的例子,但有点不同 -