Java类变量和实例变量是Java中的两种不同类型的变量,它们在使用上有很大的不同。
首先,Java类变量是一种特殊的静态变量,它是在类加载时创建的,并且在整个应用程序中都是共享的。它们通常用于存储一些公共信息,例如常量或者一些公共计数器。
public class Test { public static int count = 0; // 类变量 }
而实例变量则是在创建对象时创建的,每个对象都有自己独立的一份。它们通常用来存储对象特有的信息,例如对象名、位置、大小等。
public class Test { private String name; // 实例变量 public Test(String name) { this.name = name; // 赋值 } public void printName() { System.out.println(name); // 调用 } }
此外,Java类变量是static修饰的,而实例变量则不需要static修饰。这也意味着Java类变量不能使用this来引用(因为this代表当前对象);而实例变量必须使用this来引用。
Java支持三种不同生存期的变量:
在创建实例时创建类的成员变量,并且当对象被销毁时被销毁。未显式分配值的所有成员变量在声明期间自动分配一个初始值。成员变量的初始化值取决于成员变量的类型。
下表列出了成员变量的初始化值:
元素类型 | 初始值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | "u0000" |
boolean | false |
对象引用 | null |
在以下示例中,变量x在声明变量时设置为20。
public class Main{ int x = 20; }
如果您不设置它们,以下示例显示默认值。
class MyClass { int i; boolean b; float f; double d; String s; public MyClass() { System.out.println("i=" + i); System.out.println("b=" + b); System.out.println("f=" + f); System.out.println("d=" + d); System.out.println("s=" + s); } } public class Main { public static void main(String[] argv) { new MyClass(); } }
输出:
方法的自动变量在入口时创建方法,并且仅在该方法的执行期间存在。只有在执行该方法时才能访问自动变量。(此规则的一个例外是内部类)。
自动变量(方法局部变量)不由系统初始化。自动变量必须在使用前显式初始化。例如,这个方法不会编译:
public class Main{ public int wrong() { int i; return i+5; } }
编译上面的代码时的输出:
这里只是一个类变量的一个副本,它存在,而不管该类的实例数。 静态变量在类加载时初始化; 这里,当Main类被加载时,y将被设置为30。
public class Main{ static int y = 30; }
this
引用当前对象。
this
可以在任何方法中使用来引用当前对象。
以下代码显示如何使用 this 关键字。
// A use of this. Rectangle(double w, double h) { this.width = w; // this is used here this.height = h; }
使用 this
引用隐藏的实例变量。
成员变量和方法参数可以具有相同的名称。在这种情况下,我们可以使用它来引用成员变量。
Rectangle(double width, double height) { this.width = width; this.height = height; }
以下示例显示如何使用此引用实例变量。
class Person{ private String name; public Person(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } public class Main{ public static void main(String[] args) { Person person = new Person("Java"); System.out.println(person.getName()); person.setName("new name"); System.out.println(person.getName()); } }
上面的代码生成以下结果。
Java正则表达式教程 -Java正则表达式组我们可以通过括号将多个字符组合为一个单位。例如,(ab)。正则表达式中的每个组都有一个组...
JPA教程 -JPA ID注释示例来自JPA的@Id注释用于将Java字段标记为数据库表主键列。public class Person{@Idprivate long id;...上...
JPA教程 -JPA ID表生成器示例我们可以使用一个表作为id生成表。以下代码使用@TableGenerator创建表并设置id值的初始值。然后它使...
JPA教程 -JPA ElementCollection映射关键实体示例在JPA中,我们可以将通用类型的Map映射到数据库。以下代码定义了一个通用映射,...
JPA教程 -JPA嵌入式共享示例对于嵌入式实体,我们可以在不同实体之间共享它们。当嵌入它时,我们也可以覆盖可嵌入的实体。以下代...