实例/静态变量、局部变量和常量的定义及其作用域
2017-04-02 16:33
211 查看
实例变量属于类的某个特定实例,静态变量属于类,因为它们的作用域在整个类中都是可用的,所以也被称为全局变量。在类中定义实例变量或静态变量时,可以放在任何位置。但为了美观规范,设计类时最好统一放在类中的最前面。
因为不符合语法规则, 赋值语句这个操作要放在语句块中才能执行。但可以声明变量后直接赋值进行初始化:
这里仅介绍实例变量与静态变量的区别,关于static的使用和对象的创建细节这里不作过多讨论。
相比于全局变量,局部变量没有默认值,必须手动进行初始化赋值。
局部变量的生命周期取决于所处的块,当方法执行结束或语句块结束,其中的局部变量就会被释放。
在main方法中定义的变量也是局部变量,如下:
for循环语句块中定义的初始条件变量,也是局部变量:
注意:如果定义的局部变量和全局变量同名,则在该块中优先使用局部变量。也可以通过this调用同名实例变量或者类名调用同名静态变量。但定义局部变量时,最好不要和全局变量同名,避免引起混淆。
格式如下:
变量 :variableType name = value; 常量 :static final variableType NAME = value; 常量名建议大写。
final可以用于修饰类、方法和变量,用于标识不可更改。
定义常量时,修饰符一般为public static final , 表明该常量是公开的,随着类加载而加载,只分配一次内存,并且被类的所有对象共享,使用时直接类名.常量名。 因为是常量,所以无需担心值被对象修改。若不用static修饰常量,类创建实例后,才能调用实例常量,并且每次都要为该常量重新分配内存。
static final 与 final的修饰区别之分,孰优孰劣,一目了然。
public class Testvariable { int a; //实例变量 static int b; //静态变量 //不能声明后,单独赋值 a = 5; //error b = 5; //error }
因为不符合语法规则, 赋值语句这个操作要放在语句块中才能执行。但可以声明变量后直接赋值进行初始化:
int a = 5; //实例变量 static int b = 5; //静态变量
实例变量和静态变量的区别
实例变量属于类的某个特定实例,每一个对象对实例变量的操作都不会影响到其他对象的实例变量,它们之间毫无关系。 但静态变量属于类,为所有对象所共享,当某个对象对静态变量修改时,其他对象会受其影响。public class Testvariable { int a = 5; //实例变量 static int b = 10; //静态变量 public static void main(String[] args) { Testvariable t1 = new Testvariable(); Testvariable t2 = new Testvariable(); t1.a = 6; t2.a = 7; //对象修改实例变量只会影响它本身的实例变量值 System.out.println(t1.a); // 6 System.out.println(t2.a); // 7 System.out.println(t1.b); //10 //t2对象修改静态变量,会影响到t1对象 t2.b = 12; System.out.println(t1.b); // 12 }
这里仅介绍实例变量与静态变量的区别,关于static的使用和对象的创建细节这里不作过多讨论。
局部变量
如果一个变量不是在类中定义,而是在某个语句块或方法中,则该变量就是局部变量。局部变量的作用范围: 从定义该局部变量开始,直到所处的块结束。因为局部变量的作用域特性,所以无法使用访问权限修饰符,包括static修饰符。相比于全局变量,局部变量没有默认值,必须手动进行初始化赋值。
局部变量的生命周期取决于所处的块,当方法执行结束或语句块结束,其中的局部变量就会被释放。
在main方法中定义的变量也是局部变量,如下:
public static void main(String[] args) { //error,Illegal modifier for parameter a; only final is permitted public int a = 5; //局部变量没被初始化,不能使用。 int a; System.out.println(a); //error //正确定义局部变量 int b = 5; }
for循环语句块中定义的初始条件变量,也是局部变量:
int[] a = new int[5]; for(int i = 0; i <a.length; i++ ) { //... } System.out.println(i); //for循环语句块中定义的i变量仅限于该块中使用
注意:如果定义的局部变量和全局变量同名,则在该块中优先使用局部变量。也可以通过this调用同名实例变量或者类名调用同名静态变量。但定义局部变量时,最好不要和全局变量同名,避免引起混淆。
public class Testvariable { public String str = "实例变量str"; public static String staStr = "静态变量staStr"; public static void main(String[] args) { test(); } public static void test() { String str = "局部变量str"; String staStr = "局部变量staStr"; System.out.println(str); //局部变量str System.out.println(staStr); //局部变量staStr System.out.println(new Testvariable().str); //实例变量str。静态方法中,this与super无法使用 System.out.println(Testvariable.staStr); //静态变量staStr } }
常量的作用
变量表示变化的值,常量表示常久不变的值。在程序运行时,变量的值会根据不同的情况进行改变,而常量则不会被改变。格式如下:
变量 :variableType name = value; 常量 :static final variableType NAME = value; 常量名建议大写。
final可以用于修饰类、方法和变量,用于标识不可更改。
定义常量时,修饰符一般为public static final , 表明该常量是公开的,随着类加载而加载,只分配一次内存,并且被类的所有对象共享,使用时直接类名.常量名。 因为是常量,所以无需担心值被对象修改。若不用static修饰常量,类创建实例后,才能调用实例常量,并且每次都要为该常量重新分配内存。
public class Testvariable { public final int MIN = 15; //实例常量 public static final int MAX = 100; //静态常量 public static void main(String[] args) { //类名.常量 System.out.println(Testvariable.MAX); //创建实例,才能调用实例常量 Testvariable t = new Testvariable(); Testvariable t2 = new Testvariable(); System.out.println(t.MIN); System.out.println(t2.MIN); } }
static final 与 final的修饰区别之分,孰优孰劣,一目了然。
相关文章推荐
- 生命周期,作用域的定义;说明全局变量、静态变量、局部变量、const变量的生命周期、作用域
- 作用域 全局变量 局部变量 静态变量 外部变量 常量 volatile变量
- 类变量、成员变量、实例变量、局部变量、静态变量、全局变量的定义与区别
- Java_12_变量(variable)_局部变量_实例变量_静态变量_常量_命名规范
- 作用域 全局变量 局部变量 静态变量 外部变量 常量 volatile变量
- 生命周期,作用域的定义;说明全局变量、静态变量、局部变量、const变量的生命周期、作用域
- 静态变量(类变量),实例变量,常量;静态方法(类方法),实例方法
- 内存管理:类变量、成员变量、实例变量、局部变量、静态变量、全局变量 的解释。
- 对变量和常量的分析,常量+{$J+}=可定义作用域的全局变量
- 类变量、成员变量、实例变量、局部变量、静态变量、全局变量 的解释。
- sqlite常量的定义及其含义
- 局部变量,全局变量,静态变量的作用域,生命期?
- 类变量、成员变量、实例变量、局部变量、静态变量、全局变量 的解释。
- Java中静态变量,实例变量和局部变量
- java中的关键字static(静态变量)和final定义常量
- Java枚举特殊类及其静态常量实例
- c++ 全局/局部变量/常量声明/定义(二)
- static 变量 作用域 全局变量 局部变量 外部变量 常量 volatile变量
- [转]PHP变量的声明及其作用域&静态变量
- java 中的 成员变量、局部变量、静态变量、类变量、非静态变量、实例变量、向前引用、非法向前引用、静态代码块、非静态代码块 执行时机