成员变量(存在于堆内存中,和类一起创建)和局部变量(存在于栈内存中,当方法执行完成,让出内存,让其他方法来使用内存)。
区别
1、在类中的位置不同
成员变量:在类中方法外面
局部变量:在方法或者代码块中,或者方法的声明上(即在参数列表中)
2、在内存中的位置不同,可以看看Java程序内存的简单分析
成员变量:在堆中(方法区中的静态区)
局部变量:在栈中
3、生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用或者代码块的执行而存在,随着方法的调用完毕或者代码块的执行完毕而消失
4、初始值
成员变量:有默认初始值,java会给她一个初始值:基本数据类型是0,应用数据类型是null
局部变量:没有默认初始值,使用之前需要赋值,否则编译器会报错(The local variable xxx may not have been initialized)
局部变量的优先级高于成员变量
public class myTest3 {
String name = "成员变量";
public static void main(String[] args) {
new myTest3().show();
}
public void show() {
//局部变量优先级比成员变量高
String name = "局部变量";
System.out.println(name);
}
}
我们看到输出的是show方法中定义的name变量,在使用变量时遵循的原则是就近原则,那么如何访问到成员变量name呢,Java中提供了this(表示调用对象本身)这个关键字用于访问成员变量。
public class myTest3 {
String name = "成员变量";
public static void main(String[] args) {
new myTest3().show();
}
public void show() {
//局部变量优先级比成员变量高
String name = "局部变量";
System.out.println(this.name);
}
}
final int a 和static final int a 的区别
final的值是不能改变的
static是全局变量,只能有一个
static final int a的意思就是不管你new多少次只有一个a变量且是不可改变的
用static修饰的属性在类加载的时候就加载,是类的属性,也就是说直接可以用类名.a访问,不需要实例化,而不加static的是实例化后对象的属性,是对象.a才能访问
public class myTest3 {
//初始值全局变量为13,且不可改变
static final int age= 13;
public static void main(String[] args) {
new myTest3().show();
System.out.println(myTest3.age);
}
public void show() {
//局部变量优先级比成员变量高
int age = 19;
System.out.println(age);
}
}
static 的用法优势
静态方法中不能使用this和super关键字
static是静态的意思,被static修饰的变量,在内存中只有一份,被所有对象共享,static修饰额方法叫静态方法,从属于类,
可以通过类调用,也可以通过对象调用,方法中不能访问非静态变量和方法
1.static是一个修饰符,用于修饰成员。(成员变量,成员函数)static修饰的成员变量称之为静态变量或类变量。
2.static修饰的成员被所有的对象共享。
3.static优先于对象存在,因为static的成员随着类的加载就已经存在。
4.static修饰的成员多了一种调用方式,可以直接被类名所调用,(类名.静态成员),通常用于工具类
5.static修饰的数据是共享数据,对象中的存储的是特有的数据。
来源:oschina
链接:https://my.oschina.net/u/4115727/blog/3211126