【JavaSE基础】Static关键字

Static关键字

我们可以一句话来概括:方便在没有创建对象的情况下来进行调用。
也就是说:被static关键字修饰的不需要创建对象去调用,直接根据类名就可以去访问。

1、修饰成员变量 -> 静态成员变量

static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。
静态变量也被称为类变量。局部变量不能被声明为 static 变量。

如果某个成员变量是被所有对象所共享的,那么这个成员变量就应该定义为静态变量。

静态变量与实例变量的区别:
1.1内存存储的位置不同

Java栈:

  • 构造方法函数调用;

Java堆:

  • New对象(实例变量);
  • 字符串常量池(jdk1.6之后);

方法区:

  • 静态变量;
  • 字符串常量池(jdk1.6之前 -> contant pool);
1.2 是否与对象有关
  • 实例变量 -> 与对象有关 -> 一个对象(new)对应一份实例变量;
  • 静态变量 -> 与对象无关,与类有关,一个类只有一个静态变量(多个对象共用);
2、修饰方法 -> 静态方法

static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。

静态方法与实例方法的区别:

  • 调用静态方法 -> 类名.

  • 静态方法不能调用普通的实例变量(不能提供 this. 方法);

  • 有无 this

     * 静态方法无法提供 this   static -> 跟对象无关  *
     * 实例方法可以提供 this  ->  p1.eat();  跟对象有关 *
    

结论:
1)静态方法不能调用实例变量
2)不能定义一个局部的静态变量

注意事项:

  • 在静态方法中没有this关键字(因为静态是随着类的加载而加载,而this是随着对象的创建而存在的。静态比对象优先存在。)
  • 静态可以访问静态的,但是静态不能访问非静态的。
  • 非静态的可以去访问静态的。
static{ } -> 静态块:

static{ } -> 静态块 -> 只能初始化静态变量
{ } -> 实例块 -> 只用初始化实例变量

  • 构造函数 -> 初始化实例变量
  • 静态块 -> 初始化静态变量

结论:
当变量与对象个数无关,只与类有关系时,就将该变量定义为 static 静态变量,一个类仅此一份;
而静态变量必须使用静态方法,原因是静态变量不能用 this 修饰,实例方法 默认 含有 this 关键字,因此,静态变量必须使用静态方法。

3、修饰内部类

实例内部类和静态内部类区别:

  • 实例内部类包含两个this(指向当前对象,外部类对象的this);
  • 静态内部类包含一个this(指向当前对象) ;
4、单例模式

首先,让我们看看什么是单例模式,大家都知道在电脑上,像我的电脑,垃圾桶这种一台电脑只需有一个就行,不能创建多个,这个就是单例模式,简单来说,就是只能生成一个对象,此处的单例模式只是简单的在线程不安全下的单例模式。

特点:

  • 1、 构造函数私有;
  • 2、 提供静态的getInstance方法

前提 :

  • 构造函数私有
  • 提供public 静态函数(保证实例化一次)

单例模式分为快加载和慢加载:
此处的快慢仅指 new 对象时的先后顺序

慢加载:

 //慢加载单例
public class Singleton {
	private static Singleton p;
	private Singleton(){
	
	}
	public static Singleton getInstance(){
		if(p == null){
			p = new Singleton();
		}
		return p;
	}
}

快加载:

//快加载单例
public class Singleton {
	private static Singleton p = new Singleton();
	private Singleton(){
	
	}
	public static Singleton getInstance(){
		return p;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值