静态变量与方法
静态变量
对于类的成员变量来说,每个对象在内存中都拥有自己的成员变量,对象的方法操作都是作用于对象本身的变量,各对象的数据是相互独立的。然而,实践中有时需要在对象间共享数据,既希望用一个内存区域来保存一个特定数据,所有的对象共享该数据,或者不通过任何对象就能访问它。可以使用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(包)成员,可被声明它的类和同一个包中的其他类所访问。