java学习笔记009 static关键字、单例模式

1.static修饰属性
被static修饰的变量叫静态变量或类变量,否则叫非静态变量(实例变量)
该类的多个对象共享一个静态变量
类变量随着类的加载而加载,早于对象的创建,类只会加载一次,所以类变量在内存中只有一份,存在于方法区的静态域
类名.静态变量名 Math.PI
2.static修饰方法
随着类的加载而加载,类名.方法名
静态方法中只能调用静态方法和静态属性
static修饰的方法不满足多态,见下面的例子
public class Empty {
	public static void print() {
		System.out.println("empty");
	}
}
public class EmptyBrain extends Empty {
	public static void print() {
		System.out.println("emptyBrain");
	}
}
@Test
public void test() {
	Empty e = new EmptyBrain();	//empty   此处不满足多态
	e.print();			//emptyBrain
	new EmptyBrain().print();
}
3.单例Singleton模式
类的单例设计模式————此类只能有一个对象实例
思路:1.不能在类外new该类对象,需要把构造器设置为private
	2.私有化静态对象
	3.静态get方法
单例的饿汉实现
	线程安全
priveta static Person person = new Person();
单例的饱汉(懒汉)实现
	目前写法线程不安全
priveta static Person person = null;//需要的时候再去创建对象
public Person getPerson(){
	if(person == null)
		person = new Person();
	return person;
}
4.给main方法传参数
//命令行给String args[]传参数
java MainTest 89 89 "89"
5.代码块
静态代码块
	随着类的加载而执行,只会执行一次
非静态代码块
	随着对象的创建而执行,每次创建对象执行一次
	与属性显式(int attribute = 1;)赋值平级,按先后顺序执行
顺序
	对于同一个类:静态代码块-->代码块-->构造器
	有继承关系的类:静态代码块-->父类代码块-->父类构造器-->子类代码块-->子类构造器
6.final关键字
被修饰的类不能被继承,如String类、System类
被修饰的方法不能被重写,如Object类的getClass()
被修饰的属性只能显式初始化或代码块或构造器中初始化,初始化后不可被赋值,eg:final int CONSTANT = 12;
被修饰的局部变量,只能被赋值一次

被static final修饰的称为全局常量
7.抽象类和抽象方法
abstract修饰类
	不可实例化
	抽象类有构造器,可以有非抽象方法
	继承抽象类的非抽象类需要重写父类所有的抽象方法
abstract修饰方法
	抽象方法只存在于抽象类中
	public abstract void method();
	abstract不能用来修饰private、static、final修饰的方法,不可修饰final修饰的类,因为private、final修饰的方法不可被重写
8.匿名类
创建一个匿名的(Person的)子类对象
Person person = new Person(){
	public void method(){
		方法体;
	}
}
9.接口
JDK7.0
	只能定义全局常量和抽象方法
	全局常量public static final(可以省略不写)
	抽象方法public abstract(可以省略不写)
JDK8.0
	增加了静态方法和默认方法
使用
	接口的使用具有多态性
	接口可以多继承
	接口的匿名实现类
	eg: new Usb(){
		public void method(){
			方法体;
		}
	}
10.代理模式Proxy
//代理类
class Server implements Network{
	private Network net;
	public Server(Network net){
		this.net = net;
	}
	@Override
	public void overrideMethod(){
		stepAhead();
		net.overrideMethod();//真实的接口实现类对象
		stepAfter();
	}
}
11.简单工厂模式
//对象创建者与使用者分离
public class CarFactory{
	public static Car getCar(String model){
		if("Audi".equals(model)){
			return new Audi();
		}else if("BYD".equals(model)){
			return new BYD();
		}else{
			return null;
		}
	}
}
posted @ 2022-08-14 22:01  香菇无盐  阅读(48)  评论(0)    收藏  举报