2022-07-27 第五组 赖哲栋 学习笔记
作者:互联网
代码块
- 代码块又称初始化块,属于类的一个成员
- 它是将逻辑语句封装在方法体中通过{}包裹,代码块没有方法名,没有参数,没有返回值,只有方法体
- 它是不需要通过对象或类进行显式的调用,它会在类加载或者创建对象时主动的隐式调用
(1)静态代码块
- 一个类被加载时会被调用一次,做一下初始化的工作
(2)实例化代码
- 每次创建对象,都会被调用一次
静态
- 可用于定义属性、方法、代码块
- static修饰的结构,不属于任何一个对象
- 静态方法无论在哪里都是类名.方法名调用,同一个类的静态方法之间可以省略
- 静态方法没有重写这个概念
(1)实例方法和静态方法互相调用:
- 静态方法中不可以直接调用实例方法,如果想用必须通过对象.方法名调用
- 实例方法中可以直接调用静态方法
(2)static内存解析:
- 静态的变量或者静态方法存在于方法区。静态的结构不会被垃圾回收
- 不属于某一个实例对象,只存在于方法区
静态的结构:随着类的加载而加载的
非静态的结构:随着对象的创建而加载
在Java中调用实例方法,必须有主体。
类的组成结构:属性、方法、构造器、代码块、内部类
内部类:在一个类内部进行其他类结构的嵌套操作
外部类:一个public声明的类,类名必须和.java的文件名相同
设计模式
设计模式是人们为软件开发中抽象出可重复利用的解决方案;软件开发工程师之间沟通的"行话"
面向对象的设计原理:
- 开闭原则(Open Principle)
- 对扩展开放,对修改关闭(继承,实现接口)
- 我们可以通过“抽象约束,封装变化”来实现开闭原则
- 通过接口或者抽象类为软件定义一个相对稳定的抽象层
- 将相同的可变因素封装在相同的具体实现类中。派生一个实体类就可以了
- 里氏代换原则
- 子类继承父类时,除了添加新的方法完成新增的功能外,尽量不要重写父类的方法
- 依赖倒转原则
- 要面向接口编程,不要面向实现编程
-
- 每个类尽量提供接口或抽象类,或者两者兼备
-
- 变量的类型声明尽量是接口或者是抽象类
-
- 任何类都不应该从具体的类派生
-
- 使用继承时,要遵循里氏代换原则
- 接口隔离原则
- 使用多个隔离的接口
- 迪米特法则
- 合成复用原则
- 一原则:一个类只做一件事
- 单例模式
单例模式
一个类只有一个实例
思路:
- 别人不能new,构造器私有化,不能在类的外部通过new去实例化
- 在该类内部产生一个唯一的实例对象,把它封装成static类型
- 定义一个静态方法返回这个唯一的对象
饿汉式单例模型
不管以后会不会使用到该实例化对象,先创建了再说
//实现的办法就是直接new实例化
public class Ch03 {
private static final Ch03 ch03 = new Ch03();
private Ch03(){}
public static Ch03 getInstance(){
return ch03;
}
}
懒汉式(延迟加载)
什么时候调用getInstance方法,什么时候new
//这种懒汉式在多线程环境中是完全错误的,根本不能保证单例的状态
public class Ch04 {
//将自身实例化对象设置为一个属性,现在是没有赋值的
private static Ch04 ch04;
//构造器私有化
private Ch04(){}
public static Ch04 getInstance(){
if(ch04 == null){
ch04 = new Ch04();
}
return ch04;
}
}
内部类实现单例
它是懒汉式的一种,这种懒汉式没有线程的问题
结合了饿汉式和懒汉式的优点:
- 只要不调用getInstance方法,就不会使用内部类
- 内部类一旦被使用就只会被初始化一次,以后一直用的是INSTANCE静态常量
public class Ch05 {
//私有化构造器
private Ch05(){}
public static Ch05 getInstance(){
return SingletonHolder.INSTANCE;
}
public static class SingletonHolder{
private static final Ch05 INSTANCE = new Ch05();
}
}
JDK8的新特性——箭头函数
- 函数式接口:如果一个接口只有一个抽象方法,这个接口就称为函数式接口
- 可以用注解@FunctionalInterface标识
1、有参数,有返回值。
(i,j) -> {
return i + j;
}
如果方法体只是一句返回值(i,j) -> i+j
2、有参数,无返回值
(i,j) -> {
// 方法体
}
如果方法体只有一句话(i,j) -> 方法体的一句话
3、无参数
()->{
方法体
}
this和super
- 无论是this还是super,都不可以在静态结构中使用
- 静态结构是属于类的,静态结构是优于对象存在的
- this和super必须有对象才能出现、必须得有实例
面试题:(输出优先级)
- 当没有继承关系,就一个类。静态块>实例块>构造器
- 当有继承关系。父类静态块>子类静态块>父类实例块>父类构造器>子类实例块>子类构造器
标签:27,07,静态,调用,实例,static,第五组,方法,public 来源: https://www.cnblogs.com/laizhedong/p/16526747.html