static类和方法

来源:互联网 发布:百度seo推广方案 编辑:程序博客网 时间:2024/04/29 22:34

Java语言可以使用static关键字修饰类的成员变量和成员方法。被static修饰的成员变量,成员方法一般被称为静态(或者全局)变量(static field),静态方法(static method)。

本文介绍Java static的概念与使用方法。

有别于一般的变量和方法,静态变量,静态方法的作用域是类的所有对象。也就是说,当运行时,在程序空间中,类的所有对象访问到的静态变量都是同一个值,当其中一个对象改变了静态变量的值,其他对象都将受到影响。

正因为这样,静态变量,静态方法可以(建议)通过 类名.静态变量/类名.静态方法 直接存取。

对象.变量/方法


没有使用static修饰的成员变量,成员方法是作用于对象域的,通常被称作对象变量(instance field),对象方法(instance method)。当某个对象被创建时,它们才真正地存在于内存空间之中,而且对象本身对它们的改变,不会影响到其它对象。就好像 Person的一个对象zhangsan,zhangsan的改变不会影响到其它Person对象一样。


对象.变量/方法 定义例:
private String name;

private void someMethod() {
...
}

类.变量/方法


使用static修饰的成员变量,成员方法可以看作类的固有的,它作用于类的全体对象。当类的所有对象需要共享同一值时,可以使用static来定义。

例如,一个店铺(类),拥有多个分店(对象),便可以使用一个static变量来描述所有店的总营业额,这样每一个分店可以简单地访问(读/写)到公用的店的总营业额。

又如,PI=3.1415926,这时可以使用static来定义PI变量。当然,通常这种不希望改变static变量的情况,一般使用static final来修饰。


类.变量/方法 定义例:

private static long saleAccount;
private static float PI = 3.1415926;

private static void someMethod() {
...
}

Java static范例


TestStatic.java

view plaincopy to clipboardprint?
  1. public class TestStatic {   
  2.     private static String staticValue = "";   
  3.     @SuppressWarnings("unused")   
  4.     private String value;   
  5.        
  6.     public TestStatic() {   
  7.         super();   
  8.     }   
  9.   
  10.     @SuppressWarnings("static-access")   
  11.     public static void main(String []args) {   
  12.         //直接使用 类名.静态方法名()   
  13.         System.out.println("TestStatic.staticValue");   
  14.         TestStatic.setStaticValue("static value");   
  15.            
  16.         TestStatic t1 = new TestStatic();   
  17.         TestStatic t2 = new TestStatic();   
  18.   
  19.         //t1, t2存取到的值应该是一样的   
  20.         System.out.println("from t1:staticValue=" + t1.getStaticValue()   
  21.         System.out.println("from t2:staticValue=" + t2.getStaticValue());   
  22.         //通过对象t1改变static变量   
  23.         System.out.println("t1.staticValue");   
  24.         t1.setStaticValue("t1");   
  25.         //t1, t2存取到的值应该是一样的   
  26.         System.out.println("from t1:staticValue=" + t1.getStaticValue());   
  27.         System.out.println("from t2:staticValue=" + t2.getStaticValue());   
  28.   
  29.         //通过对象t2改变static变量   
  30.         System.out.println("t2.staticValue");   
  31.         t2.setStaticValue("t2");   
  32.         //t1 受到影响   
  33.         System.out.println("from t1:staticValue=" + t1.getStaticValue());   
  34.     }   
  35.        
  36.     public static String getStaticValue() {   
  37.         return staticValue;   
  38.     }   
  39.        
  40.     public static void setStaticValue(String staticValue) {   
  41.         //直接通过 类名.静态变量 存取   
  42.         TestStatic.staticValue = staticValue;   
  43.     }   
  44.        
  45.     public String accessStaticValue () {   
  46.         value = staticValue;    //普通的方法可以存取static 方法或 static变量   
  47.            
  48.         return staticValue;   
  49.     }   
  50. }  
原创粉丝点击