Java基础(8)-Java变量类型
本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/216
Java基础(8)-Java变量类型
在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下:
type identifier [ = value][, identifier [= value] ...] ;
格式说明:type为Java数据类型。identifier是变量名。可以使用逗号隔开来声明多个同类型变量。
以下列出了一些变量的声明实例。注意有些包含了初始化过程。
int a, b, c; // 声明三个int型整数:a、 b、c
int d = 3, e = 4, f = 5; // 声明三个整数并赋予初值
byte z = 22; // 声明并初始化 z
String s = "joshua317"; // 声明并初始化字符串 s
double pi = 3.14159; // 声明了双精度浮点型变量 pi
char x = 'x'; // 声明变量 x 的值是字符 'x'。
Java语言支持的变量类型有:
- 类变量:独立于方法之外的变量,用 static 修饰;
- 实例变量:独立于方法之外的变量,不过没有 static 修饰;
- 局部变量:类的方法中的变量。
package com.joshua317;
/**
* @author joshua317
*/
public class Variable {
/**
* 类变量
*/
static int clicks = 0;
/**
* 实例变量
*/
String name;
public void fun() {
/**
* 局部变量
*/
int i = 0;
}
}
1 Java 局部变量
- 局部变量声明在方法、构造方法或者语句块中;
- 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
- 访问修饰符不能用于局部变量;
- 局部变量只在声明它的方法、构造方法或者语句块中可见;
- 局部变量是在栈上分配的。
- 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
在以下实例中num是一个局部变量。定义在nums()方法中,它的作用域就限制在这个方法中。
package com.joshua317;
public class Main {
public static void main(String[] args) {
Test test = new Test();
test.nums();
}
}
class Test {
public void nums()
{
int num = 0;
num = num + 6;
System.out.println("新的数值为:" + num);
}
}
运行结果如下:
新的数值为:6
下面的例子中 num 变量没有初始化,所以在编译时会出错:
package com.joshua317;
public class Main {
public static void main(String[] args) {
Test test = new Test();
test.nums();
}
}
class Test {
public void nums()
{
int num;
num = num + 7;
System.out.println("新的数值为:" + num);
}
}
运行结果如下:
Error:(13, 15) java: 可能尚未初始化变量num
2 Java 实例变量
- 实例变量声明在一个类中,但在方法、构造方法和语句块之外;
- 当一个对象被实例化之后,每个实例变量的值就跟着确定;
- 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
- 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
- 实例变量可以声明在使用前或者使用后;
- 访问修饰符可以修饰实例变量;
- 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
- 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
- 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。
package com.joshua317;
public class Main {
public static void main(String[] args) {
Employee empOne = new Employee("joshua317");
empOne.setSalary(1000.0);
empOne.printInfo();
}
}
class Employee{
/**
* 这个实例变量对子类可见
* name
*/
public String name;
/**
* 私有变量,仅在该类可见
* salary
*/
private double salary;
/**
* 在构造器中对name赋值
* @param empName
*/
public Employee (String empName){
this.name = empName;
}
/**
* 设定salary的值
* @param empSal
*/
public void setSalary(double empSal){
this.salary = empSal;
}
/**
* 打印信息
*/
public void printInfo(){
System.out.println("名字 : " + this.name);
System.out.println("薪水 : " + this.salary);
}
}
运行结果如下:
名字 : joshua317
薪水 : 1000.0
3 Java 类变量(静态变量)
- 类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外。
- 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
- 静态变量除了被声明为常量外很少使用,静态变量是指声明为 public/private,final 和 static 类型的变量。静态变量初始化后不可改变。
- 静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static 声明变量。
- 静态变量在第一次被访问时创建,在程序结束时销毁。
- 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为 public 类型。
- 默认值和实例变量相似。数值型变量默认值是 0,布尔型默认值是 false,引用类型默认值是 null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
- 静态变量可以通过:ClassName.VariableName的方式访问。
- 类变量被声明为 public static final 类型时,类变量名称一般建议使用大写字母。如果静态变量不是 public 和 final 类型,其命名方式与实例变量以及局部变量的命名方式一致。
import java.io.*;
public class Employee {
//salary是静态的私有变量
private static double salary;
// DEPARTMENT是一个常量
public static final String DEPARTMENT = "开发人员";
public static void main(String[] args){
salary = 10000;
System.out.println(DEPARTMENT+"平均工资:"+salary);
}
}
实例编译运行结果如下:
开发人员平均工资:5000.0
4.Java三种变量的区别
局部变量、实例变量和静态变量的区别
局部变量 | 实例变量 | 静态变量 | |
---|---|---|---|
定义位置 | 方法中/代码块中,或者方法的形式参数 | 在类中,方法外 | 在类中,方法外 |
初始化值 | 无默认初始化值,先定义,赋值后才能使用 | 有默认初始化值 | 有默认初始化值 |
调用方式 | 局部调用 | 对象调用 | 类名调用、对象调用 |
存储位置 | 栈中 | 堆中 | 方法区 |
声明周期 | 与方法/代码块共存亡 | 与对象共存亡 | 与类共存亡 |
别名 | 无 | 实例属性、普通成员变量 | 类变量、静态属性 |
4.1 实例变量和局部变量的区别
实例变量:
(1)实例变量定义在类中,在整个类中都可以被访问。
(2)实例变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。
(3)实例变量有默认初始化值,比如数值型的默认值为0,字符串类型的默认值是null。
局部变量:
(1)局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。
(2)局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。
(3)局部变量没有默认初始化值
在使用变量时需要遵循的原则为:就近原则
首先在局部范围找,有就使用;接着在成员位置找
4.2 实例变量和静态变量的区别
(1)两个变量的生命周期不同
实例变量随着对象的创建而存在,随着对象被回收而释放。
静态变量随着类的加载而存在,随着类的消失而消失。
(2)调用方式不同
实例变量只能被对象调用。
静态变量可以被对象调用,还可以被类名调用。
(3)别名不同
实例变量也称为普通成员变量。
静态变量也称为类变量。
(4)数据存储位置不同
实例变量存储在堆内存的对象中,所以也叫对象的特有数据。
静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。
本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/216