static
static关键字的使用
- static:静态的
- static可以用来修饰属性,方法,代码块,内部类
使用static修饰属性:静态变量
static修饰属性说明:
- 静态变量随着类的加载而加载
- 静态的变量加载要早于对象的创建
- 由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中。
static类变量储存在方法区中的静态域中
代码实例:
public class test {
public static void main(String[] args){
Person.nation = "test";
System.out.println(Person.nation);
Person p=new Person(20,1111);
p.nation = "China";
Person p1=new Person(21,111111);
System.out.println(p1.nation);
p1.nation = "CNH";
System.out.println(p.nation);
}
}
class Person{
int age;
long id;
static String nation;
public Person(int age,int id){
this.age = age;
this.id = id;
}
}
/*输出结果为:
test
China
CNH
*/
使用static修饰方法:
- 随着类的加载而加载,可以通过"类.静态方法"的方式进行调用
- 静态方法中,只能调用静态的方法或属性非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性
使用static修饰方法的注意点:在静态的方法内,不能使用this,super关键字。
单例模式
使用场景
由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方
式来解决。
- 网站的计数器
- 应用程序的日志文件
- 数据库连接池
- 读取配置文件的类
饿汉式
坏处:对象加载时间过长
好处:饿汉式是线程安全的
public class test {
public static void main(String[] args){
Person p = Person.returnP();
Person p1 = Person.returnP();
System.out.println(p==p1);
}
}
class Person{
private Person(){}
private static Person p = new Person();
public static Person returnP(){
return p;
}
}
/*输出结果为
true
*/
懒汉式
好处:延迟对象的创建
坏处:线程不安全
public class test {
public static void main(String[] args){
Person p = Person.returnP();
Person p1 = Person.returnP();
System.out.println(p==p1);
}
}
class Person{
private Person(){
}
private static Person p = null;
public static Person returnP(){
if (p == null){
p = new Person();
}
return p;
}
}