暑假自学(24)
单列模式:只有一个实例,减少了性能的开销
饿汉式:提前加载,占用空间,但线程安全
public class SingletonTest1 {
public static void main(String[] args) {
Bank bank1 = Bank.getBank();
Bank bank2 = Bank.getBank();
System.out.println(bank1 == bank2);
}
}
class Bank {
private Bank() {
}
private static Bank instance = new Bank();
public static Bank getBank() {
return instance;
}
}
懒汉式:延迟加载,线程不安全(多线程可改为安全)
public class SingletonTest2 {
public static void main(String[] args) {
Order o1 = Order.getinstance();
Order o2 = Order.getinstance();
System.out.println(o1==o2);
}
}
class Order{
private Order() {}
private static Order instance = null;
public static Order getinstance () {
if(instance == null) {
instance = new Order();
}//不进行判断,每次都会重新创建一个对象
return instance;
}
}
main方法
可以作为整个函数的入口,也可以是一个可调用的方法
代码块:类内部的一个成员
格式:
{
}
或
static {
}
可以初始化类或者对象
静态代码块:
内部可以有输出语句
随着类的加载而执行
只执行一次
可以初始化类的信息
多个静态代码块按先后顺序执行
静态代码块比非静态代码块执行
只能调用静态的属性和方法
非静态代码块:
内部可以有输出语句
随着对象的创建而调用
每创建一个对象就执行一次非静态代码块
可以在创建对象时,对对象的属性进行初始化
多个非静态代码块按先后顺序执行
可调用静态非静态的属性和方法
public class BlockTest {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();
System.out.println(p1.id);
System.out.println(p1.desc);
}
}
class Person{
int id;
String name;
static String desc;
public Person() {
super();
}
static{
System.out.println("hello_static");
desc = "111";
}
{
System.out.println("hello");
id = 111;
}
public Person(String name, String desc) {
super();
this.name = name;
this.desc = desc;
}
public void eat() {
System.out.println("吃饭");
}
}