静态变量成员变量局部变量的调用方法和内存中的区别。

一.静态变量,成员变量,局部变量

1)局部变量
   方法或语句块内部定义的变量。
   生命周期是从声明位置开始到方法或语句块执行完毕为止。
   注:局部变量必须先声明,再赋值(初始化),才能被使用。
2)成员变量(实例变量)
   方法外部、类的内部定义的变量。
   从属于对象,生命周期伴随对象始终。 
   注:如果成员变量不进行初始化,它会自动初始化成该类型的默认初始值。
     使用成员变量,还需要先创建这个类的对象。

public class TestStatic {
	int a=4;
	public void test() {
		System.out.println(a); //不会报错
	}
}

因为在类内部的时候默认为this,也就是本对象。但是如果你在该类中的main方法中的话,只是一个程序的入口,不代表该类,你要使用该类还是得new。在该类的static方法中的话也是,需要先new出实例化对象。

使用成员变量,还需要先创建这个类的对象,在其他类中也一样。

public class TestStatic {
	int a=4;

	public static void test() {
		TestStatic tt = new TestStatic(); 
		System.out.println(tt.a);   //4
	}
}
class Test2{
	public void test1() {
		TestStatic tt = new TestStatic();
		System.out.println(tt.a);   //4
	}
}

3)静态变量(类变量)
   使用static关键字定义。
   从属于类,生命周期伴随类始终,从类加载到卸载。

public class TestStatic {
	static int a=4;

	public static void test() {
		System.out.println(a);    //在本类中可以直接调用,不用实例这个类的对象。
	}
}

class Test2{
	public void test2() {
		System.out.println(TestStatic.a); //在其他类中使用的话可以通过 类.变量名的方式直接调用,不用实例那个类的对象。
	}
}

二.成员变量的静态和静态在内存中的区别

成员变量有静态和非静态。

一:局部变量:每当程序调用方法时,系统都会为该方法建立一个方法栈,其所在方法的成员变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束,这就局部变量的生命周期决定于方法
其中当局部变量可以是基本类型的变量,也可以是引用类型的变量,
(1)当声明是基本类型的变量的时,其变量的名称和数值是放在方法栈
(2)当声明的是引用变量时,所声明的变量(引用:地址)是放在方法的栈中,该变量所指向的对象是放在堆类存中的

二:成员变量,放在堆中的,同样成员变量既可是基本类型的变量 也可是引用类型的变量
(1)当声明的是基本类型的变量其变量名及数值是时放在堆类存中的。
(2)引用类型时,其声明的变量仍然会存储一个内存地址值,该内存地址值指向所引用的对象

三:静态成员变量是共享数据,在共享区中,也叫方法区中
非静态成员变量内存中。

四:局部变量如果是基础类型,则在上,如果是引用类型,则引用被存在栈上,引用指向的对象是在堆上的。局部变量定义在方法中,方法结束内存释放。

五:静态成员变量存储于方法区中,在类定义的时候已经被装载和分配,所以在实例化对象之前,就可以被调用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值