static(静态的)可以用来修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。
Static修饰方法
静态方法不依赖任何对象就可以访问,所以对静态方法来说是没有this关键字的。
静态方法不能访问非静态方法和非静态成员,而非静态方法和非静态成员可以访问静态方法。
类的构造器实际上也是静态方法。
。
Static修饰变量
static修饰的变量为静态变量,静态变量被所有对象共享,只有一个副本;非静态变量是对象所拥有,创建对象时被初始化,可存在多个副本,副本间不受影响。
成员变量 | 静态变量 | |
生命周期 | 随对象产生和销毁 | 随类的加载产生 |
调用方式 | 通过对象调用 | 通过类或者对象调用 |
别名 | 实例变量 | 类变量 |
数据存储位置 | 堆 | 方法区 |
static代码块
可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
单例设计模式
特性:多个程序使用同一配置信息对象时,保证对象的唯一性。
不允许其他程序用new创建对象;在该类创建一个本类实例;对外提供一个方法使其他程序可以获取该对象。
用法:1、私有化该类构造函数
2、通过new在本类创建一个本类对象
3、定义一个公有方法将创建对象返回
不使用单例设计模式:
class Demo4{
public static void main(String[] args){
Single s1=new Single();
s1.setAge(22);
Single s2=new Single();
System.out.println(s1.getAge());
System.out.println(s2.getAge());
}
}
class Single{
private int age=20;
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
}
public static void main(String[] args){
Single s1=new Single();
s1.setAge(22);
Single s2=new Single();
System.out.println(s1.getAge());
System.out.println(s2.getAge());
}
}
class Single{
private int age=20;
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
}
输出
22
20
使用单例设计模式后
class Demo4{
public static void main(String[] args){
Single s1=Single.getInstance();
s1.setAge(22);;
System.out.println(s1.getAge());
Single s2=Single.getInstance();
System.out.println(s2.getAge());
}
}
class Single{
private int age=20;
private Single(){}
private static Single s=new Single();
public static Single getInstance(){
return s;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
}
public static void main(String[] args){
Single s1=Single.getInstance();
s1.setAge(22);;
System.out.println(s1.getAge());
Single s2=Single.getInstance();
System.out.println(s2.getAge());
}
}
class Single{
private int age=20;
private Single(){}
private static Single s=new Single();
public static Single getInstance(){
return s;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
}
输出
22
22