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