静态变量与方法


  • 静态变量
  • 对于类的成员变量来说,每个对象在内存中都拥有自己的成员变量,对象的方法操作都是作用于对象本身的变量,各对象的数据是相互独立的。然而,实践中有时需要在对象间共享数据,既希望用一个内存区域来保存一个特定数据,所有的对象共享该数据,或者不通过任何对象就能访问它。可以使用Java的static关键字来解决该问题
  • 在变量前加上static关键字,变量就变成了静态变量,静态变量类似于一个全局性的变量,在内存中只存在它的一个副本,所有的对象共享它。
class TickerSall{
public static int totalTickers=100;
public int sallNum; //代表一次卖掉的票数。
public TickerSall(int num){
sallNum=num;
totalTickers-=num;
}
}
class Static ValueTest{
public static void main(string args[]){
System.out.println("总票数为:"+TickerSall.totalTIckers);
TickerSall t1 =new TickerSall(2);
System.out.println("卖掉"+t1.sallNum+"张票"); //通过对象访问成员变量
System.out.println("还剩下票数为:"+t1.totalTickers); //通过对象访问静态变量
TIckerSall t2 =new TickerSall(3);
System.out.print("卖掉"+t2.sallNum+"张票\t");
System.out.print("还剩下票数为:"+t2.totalTickers);
TickerSall t3=new TickerSall(1);
System.out.print("卖掉"+t3.sallNum+"张票\t");
//通过类名访问静态变量
System.out.println("还剩下票数为:"+TickerSall.totalTIckers);
}
}

程序在类TIckerSall中定义了一个静态变量totalTickers 和一个成员变量 sallNum,totalTIckers用来表示还剩下的总票数,sallNum用来存放每次卖掉的票数。在main()方法中,先后创建了三个TickSall对象,从程序运行结果可以看出,所有实例对象共同操作静态变量数据,每个对象对该静态变量的操作都反应给所有对象。

可以用两种方式访问静态属性:

类名.静态变量

类对象.变量

  • 静态方法
  • 同样,也可以在方法前添加static关键字来定义静态方法,静态方法于静态变量类似,可以通过 类名.静态方法 的方式直接调用。静态方法不与类的任何对象关联,因此,静态方法不能访问属于某个对象的成员变量。静态方法常用于为应用程序中的其他类提供一些实用工具,,在java的类库中大量的静态方法正是出于此目的而定义的。如在Java.lang.math类中的许多方法都定义成静态方法,可以直接通过Math类名调用。
  • 封装与抽象
  • 面向对象的封装是指信息与实现细节的隐藏。与封装互为补充的一个概念是抽象(或称为类的接口),抽象位类定义了一个清晰的边界,即类提供给类的使用者的接口(数据与行为)。

java的访问修饰符包括 public private 和 protected

  • public : 由public修饰的类的成员变量和成员方法可以被其他任何类访问。
  • private : 由private修饰的类的成员变量和成员方法不能被其他类直接访问,只能被声明它的类直接访问,只对被声明它的类所使用。使用private修饰符能实现数据与实现细节的隐藏。
  • protected:由protected修饰的成员变量和成员方法可悲他的子类以及同一个包中的类访问。
  • 没有访问修饰符的成员称为package(包)成员,可被声明它的类和同一个包中的其他类所访问。