变量的分类
全局变量(成员变量)
定义:直接在类中声明的变量成为全局变量。
package Student ;
public class Student1 {//类
static String id;
String name;
String mobile;
String adress;//全局变量,且有默认值,int型为0,浮点习型为0.0,引用型为null,字符串型为空。作用在整个类里面
全局变量定义在类下面,其中id为静态全局变量,name,mobile,adress均为非静态全局变量。
注意
- 全局变量的作用范围是在该“类”中整个适用,在该类中的任意位置可以根据该全局变量的性质和特点通过不同方法来调用该全局变量;
- 全局变量默认存在初始值,整形(int型全局变量的初始值为0);布尔型(Boolean型全局变量的默认值为false);浮点型(double型全局变量默认值为0.0);字符型(char型全局变量默认初始值为空);引用类型全局变量的默认值为null。
public class Field {
static int v;//定义int类型数据;
static double w;//定义double类型数据;
static char x;//定义char类型数据;
static boolean y;//定义boolean类型数据;
static String z;//定义String类型数据;
public static void mian (String []args){
System.out.println(v);//输出0;
System.out.println(w);//输出0.0;
System.out.println(x);//输出空,实质上此时x的值为0;
System.out.println(y);//输出false;
System.out.println(z);//输出null;
}
}
成员变量定义后,其作用域是其所在的整个类。成员变量的定义没有先后顺序,但是最好将成员变量的定义集中在类的顶部。
public class Field {
static int x =10;//定义int类型;
public static void main (String []args){
System.out.println(x);//输出10;
System.out.println(flag);//输出true ;
}
static boolean flag =true ;//定义boolean类型数据;
}
局部变量
定义位置:代码块
非静态代码块,创建对象时执行,方法参数列表,方法体内定义的变量均为局部变量
定义:方法中的参数、方法中定义的变量和代码块中定义的变量统称为局部变量。
作用范围:局部变量的作用域范围从定义的位置开始到其所在语句块结束。
但是其作用域为从定义的位置开始到其自其所在直接语句块结束;
注意:局部变量在使用以前必须显式初始化或赋值,局部变量没有默认值。
public static Field {
static void show (int x);//**不会报错,因为show方法在调用时一定会引入一个具体的值。**
int y;//方法中的局部变量
//**System .out .println("y="+y); 程序在编译时会报错,因为y在定义的时候没有默认值也没有赋给初始值**
y=2;//赋值
System.out .println ("y="+y);//输出2
}
public static void main String []args){
show (1);
}
}
声明局部变量时,数据类型前除final外不允许有其他关键字,即其定义格式为: [final] 数据类型 变量名 = 初始值;
非静态代码块,创建对象的时候执行
1.如果局部变量的名字与全局变量的名字相同,则在局部变量的作用范围内全局变量被隐藏,即这个全局变量在同名局部变量所在方法内暂时失效。
2.如果在局部变量的作用域范围内访问该成员变量,则必须使用关键字this来引用成员变量。
double a=1.0;
{
System.out.println(this.a);
int a=1;
System.out.println(a);//如过局部变量名与成员变量名相同,则在局部变量作用范围内使用的是局部变量的值,如果使用全局变量,则需要使用this
}
static {
int a=100;
System.out.println(对象名称.a);//this不能用在静态方法或者代码块中
}