java关键字 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="";为他修改值,其他的对象就都对应改了,只改一次。

具体实现如下:

[java]  view plain  copy
  1. public class Person {  
  2.     String name;  
  3.     int age;  
  4.     static String city = "A城";//使用static定义城市属性  
  5. //  使用构造方法设置name和age,不用设置静态区地城市了  
  6.     public Person(String name, int age){  
  7.         this.name = name;  
  8.         this.age = age;  
  9.     }  
  10.     public String toString(){  
  11.         return "姓名:"+this.name+",年龄:"+this.age+",城市:"+city;  
  12.     }  
  13. }  

[java]  view plain  copy
  1. public class StaticDemo01 {  
  2.     public static void main(String[] args) {  
  3.         Person p1 = new Person("张三",22);  
  4.         Person p2 = new Person("李四",24);  
  5.         Person p3 = new Person("王五",33);  
  6.         System.out.println("--------修改之前-------");  
  7.         System.out.println(p1+"\n"+p2+"\n"+p3);  
  8.         Person.city = "B城";//修改static属性,用类名称直接调用  
  9.         System.out.println("--------修改之后-------");  
  10.         System.out.println(p1+"\n"+p2+"\n"+p3);  
  11.     }  
  12. }  

输出结果:

[java]  view plain  copy
  1. --------修改之前-------  
  2. 姓名:张三,年龄:22,城市:A城  
  3. 姓名:李四,年龄:24,城市:A城  
  4. 姓名:王五,年龄:33,城市:A城  
  5. --------修改之后-------  
  6. 姓名:张三,年龄:22,城市:B城  
  7. 姓名:李四,年龄:24,城市:B城  
  8. 姓名:王五,年龄:33,城市:B城  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值