各位父老乡亲们,大家好啊!最近本Java菜鸟被变量类型搞得真是迷迷糊糊啊~
废话不多说,上图~
简单概述:
- 类变量:独立于方法之外的变量,用 static 修饰。
- 实例变量:独立于方法之外的变量,不过没有 static 修饰。
- 局部变量:类的方法中的变量。
示例:
class A {
static int a;//类变量(静态变量)
String b;//实例变量
public static void main(String[] args) {
int c = 0;//局部变量
}
void b(int e){//参数e也是局部变量
int d = 0;//局部变量
}
}
一、类变量(静态变量)
- 定义在类里面,方法体外面的变量
- 有static,有默认值,数值型默认为0(或0.0),布尔型默认为false,引用类型默认为null
- 可以通过 类名.类变量名 来调用
- 类变量(静态变量)可以在该类的方法体里面直接使用
public class Test {
static String e = "九九今天学习了吗";//该变量e定义在Test类里面,方法体外面
public static void main(String[] args) {
//不在同一个类的类变量(静态变量)可以用类名直接调用,也可以通过实例化的对象来调用
Person p = new Person();
System.out.println(p.a);//第一种调用方法:通过对象来调用
System.out.println(Person.b);//第二种调用方法:通过类名直接调用
System.out.println(Person.c);
System.out.println(Person.d);
System.out.println(e);//类变量(静态变量)在同一个类的方法里可以直接使用
}
}
class Person{
static int a;
static float b;
static boolean c;
static String d;
}
输出结果:
二、实例变量
- 实例变量声明在一个类中,但在方法、构造方法和语句块之外 。
- 实例变量具有默认值。数值型变量的默认值是0(或者0.0),布尔型变量的默认值是false,引用类型变量的默认值是null。
- 实例变量从属于对象,只能通过对象调用来使用变量
示例:
public class Test {
String e = "九九今天学习了吗";//该实例变量e定义在Test类里面,方法体外面
public static void main(String[] args) {
Test test = new Test();//实例变量e是在Test类中,所以需要new一个Test的对象test,用test来调用e
Person p = new Person();//实例变量a,b,c,d是在Person类中,需要new一个Person类的对象来调用a,b,c,d
System.out.println(p.a);
System.out.println(p.b);
System.out.println(p.c);
System.out.println(p.d);
System.out.println(test.e);
}
}
class Person{
int a;
float b;
boolean c;
String d;
}
输出结果:
三、局部变量
- 在方法中定义的变量
- 作用域:从声明处开始,直到含该变量的块结束
- 局部变量在使用前进行赋值
- 参数也是一个局部变量,作用域是整个方法
- 可以在一个方法不同块中声明同名的局部变量,不能在嵌套块中或同一块中两次声明同一个局部变量(同名局部变量作用域不能重叠)
四、常量
- 常量:初始化之后不会再变动的值。
- 常量名一般使用大写字符。
- static final 皆为修饰符,不存在先后顺序
示例:
//static final 皆为修饰符,不存在先后顺序
public class Test {
final int AA = 1;
static final int BB= 2;
public static void main(String[] args) {
Test test = new Test();
Person P = new Person();
System.out.println(test.AA);
System.out.println(BB);
System.out.println(P.CC);
}
}
class Person{
final int CC = 99;
}
输出结果:
最后来一个类变量(静态变量)和实例变量的对比~
实例变量为所属对象所私有,而类变量为所有对象所共有
示例:
public class A {
static int a = 0;
int b = 1;
}
class B{
public static void main(String[] args) {
A a1 = new A();
A a2 = new A();
a1.a=99;
a1.b=100;
System.out.println(a2.a);//输出99
System.out.println(a2.b);//输出1
a2.a = 3;
System.out.println(a1.a);//输出3
System.out.println(a2.a);//输出3
}
}
各位父老乡亲们,点个赞再走呗~