java中static修饰符

static的特点
1、 随着类的加载而加载
2、 优先于对象存在。
3、 被类的所有对象所共享
4、 可以通过类名调用,也可以通过对象名调用。

class Example{
    static int  a;
}

可以直接通过 Example.a来直接调用a。
5、静态方法只能访问静态成员变量和静态的成员方法,不能存在非静态的变量。
非静态的方法可以访问静态变量和非静态变量。

class student{
		int a=10;
		static int b=10;
		public void show(){
			//此两句话的含义相同第一句的a其实就是this.a
			System.out.println(a);
			System.out.println(this.a);
		}
		public static method(){
			//此句会报错,因为a是非静态变量,静态方法随着类的加载而加载,但是this随着对象创建而创建的,静态方法先创建,不能访问为创建的this
			System.out.println(a);

			//此句不会报错,因为a是非静态变量,也是先被创建。
			System.out.println(b);
		}
}

6、
A、静态变量属于类,所以也成为类变量
  成员变量属于对象,所以也称为实例变量(对象变量)。
B、静态变量存在与方法区的静态区,成员变量存储在堆内存。
C、静态变量随着类的加载而加载,随着类的消失而消失。
  成员变量随着对象的创建而存在,随着对象的消失而消失。
D、静态变量可以通过类名调用,也可以通过对象调用
 成员变量只可以通过对象名调用。

class Demo{
	static int age;
	
	public Demo(){
		
	}
	public Demo (int age){
		this.age=age;
		
	}
	public void show(){
		System.out.println(age);
	}
}
class DemoTest{
	public static void main(String args[]){
		Demo a1=new Demo();
		
		a1.age=10;
		System.out.print("此处输出的是a1中的age:");
		a1.show();
		
		
		//如果Demo类中的age不是static类型的,a2中未对age进行赋值,会被初始化为0  输出结果为0
		//如果Demo类中的age是static类型的,a2中未对age进行赋值,所以输出为a1的age值  输出结果为10
		Demo a2=new Demo();
		System.out.print("此处输出的是a2中的age:");
		a2.show();
		
		//如果设置Demo中的age为static类型,那么更改对象a2中的age就是对所有对象中的的age进行更改,所以最后a1,a2的age都为5
		a2.age=5;
		System.out.print("此处输出的是a1中的age:");
		a1.show();
		System.out.print("此处输出的是a2中的age:");
		a2.show();	
	}
}

static的内存图解(此图为转载)
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值