Java关键字(二)static关键字(static声明属性)

static关键字:

a、使用static与非static属性声明的区别?

b、static声明的属性或方法可以直接由类名称调用(用非static声明的属性和方法只能是实例化对象来调用,不能直接用类名来调用其属性或方法。这样如果一个属性或方法经常使用就不用实例化对象了,直接通过类名来调用了。不用一遍遍创建对象,提高了效率)

c、static方法只能访问static声明的属性或方法,不能访问非static

d、静态代码块是用static声明的代码块,以及他的执行顺序是怎样的

1、Java中常用的内存区域

(1)栈内存:保存所有的对象名称(保存引用的堆内存空间的地址);由编译器自动分配释放方法执行结束后,系统自动释放JVM内存资源。

(2)堆内存:保存每个对象的具体属性内容;由程序员分配(new创建)释放,jvm不定时查看这个对象,如果没有引用指向这个对象就回收。

(3)全局数据区(静态区):保存全局变量/静态变量(static类型的属性)、字符串常量;不释放。

(4)全局数据区(代码区):存放所有方法的二进制代码,多个对象共享一个代码区域。

2、static声明属性

每个对象都有自己的属性,如果现在有些属性希望被所有对象共享,必须声明为static属性,可直接用类名称调用。

例如,定义一个Person类,含有属性:name、age、city,打印输出实例化后的对象。如果我们要修改city信息的话,之前我们已经产生了100个对象了,把city改了这样就会修改100次,效率可想而知。改进:我们把city(可能要经常修改的属性)声明为static,在全局数据区其他的所有对象都可以访问这个属性。这样我们通过“类名称”.city="";为他修改值,其他的对象就都对应改了,只改一次。

具体实现如下:

public class Person {
	String name;
	int age;
	static String city = "A城";//使用static定义城市属性
//	使用构造方法设置name和age,不用设置静态区地城市了
	public Person(String name, int age){
		this.name = name;
		this.age = age;
	}
	public String toString(){
		return "姓名:"+this.name+",年龄:"+this.age+",城市:"+city;
	}
}

public class StaticDemo01 {
	public static void main(String[] args) {
		Person p1 = new Person("张三",22);
		Person p2 = new Person("李四",24);
		Person p3 = new Person("王五",33);
		System.out.println("--------修改之前-------");
		System.out.println(p1+"\n"+p2+"\n"+p3);
		Person.city = "B城";//修改static属性,用类名称直接调用
		System.out.println("--------修改之后-------");
		System.out.println(p1+"\n"+p2+"\n"+p3);
	}
}

输出结果:

--------修改之前-------
姓名:张三,年龄:22,城市:A城
姓名:李四,年龄:24,城市:A城
姓名:王五,年龄:33,城市:A城
--------修改之后-------
姓名:张三,年龄:22,城市:B城
姓名:李四,年龄:24,城市:B城
姓名:王五,年龄:33,城市:B城


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值