java学习之类成员

声明:此内容参考书籍《疯狂java讲义第二版》

static修饰的成员就是类成员,static关键字不能修饰构造器,static修饰的类成员属于整个类,不属于单个实例。

类成员的生命周期:当系统第一次使用类时,系统为该类成员分配内存空间,类成员开始生效,知道该类被卸载,该类的类成员占有的内存才被系统的垃圾回收机制回收,类成员生存范围等同于该类的生命范围,当类初始化完成,类成员也不初始化完成。

类成员的访问:既可以通过类来访问,也可以通过类的对象来访问。但是通过对象来访问并不是访问该对象的所拥有的成员变量,系统不会再为类对象分配内存,也不会再次对类成员进行初始化。可以理解成当通过对象来访问类成员时,系统会在底层转换成通过该类来访问类变量。

类方法:也是类成员的一种,类方法也是属于类的,通过使用类作为调用者来调用类方法,但也可以使用对象来调用类方法。

class Person{
   static int a =5;
   static void test(){
       System.out.println("这是类方法");
   }
}
Person p=new Person();
//调用成变量
Person.a;
p.a;
//调用成员方法
Person.test();
p.test();

单例类

大部分情况下,我们把类的构造器定义为public访问权限,允许任何类自由创建该类的对象。但在某些时候,允许其他类自由创建该类的对象没有任何意义,还可能造成系统性能下降,如频繁的创建对象,回收对象带来的系统开销问题等。
如果一个类始终只能创建一个实例,则这个类被成为单例类。单例类有如下特征:
(1)构造器被private修饰。避免其他类自由创建该类的实例。
(2)提供一个public方法作为该类的访问点,用于创建该类的对象,且必须使用static修饰(因为调用该方法之前还不存在对象,因此调用该方法的不可能是对象,只能是类)
(3)需要一个成员变量来保存曾经创建的对象,该成员变量需要被上面的静态方法访问,因此也需要static修饰。

class Singleton{
    //使用一个变量来缓存曾经创建的实例
    private static Singleton instance;
    //对构造器使用private修饰,隐藏该构造器
    private Singleton(){
    }
    //提供一个静态方法,用于返回Singleton实例
    public static    Singleton getInstance(){
    //如果instance为null,则表明还不曾创建Singleton对象
    //如果instance不为null,则表明已创建Singleton对象,将不会重新创建新的实例
      if(instance==null){
          instance = new Singleton();
      }
      return instance;
    }
}
public class SingletonTest{
    public static void main(String args[]){
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        System.out.println(s1==s2);//返回true
    }
}

Singleton类只能产生一个实例,所以s1==s2返回true。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值