活动地址:CSDN21天学习挑战赛
目录
关键字:static
单例设计模式
关键字:static
1,概述
static:静态的
可以用来修饰 属性、方法、代码块、内部类
2,修饰属性
被static修饰的属性称为静态属性
静态变量:创建了类的多个对象,多个对象共享一个静态变量。
当通过某一对象修改静态变量时,会导致其他对象调用此静态变量时,调用的是修改后的静态变量。
非静态变量:创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性。当修改其中一个对象的非静态属性时,不会导致其他对象中同样的属性值修改。
其他说明:
1、静态变量随着类的加载而加载。可以通过"类.静态变量"的方式进行调用
2、静态变量的加载要早于对象的创建
3、由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中
3,修饰方法
被static修饰的方法称为静态方法
1、随着类的加载而加载,可以通过"类.静态方法"的方式进行调用
2、静态方法中只能调用静态的方法或属性
非静态方法中既可以调用非静态的方法和属性,也可以调用静态的方法和属性
4,static注意点
1、在静态方法内不能使用this和super关键字
2、关于静态属性和静态方法的使用,从生命周期的角度去理解
3、开发中如何确定一个属性是否要声明为static?
属性可以被多个对象所共享,不会随着对象的不同而不同
4、 开发中如何确定一个方法是否要声明为static?
操作静态属性的方法通常设置为static
5,举例
1、在静态方法内不能使用this和super关键字
public class Test { public static void main(String[] args) { Person.nation = "china";//静态变量随着类的加载而加载,可以通过"类.静态方法"的方式进行调用 Person p1 = new Perosn(); p1.name = "A"; p1.age = 40; Person p2 = new Perosn(); p2.name = "A"; p2.age = 40; p1.nation = "CHN"; System.out.println(p1.nation);//CHN System.out.println(p2.nation);//CHN Person.show();//可以通过静态类直接调用类中的静态方法 // Person.eat();//静态类不能直接调用类中的非静态方法 } } class Person{ String name; int age; static String nation; public void eat() { //调用静态结构 show(); walk(); System.out.println("吃饭"); } public static void show() { //静态方法不能调用非静态结构 // eat();//不能在静态方法中调用非静态方法 // name = "TOM";//非静态属性也不能使用,因为show加载时 name属性还没有 //可以调用静态结构 System.out.println(Person.nation); walk(); } //静态方法 public static void walk() { System.out.println("走路"); } }
**
单例设计模式
1,概述
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。
2,单例的饿汉式实现
public class Test { public static void main(String[] args) { Bank bank1 = Bank.getInstance(); Bank bank2 = Bank.getInstance(); System.out.println(bank1 == bank2);//true } } class Bank{ //1、私有化类的构造器 private Bank() { } //2、内部创建类的对象 //4、要求此对象也必须声明为静态 private static Bank instance = new Bank(); //3、提供公共的静态方法 返回类的对象 public static Bank getInstance() { return instance; } }
3,单例的懒汉式实现
public class Test { public static void main(String[] args) { Bank bank1 = Bank.getInstance(); Bank bank2 = Bank.getInstance(); System.out.println(bank1 == bank2);//true } } class Bank{ //1、私有化类的构造器 private Bank() { } //2、先声明当前类对象,没有初始化 //4、要求此对象也必须声明为静态 private static Bank instance = null; //3、声明public、static的返回当前类对象的方法 public static Order getInstance() { if (instance == null) { instance = new Bank(); } return instance; } }
4,区分饿汉式和懒汉式
饿汉式:
1、饿汉式是线程安全的
2、 对象加载时间过长
懒汉式:
1、目前写法线程不安全
2、延迟对象的创建,节省加载时间
提醒:在发布作品前请把不用的内容删掉(活动地址请保留)