2022-7-27 第六组 刘明延 学习笔记
作者:互联网
/** 定义静态变量
* 访问修饰符 static 数据类型 变量名 或者 static 访问修饰符 数据类型 变量名
* 类名.属性 对象名.属性
* 定义静态方法
* 访问修饰符 static 返回值类型 方法名 或者 static 访问修饰符 返回值类型 方法名
* 静态方法中只能访问静态变量/静态属性
* 类名.方法名 对象名.方法名
* 静态方法不能使用this和super
* 普通方法既可以访问普通属性和方法,也可以访问静态属性和方法
* 类什么时候被加载:
* 1.创建对象实例时
* 2.创建子类对象实例时,父类也会被加载
* 3.使用类的静态成员时
*
* 普通代码块:
* 1.创建对象就会被调用
* 2.使用类的静态成员不会调用
*
* 父类静态块>子类静态块>父类实例块>父类构造器>子类实例块>子类构造器
* 静态代码块和静态属性初始化调用优先级相同,运行时按定义顺序分先后,普通代码块顺序同静态代码块顺序
**一个public声明的类,类名必须和.java文件的文件名相同
* JVM只认识Java.class
* 一个类的内部又完整的嵌套了另一个类结构,被嵌套的类称为内部类(inner class)
* 在一个类里声明另一个类
* 内部类是残缺不全的
* !!!实例内部类不能写所有静态的东西,包括主方法
* 嵌套其他类的类称为外部类(outer class)
* 内部类最大的特点是可以直接访问私有属性,体现类与类的包含关系
* 类的5大成员:(内部结构)
* 属性,方法,构造器,代码块,内部类
* 基本语法:
* class Outer{ //外部类
* class Inner{ //内部类
* }
* }
* class Other{ //外部其他类
* }
* 内部类的分类:
* 定义在外部类局部位置上 比如方法内
* 1.局部内部类(有类名)
* 2.匿名内部类(没有类名,重点!!!!)
* 定义在外部类的成员位置上
* 3.实例内部类(没用static修饰)
* 4.静态内部类(使用static修饰)
*
* 代码块,又称为初始化块,实例块
* 通过{}包裹,代码块没有方法名,没有参数,没有返回值,没有访问权限,只有{}
* 它是不需要通过对象或类进行显示的调用,他会在类加载或者创建对象时主动的隐式调用
* 静态代码块(static)
* 一个类被加载时会被调用一次,做一些初始化的工作,可以有N多个,一般就写一个
* 实例代码块()
* 每次创建实例都会被调用一次,用得不多,可以有N多个,一般就写一个
* 静态块>实例块>构造器,在运行时的打印顺序
* 父类优于子类,静态块优于其他
* 父类静态块>子类静态块>父类实例块>父类构造器>子类实例块>子类构造器
* static静态
* 静态变量被类中对象共享
* 可修饰:属性,方法,代码块
* 语法:
* 类名.属性名/方法/代码块
* 用static修饰的结构,不属于任何一个对象,属于类,不用对象也能调用,用对象也能调,对象也属于类(严格来说不应该用对象调)
* public static void show(){} 静态方法,也叫类方法
* 内存解析:
* static修饰的东西不会被垃圾回收,忽略static修饰的东西,只存在于方法区(开发中尽量避免使用静态。会占用内存。内存是有限的)
*
* 实例方法和静态方法的互相调用
* 静态方法可以直接调用实例方法吗
* 不可以
* 没有对象就调用不了实例方法,没对象就不出来
* 如果想用,必须:对象.方法名,需要创建对象
* 实例方法可以直接调用静态方法吗
* 可以
* 静态方法随着类加载出现,有类就有静态方法
*
* 在Java中调用实例方法必须有主体(有对象去调用,没写不代表没有,有的是省略了,如this),不能直接调用
* 静态方法无论在哪里都是类名.方法调用
* 同一个静态调静态可以省略类名
* 接口中的常量前默认有public,final,static
* 开发中常量的声明不管在哪个类都有public final static(要写,接口中可以省略)
* !!!!!!静态方法没有重写这个概念
* 工具类一般写静态方法
* 无论是this还是super,都不可以在静态结构中使用
* 静态结构是属于类的,静态结构是优先于对象存在的
* this和super必须有对象才能出现,静态方法没有重写,继承对静态方法是没有意义的
*
* 扩展一般就是继承
* 设计模式是人们为软件开发中抽象出可重复利用的解决方案
* 软件开发工程师之间沟通的"行话"
*
* 面向对象的一般设计原则:
* 1.开闭原则(Open Close Principle)
* 对扩展开放,对修改关闭,(继承,实现接口)
* 我们可以通过"抽象约束,封装变化"来实现开闭原则
* 通过接口或者抽象类为软件定义一个相对稳定的抽象层
* 将相同的可变因素封装在相同的具体实现类中,派生一个实体类就可以了
* 2.里氏代换原则
* 子类继承父类时,除了添加新的方法完成新增的功能外,尽量不要重写父类
* 3.依赖倒转原则
* 面向接口编程,不要面向实现编程
* a.每个类尽量提供接口或抽象类,或者两者兼备
* b.变量的声明尽量是接口或者抽象类,利用多态向上转型
* c.任何类都不应该从具体的类派生(接口或抽象类),尽量用多态创建对象
* d.使用继承时,要遵循里氏代换原则
* 4.接口隔离原则
* 使用多个隔离的接口
* 5.迪米特法则
* 6.合成复用原则
* 7.单一原则
* 一个类只做一件事
* ......
*
* 箭头函数:JDK8的新特性 就是给接口用的
*
* 函数式接口:只有一个抽象方法,其他方法不考虑
* 注释@:FunctionalInterface
* 写法:
* 有参数,有返回值
* (i,j)->(return i+j;) 如果方法体只有一句话(i,j)
* 有参数,无返回值
* (i,j)->{ //方法体}
学习心得:学业顺利,今天很轻松,比以前更容易理解学习内容
标签:27,静态方法,刘明延,静态,调用,实例,static,2022,方法 来源: https://www.cnblogs.com/dsofjsdo/p/16526757.html