Java的面向对象( 七 )


单例模式的优点:由于单例模式只生成一个实例, 减少了系统性能开销  。
实现步骤:
1.私有化类的构造器
2.内部创建类的对象,要求此对象也必须声明为静态的
3.提供公共的静态的方法,返回类的对象
根据实例化对象的时刻不同分为:饿汉式和懒汉式
饿汉式:初始化的时候实例化对象
懒汉式:第一次调用的时候创建,((每次被调用先判断是否nul,如果对象已经被实例化,直接用l))
饿汉式:
好处:线程安全的
坏处:对象加载时间长
懒汉式:
好处:延迟对象的创建
坏处:目前是线程不安全的 ------>到多线程内容,
懒汉式相对好一点,用的时候才被创建,饿汉式不管用不用都在类加载时候创建对象
单例模式设计模式----应用场景

Java的面向对象

文章插图
 
类的成员之四:代码块(初始化块)
  1. 代码块的作用:用来初始化类、对象
  2. 代码块如果有修饰的话,只能使用static.
  3. 分类:静态代码块 vs 非静态代码块
  4. 静态代码块内部可以有输出语句随着类的加载而 执行 ,而且只执行一次作用:初始化类的信息如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行静态代码块的执行要优先于非静态代码块的执行静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构
  5. 非静态代码块内部可以有输出语句随着对象的创建而 执行
    每创建一个对象,就执行一次非静态代码块作用:可以在创建对象时,对对象的属性等进行初始化如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性,非静态的方法
总结:有父及子,静态先行
先执行父类的静态代码块–>直接父类的静态代码块—>本类的静态代码块,然后父类的代码块–>父类的无参构造器–>直接父类的代码块–>无惨构造器—>本类的代码块–>无惨构造器
对属性可以赋值的位置:
①默认初始化
②显式初始化
③构造器中初始化
④有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值
⑤在代码块中赋值
先后顺序:①→②/⑤→③→④
关键字:finalfinal:最终的
  1. final可以用来修饰的结构:类、方法、变量(属性,局部变量)
  2. final 用来修饰一个类:此类不能被其他类所继承 。比如:String类、System类、StringBuffer类(该有的功能都有了,无需扩展功能,不用去继承,想用就用,不用拉到)
  3. final 用来修饰方法:表明此方法不可以被 重写
    比如:Object类中getClass();
  4. final 用来修饰变量:此时的"变量"就称为是一个常量4.1 final修饰属性:可以考虑赋值的位置有:显式初始化、代码块中初始化、构造器中初始化4.2 final修饰局部变量:尤其是使用final修饰形参时,表明此形参是一个常量 。当我们调用此方法时,给常量形参赋一个实参 。一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值 。
static final 用来修饰属性:全局常量
用来修饰方法:直接通过类来调用这个方法不能被重写
总结:
1.static 修饰的属性,相较于实例变量,有哪些特别之处(创建,调用,存储)
  • 随着类的加载而加载;早于对象的创建;
  • 只要权限允许,可以通过”对象.static属性”的方式进行调用;
  • 存在于方法区的静态域

Java的面向对象

文章插图
 
abstract关键字的使用1.abstract:抽象的
2.abstract可以用来修饰的结构:类、方法
3. abstract修饰类: 抽象类
此类不能实例化
抽象类中一定有 构造器 ,便于子类实例化时调用(涉及:子类对象实例化的全过程)
开发中,都会提供抽象类的子类,让子类对象实例化,完成相关的操作
  1. abstract修饰方法: 抽象方法
抽象方法只能有方法的声明,没有方法体
包含抽象方法的类,一定是一个抽象类 。反之,抽象类中可以没有抽象的方法 。


推荐阅读