25.md 3.8 KB
Newer Older
W
wizardforcel 已提交
1
# Java 中的实例变量
W
init  
wizardforcel 已提交
2 3 4

> 原文: [https://javabeginnerstutorial.com/core-java-tutorial/instance-variable-java/](https://javabeginnerstutorial.com/core-java-tutorial/instance-variable-java/)

W
wizardforcel 已提交
5
对象使用 Java 中的实例变量存储其状态。 没有使用`STATIC`关键字定义的变量,并且在任何方法声明之外的都是特定于对象的,称为实例变量。 之所以这样称呼它们,是因为它们的值特定于实例,***而不是***在实例之间共享。
W
init  
wizardforcel 已提交
6 7 8 9 10 11 12 13 14 15 16 17

## 实例变量示例

```java
class Page {
public String pageName;
// instance variable with public access
private int pageNumber;
// instance variable with private access
}
```

W
wizardforcel 已提交
18
## Java 中实例变量的规则
W
init  
wizardforcel 已提交
19 20 21 22 23 24

*   实例变量可以使用四个[访问级别](https://javabeginnerstutorial.com/core-java-tutorial/access-modifier-in-java/)中的任何一个
*   他们可以标记为最终
*   可以将它们标记为瞬态
*   它们不能标记为抽象
*   无法将它们标记为已同步
W
wizardforcel 已提交
25
*   它们不能标记为`strictfp`
W
init  
wizardforcel 已提交
26 27 28 29 30
*   它们不能被标记为本地
*   它们不能标记为静态

## 备忘单

W
wizardforcel 已提交
31 32 33 34 35 36 37 38
*   `public, private, protected`所有这三种访问修饰符都可以应用于实例变量(**默认**)。
*   *实例变量*可以标记为`final`
*   *实例变量*可以标记为`transient`
*   *实例变量*不能是`abstract`
*   *实例变量*无法具有`syncronized`修饰符。
*   *实例变量*无法具有`strictfp`修饰符。
*   *实例变量*无法具有`native`修饰符。
*   *实例变量*不能具有`static`修饰符,因为它会变为类级别的变量。
W
wizardforcel 已提交
39
*   实例变量将获得默认值,这意味着无需初始化即可使用实例变量。 对于*局部变量*,情况并非如此。
W
init  
wizardforcel 已提交
40 41 42 43 44 45

| 实例变量类型 | 默认值 |
| 布尔值 | 假 |
| 字节 | (字节)0 |
| 短 | (短)0 |
| 整型 | 0 |
W
wizardforcel 已提交
46
| long | 0 升 |
W
init  
wizardforcel 已提交
47
| 烧焦 | u0000 |
W
wizardforcel 已提交
48 49
| 浮动 | 0.0 分 |
| 双 | 0.0 天 |
W
init  
wizardforcel 已提交
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
| 宾语 | 空值 |

```java
package com.jbt;

/*
 * Here we will discuss about different type of Variables available in Java
 */
public class VariablesInJava {

	/*
	 * Below variable is INSTANCE VARIABLE as it is outside any method and it is
	 * not using STATIC modifier with it. It is using default access modifier.
	 * To know more about ACCESS MODIFIER visit appropriate section
	 */
	int instanceField;

	/*
	 * Below variable is STATIC variable as it is outside any method and it is
	 * using STATIC modifier with it. It is using default access modifier. To
	 * know more about ACCESS MODIFIER visit appropriate section
	 */
	static String staticField;

	public void method() {
		/*
		 * Below variable is LOCAL VARIABLE as it is defined inside method in
		 * class. Only modifier that can be applied on local variable is FINAL.
		 * To know more about access and non access modifier visit appropriate
		 * section.
		 *
		 * Note* : Local variable needs to initialize before they can be used.
		 * Which is not true for Static or Instance variable.
		 */
		final String localVariable = "Initial Value";
		System.out.println(localVariable);
	}

	public static void main(String args[]) {
		VariablesInJava obj = new VariablesInJava();

		/*
		 * Instance variable can only be accessed by Object of the class only as below.
		 */
		System.out.println(obj.instanceField);

		/*
		 * Static field can be accessed in two way.
		 * 1- Via Object of the class
		 * 2- Via CLASS name
		 */
		System.out.println(obj.staticField);
		System.out.println(VariablesInJava.staticField);
                System.out.println(new VariablesInJava().instanceField);
	}
}
```

W
wizardforcel 已提交
108
掌握 Java 中的[静态变量,以了解它与实例变量的不同之处。](https://javabeginnerstutorial.com/core-java-tutorial/java-static-keyword/)
W
init  
wizardforcel 已提交
109 110 111 112 113 114

### 参考文献

*   [官方文档](https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html)
*   静态变量与实例变量