static关键字(java基础)

static有两个作用:
1、为指定某些类成员或对象分配单一的存储空间,与对创建对象的个数无关。
2、定义的类属性与实现的类方法与类关联在一起,与该类的实例无关,虽然类的实例也可以调用。该现象是一种假象,应通过类直接调用static修饰的属性与方法。
static修饰的变量和方法被称为静态变量与静态方法,反之成为非静态变量与静态方法,其中静态成员不能直接访问非静态成员
static关键字真正的作用并不是区分静态成员与非静态成员,它真正的作用是用于区分成员变量,方法,内部类,初始化块这四种成员到底属于类本身还是属于实例。在类中定义的成员,static相当于一个区别属于类本身与属于该类实例的一个标志。
static修饰的变量:
java类中提供两种类型的变量:一种是用static修饰的静态成员变量,属于该类所有,内存中分配单一存储空间,类一加载时,就为该变量分配了空间,这个变量就可以供我们使用了。通常使用静态成员变量的方式是通过 “类名.成员变量”的形式直接引用,另一种就是通过 “对象.成员变量”的形式引用(不建议使用)。
另一种是不用static修饰的非静态成员变量,也称实例变量,属于类的实例所有,只有在对象创建后,非静态变量才会被分配空间,在内存中可以分配多个空间,通过 “对象.实例变量”的形式引用。

static修饰的方法:
java类中提供static修饰的方法与非static修饰的方法,同static修饰的变量一样,static修饰的方法属于该类所有,也是在类一加载时,加载该方法,不需要创建对象之后在调用,可直接通过类名直接调用;而非static修饰的方法,只能在实例对象创建之后,通过实例对象调用。
static修饰的方法,不能使用this关键字与super关键字;不能调用非static修饰的方法,不能引用非static修饰的成员变量;只能使用static修饰的成员,因为类一加载时,就将static修饰的方法加载了,此时该类的实例对象还没有创建,所以只能使用static修饰的其他成员。
单例设计模式:
static一个很重要的用途就是实现单例设计模式。单利模式的特点是该类只能有一个实例,为了实现这一功能,必须隐藏类的构造函数,即把构造函数声明为private,并提供一个创建对象的方法,由于构造对象被声明为private,外界无法直接创建这个类型的对象,只能通过该类提供的方法来获取类的对象,要达到这样的目的只能把创建对象的方法声明为static,程序实例及程序执行步骤如下:
static修饰的代码块
在类中独立于成员变量与成员方法存在,代码块,在类加载时只加载一次。

static修饰的内部类
在内部类中可以将其声明为static的,这个时候,外部类可以直接调用内部类,因为static的内部类是在加载外部类的同时加载的,所以也就是说,并不要实例化外部类就能直接调用静态内部类。
如图:


补充:
Java中的static关键字不会影响到变量或者方法的作用域。在Java中能够影响到访问权限的只有private、public、protected(包括包访问权限)这几个关键字。
static与final结合使用表示的意思:
对于变量,若使用static final修饰,表示一旦赋值不能修改,并且通过类名可以访问。
对于方法,若使用static final修饰,表示该方法不可被覆盖,并且可以通过类名直接访问。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值