static关键字
类只是描述对象的属性和行为 ,并没有产生实际的对象,只有使用关键字New的时系统才会分配内存给对象
创建类时,有些特定的数据在内存中只有一份,用static关键字定义
static: 静态的
static可以用来修饰属性,方法,代码块,内部类
属性:静态属性(类属性)
被static关键字修饰的属性内存中只有一份,一个对象中修改了static,其他对象中的static也会变化
静态变量随着类的加载而加载
静态变量的加载早于对象的加载
可以通过class.调用静态变量
存在于方法中的静态域中
方法:静态方法
静态方法中只能使用静态属性和静态方法,不可以使用super和this关键字
非静态方法中可以使用静态属性和静态方法,也可以使用非静态属性和方法
操作静态属性的方法,通常使用静态方法
工具类通常使用静态方法
单例设计模式:整个系统中只存在一个对象,将构造方法的访问权限设置为private,使得外部无法创建对象,在内部创建一个静态对象,并通过一个静态方法使得外部得到这个静态对象
饿汉式和懒汉式:
* 饿汉式单例设计模式
* 步骤
* 1 创建private权限的构造函数
* 2 声明一个静态的对象变量,类内部可以调用私有的构造函数
* 3 创建一个静态的获取静态对象的方法
*
public class Bank {
private Bank(){
}
private static Bank Instance=new Bank();
public static Bank getBank(){
return Instance;
}
public static void main(String[] args) {
Bank bank1=Bank.getBank();
Bank bank2=Bank.getBank();
System.out.println(bank1==bank2);
}
}
* 懒汉式单例设计模式
* 步骤
* 1 设计一个私有的构造函数
* 2 设置一个静态的私有的对象属性并设为空
* 3 设置一个静态的方法,当对象为空时,调用构造函数创建对象,不为空则直接返回对象
public class BankTest {
}
class Bank{
private Bank(){
}
private static Bank instance=null;
public static synchronized Bank getInstance(){
if(instance==null){
synchronized (Bank.class){
//内部嵌套有必要,不然进来的多个线程会重复造
if (instance==null) instance=new Bank();
}
}
return instance;
}
}
饿汉式:坏处,对象加载时间过长
好处,饿汉式时线程安全的
懒汉式:好处 延迟对象的创建
单例设计模式:由于单例模式只生成一个实例,减少了性能的开销。:java.lang.Runtime
常见单例设计模式应用模式:
1 网站的计数器
2 应用程序的日志应用
3 数据库连接池
4 application
代码块
代码块的作用:初始化类,对象
代码块如果又修饰的话,只能用static
静态代码块:
代码块内部可以有输出语句
随着类的加载而执行,而且只执行一次
作用:初始化类信息
非静态代码块:
代码块内部可以有输出语句
随着对象的创建而执行
每创建一个对象,就执行一次非静态代码块
作用:可以在创建对象时,对对象等属性进行初始化
总结:对象可以赋值的位置
1 默认初始化
2 显式初始化/5 代码块中赋值 看摆放位置决定执行顺序
3 构造器初始化
4 set方法
执行顺序:静态代码块>动态代码块>构造器
final关键字
final 可以用来修饰类,方法,变量
类:表示该类不能被其他类继承 例如String
方法:表示该类不能被重写
变量 :变量变为常量
给final属性赋值:
* 1 显式初始化
* 2 代码块
* 3 构造器
调用构造器时将为对象分配内存,此时必须要给常量赋值了
final修饰局部变量变为常量,无法对其修改