打卡17天
今天学习面向对象的最后一部分
###学习笔记
2.不属于某一个实例对象,只存在于方法区,调用静态结构,直接用类名.的结构
1.静态方法中不可以直接调用实例方法,如果想用,必须对象.方法名
2.实例方法中可以直接调用静态方法
非静态的结构,随着对象创建而加载
接口里的常量默认public static final
开发中基本上常量的声明都是public static final
静态方法没有重写的概念
设计模式是人们为软件开发中抽象出可重复利用的解决方案
软件开发工程师之间沟通的行话
面向对象的设计原则:1.开闭原则(Open Close Principle)
对扩展开放,对修改关闭(继承,实现接口)
我们可以通过“抽象约束,封装变化”来实现开闭原则
通过接口或者抽象类为软件定义一个相对稳定的抽象层
将相同的可变因素封装在相同的具体实现类中,派生一个实体类就可以
2.里氏代换原则
子类继承父类时,除了添加新的方法完成新增的功能外,尽量不要重写
3.依赖倒转原则
要面向接口编程,不要面向实现编程
a.每个类尽量提供接口或抽象类,或者两者兼备
b. 变量的类型声明尽量是接口或者是抽象类
c.任何类都不应该从具体类派生
d.使用继承时要遵循里氏代换原则
4.接口隔离原则
使用多个隔离接口
5.迪米特原则
6.合成复用原则
7.单一原则
一个类只做一件事
JDK8的新特性
函数式接口:如果一个接口只有一个抽象方法,这个接口就成为函数式接口
可以用注解@FunctionalInterface标记
总结:1.有参数,返回值
(i,j) -> { return i + j;}
如果方法体只是一句返回值(i,j) -> i+j
2、有参数,无返回值
(i,j) -> {// 方法体}
如果方法体只有一句话(i,j) -> 方法体的一句话
3、无参数
()->{方法体}
1.别人不能new,构造器私有化,不能在类的外部通过new去实例化
2.在该类的内部产生一个唯一的实例化对象,把他封装成static类型
3.定义一个静态方法,返回这个唯一的对象
不管以后会不会使用到该实例化对象,先创建了再说
实现的办法:直接new实例化
什么时候调用getInstance方法,什么时候new
这种懒汉式在多线程环境中完全错误的,根本不能保证单例的状态
(加锁)
也是懒汉式的一种,这种懒汉式没有线程的问题
结合了懒汉和饿汉式的优点:
只要不调用getInstance方法,就不会使用内部类
内部类一旦被使用一次就会被初始化一次,以后一直用的是Instance静态常量
###学习心得
今天学习了静态类和单例模式,掌握的不太好,课下还需多看录课和笔记
###掌握情况:一般
###课堂练习
public class Ch01 { static { System.out.println("外部类被加载。。。"); } //实例内部类 public class Inner{ { System.out.println("实例内部类被加载。。。"); } } //静态内部类 public static class InnerStatic{ static { System.out.println("静态内部类被加载。。。"); } } public static void main(String[] args) { // Ch01 ch01 = new Ch01(); //这就是实例内部类的对象 Inner inner = new Ch01().new Inner(); //这就是静态内部类的对象 InnerStatic innerStatic = new Ch01.InnerStatic(); } }
###结果