实例/静态变量、局部变量和常量的定义及其作用域

实例变量属于类的某个特定实例,静态变量属于类,因为它们的作用域在整个类中都是可用的,所以也被称为全局变量。在类中定义实例变量或静态变量时,可以放在任何位置。但为了美观规范,设计类时最好统一放在类中的最前面。

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的修饰区别之分,孰优孰劣,一目了然。

原文地址:https://www.cnblogs.com/fwnboke/p/8525329.html

时间: 2024-08-28 15:34:10

实例/静态变量、局部变量和常量的定义及其作用域的相关文章

C++局部变量、全局变量、静态变量(堆、栈、静态存储区)

1 static关键字 1.1 隐藏 eg: //a.c文件中 char a = 'A'; void msg() { printf("Hello\n"); } //main.c文件中 extern char a; printf("%c",a); 输出结果:A Hello 所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问.a是全局变量,msg是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的. 如果加了stat

比较全局变量、全局静态变量、局部变量、局部静态变量的区别

比较全局变量.全局静态变量.局部变量.局部静态变量的区别,他们在编译完后存储位置在什么地方.初始化值在什么地方.内存什么时候分配.赋初值对这些变量有哪些影响等.要弄清楚这些问题,首先要弄清楚下面几个知识点. C语言分下面几个存储区: 1.栈区(stack) 由编译器在需要的时候自动分配释放,在不需要的时候就自动清除的变量存储区.通常存放的变量是函数的参数值.局部变量的值等,其操作方式类似于数据结构中的栈. 2.堆区(heap) 一般由程序员去分配释放,和编译器完全没有关系,直接由我们的应用程序去

静态变量,全局变量,局部变量的区别

1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域. 从作用域看: 1>全局变量具有全局作用域.全局变量只需在一个源文件中定义,就可以作用于所有的源文件.当然,其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量. 2>静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静

静态变量、全局变量和局部变量

1.全局变量的作用域是整个项目,它只需要在一个源文件中定义就可以作用于所有的源文件,其它不包括全局变量定义的文件需要用extern关键字再次声明这个全局变量. 2. 全局变量.静态全局变量.静态局部变量都是在静态存储区(全局数据区)中分配空间的,而局部变量是在栈上分配空间的. 3. 全局变量.静态变量的生命期和程序生命期是一样的,在程序结束之后操作系统会回收空间. 4. 全局变量和静态变量都是保存在静态存储区中,生命期和程序一样,但是不同的是全局变量的作用域是整个项目,而静态全局变量是当前程序文

成员变量,局部变量,栈,堆的关系

变量主要有类变量.成员变量.局部变量三种. 变量主要有类变量.成员变量.局部变量三种. 类变量的的格式如下 class ClassA: static int age; 也就是说,类变量是定义在类中(而不是方法中)并且有static 修饰的变量. 成员变量的格式如下: class ClassB: int age; 也就是说,成员变量是定义在类中,但是没有static 修饰的变量. 局部变量呢,则是定义在方法中的(注意:JAVA中不怎么用函数这种说法的).比如最常见的. class ClassC:

c++静态全局,局部变量---18

原创博文,转载请标明出处--周学伟  http://www.cnblogs.com/zxouxuewei/ static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 一.面向过程设计中的static C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域. 从作用域看: 1.全局变量具有全局作

PHP之static静态变量详解(一)

什么是static静态变量?(以下为在C语言中的理解) 静态变量 类型说明符是static. 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直到整个程序运行结束(相反,而 auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放).静态变量虽在程序的整个执行过程中始终存在,但是在它作 用域之外不能使用. 另外

类的相关知识(封装、继承、多态、方法、构造方法、接口、抽象类、静态方法、静态变量等)

类 通过抽象,得到的某一个事物的共同特征. 1.类是抽象的,概念的,代表一类事物,比如人类,猫类-- 2.对象是具体的,实际的,代表一个具体事物 3.类是对象的模板,对象是类的一个个体,实例 class Cat           // Java中类名的首字母大写 { //下面的就是类的成员变量.属性 Int age; String name; String color; } 类的结构: Package 包名: Class 类名 extends 父类 implements 接口名 { 成员变量(

变量,final常量,类成员变量,static关键字,实例变量,静态变量,局部变量

1.常量:又称为final变量,在整个程序中仅能被赋值一次 final int num = 1215; num = 1216; // 错误,仅能赋值一次 2.类成员变量:不在方法中定义的变量即为成员变量,在方法体内定义的变量则为局部变量 成员变量含义:对象的属性 public class Book{ int id; string name; //两个成员变量 public String getName(){ int id = 0;  //局部变量,必须进行赋值或初始化 } } 3.static关