第一组孙乃宇7.27 static
类的内部结构: 属性,方法,构造器,代码块,内部类
代码块: 有可以称为初始化块,属于类的成员,它是将一些逻辑语句封装在方法体中。 通过一对大括号{}包裹起来,代码块是没有方法名,没有参数,没有返回值,只有方法体。 它是不需要通过对象或者类去进行显示的调用,它会在类加载或者创建对象时主动的隐式调用
1.静态代码块,就是一个类被加载时会被调用一次,做一些初始化的操作工作
2.实例代码块,每次创建实例都会被调用一次,用的很少
static
静态,可以修饰的 属性,方法,代码块 类属性,类方法 用static修饰的结构,不属于任何一个对象
static的内存解析:
-
静态的变量或者静态的方法存在于方法区的,静态的结构不会被垃圾回收
-
不属于某一个实例对象的,它只存在于方法区,调用静态结构,直接用类名.方法名
实例方法和静态方法的互相调用
-
静态方法中可以直接调用实例方法么?不可以! 如果想用,必须对象.方法名
-
实例方法中可以直接调用实例方法么?可以!
静态的结构的加载,随着类的加载而加载
非静态的结构加载,随着对象的创建而创建
在java中调用实例方法,必须要有主体。方法不是一等公民,不能直接调用。
静态方法无论在哪里都是类名.方法名的形式进行调用,同一个类的静态调用静态可以省略。
设计模式
设计模式
设计模式是人们为软件开发中抽象出可重复利用的解决方案 软件开发工程师之间沟通的”行话“
面向对象设计的原则
-
开闭原则(Open Close Principle 对扩展开放,对修改关闭。(继承和实现接口) 我们可以通过“抽象约束,封装变化”来实现开闭原则 通过接口或抽象类为软件定义一个相对稳定的抽象层 将相同的可变因素封装在相同的具体实现类中,派生一个实体类就可以了
-
里氏代换原则 子类继承父类时,除了添加新的方法完成新增的功能外,尽量不要重写父类的功能
-
依赖倒转原则 要面向接口编程,不要面向实现编程。 a.每个类尽量提供接口或抽象类,或者两者兼备 b.变量的声明尽量是接口或者是抽象类 c.任何类都不应该从具体类派生 d.使用继承时要遵循里氏代换原则
-
接口隔离原则 使用多个隔离的接口
-
迪米特法则
-
合成复用原则
-
单一原则:一个类只做一件事
单例模式
-
一个类只有一个实例
思路:
-
别人不能new,构造器私有化,不能在类的外部实例化
-
在该类的内部产生唯一的一个实例化对象,我们把它封装成static类型
-
定义一个静态方法返回这个唯一的对象。
饿汉式单例模式:
不管以后会不会使用到该实例化对象,先创建了在说,很着急的样子实现的办法就是直接new实例化。
懒汉式(延迟加载)
什么时候调用getInstance方法,什么时候new。
这种懒汉式在多线程环境中是完全错误的,根本不能保证是单例的状态。
内部类实现单例
-
也是懒汉式的一种,这种懒汉式没有线程的问题
结合了饿汉式和懒汉式的优点:
只要不调用getInstance方法,就不会使用内部类 内部类一旦被使用一次只会被初始化一次,以后一直用的是INSTANCE静态常量。
this和super
无论是this还是super,都不可以在静态结构中使用
this和super。this.方法 super.方法 静态结构是属于类的,静态结构是优先于对象存在的 this和super,必须有对象才能出现。必须得有实例
外部类 一个public声明的类,他的类名必须和.java的文件名必须相同
生成的.class文件是两个独立的.class
外部类就是两个类
开发中尽量不要写外部类
内部类: 在一个类内部进行其他类结构的嵌套操作
我们之前写过的链表,Node类其实主要就是给SuperLinked 我们可以把Node类定义在SuperLinked中
箭头函数:JDK8的新特性
函数式接口:如果一个接口只有一个抽象方法,这个接口就称为函数式接口
1.有参数,有返回值 (i,j)->{ return i+j;}
2.有参数无返回值 (i,j)->{方法体} 如果方法体只有一句话(i,j)->方法体的一句话
3.无参数

浙公网安备 33010602011771号