static 笔记 和设计模式(单例模式)
因为不需要实例就可以访问static方法,因此static方法内部不能有this。(也不能有super ? YES!)
重载的方法需要同时为static的或者非static的。
private int id;
private static int total = 0;
public static void setTotalPerson(int total){
this.total=total; //非法,在static方法中不能有this,也不能有super
}
public Person() {
total++;
id = total;
}}
public class TestPerson {
public static void main(String[] args) {
Person.setTotalPerson(3);
} }
设计模式之单例模式(饿汉式)
public class SingleTonTest {
public static void main(String[] args) {
SingleTon instance1 = SingleTon.getInstance();
SingleTon instance2 = SingleTon.getInstance();
System.out.println(instance1.equals(instance2));
SingleTon1 s = new SingleTon1();
SingleTon1 s1 = new SingleTon1();
System.out.println(s==s1);
}
}
class SingleTon {
//私有化构造器
private SingleTon() {}
//创建用例,私有化,只允许类的内部访问
private static SingleTon instance = new SingleTon();
//创建静态方法,直接访问
public static SingleTon getInstance() {
return instance;
}
}
class SingleTon1 {
public SingleTon1() {
}
}
单例(Singleton)设计模式-懒汉式
class Singleton{
//1.将构造器私有化,保证在此类的外部,不能调用本类的构造器。
private Singleton(){
}
//2.先声明类的引用
//4.也需要配合static的方法,用static修饰此类的引用。
private static Singleton instance = null;
//3.设置公共的方法来访问类的实例
public static Singleton getInstance(){
//3.1如果类的实例未创建,那些先要创建,然后返回给调用者:本类。因此,需要static 修饰。
if(instance == null){
instance = new Singleton();
}
//3.2 若有了类的实例,直接返回给调用者。
return instance;
} }
-注:懒汉式存在线程安全问题,其中java.lang.Runtime属于饿汉式单例设计模式
静态代码块:用static 修饰的代码块
1.可以有输出语句。
2.可以对类的属性、类的声明进行初始化操作。
3.不可以对非静态的属性初始化。即:不可以调用非静态的属
性和方法。
4.若有多个静态的代码块,那么按照从上到下的顺序依次执行。
5.静态代码块的执行要先于非静态代码块。
6.静态代码块只执行一次
非静态代码块:没有static修饰的代码块
1.可以有输出语句。
2.可以对类的属性、类的声明进行初始化操作。
3.可以调用静态的变量或方法。
4.若有多个非静态的代码块,那么按照从上到下的顺序依
次执行。
5.每次创建对象的时候,都会执行一次。且先于构造器执行
##关键字 final
在Java中声明类、属性和方法时,可使用关键字final来修饰,表示“最终”。
final标记的类不能被继承。提高安全性,提高程序的可读性。
String类、System类、StringBuffer类
final标记的方法不能被子类重写。
Object类中的getClass()。
final标记的变量(成员变量或局部变量)即称为常量。名称大写,且只能被赋值一次。
final标记的成员变量必须在声明的同时或在每个构造方法中或代码块中显式赋值,然后才能使用。
final double PI=3.14;
###接口
接口的特点:
1.用interface定义
2.成员变量用 public abstract final 修饰的
3.成员方法用 public abstract 修饰
4.接口没有构造器
5.接口采用多继承机制
###工厂模式
概述:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类
###代理模式
概述:
为其他对象提供一种代理以控制对这个对象的访问。