一 static
1.修饰成员变量
类中static 修饰符修饰的成员变量 称为 类变量
类变量 属于类 与类一起加载 且加载一次 内存中只储存一份 会被类的所有对象共享
当类中某属性为固定值时 可使用static修饰 使其称为类变量
同样道理 被static修饰的成员方法 称为 静态方法 可以不通过创建对象 直接通过 类.方法名 对其方法进行访问
因此诞生了工具类一说 就是提供公共可用的方法 供其他类使用
但对于继承的父子类父类方法不建议使用 static修饰 因为static与pravite修饰的父类成员变量和方法 ,子类无法调用,无法进行方法重写
工具类,一般建议构造方法pravite私有化,只提供非static修饰的方法
static还可以修饰代码块 即 { } ,称为静态代码块,主要用于静态代码块对成员变量进行初始化赋值
静态代码块随类加载自动执行,类加载一次,静态代码块也执行一次,
为什么要用静态代码块对类变量进行初始化赋值呢,而不是声明成员变量时直接赋值? 对成员变量进行修改,不会因为新创建对象而造成成员变量的值重置,所以不应在成员变量声明时直接赋值.
二 继承 extends 与 实现 implements
继承的关键字extends 为父类和子类的关系 父类与子类可以单继承 不可以多继承 可以多层继承
也可以为接口与接口之间的关系 接口与接口之间可以可以多继承 但由于接口不能创建对象 最终还是需要实现类对其进行继承
实现的关键字 implements 为接口与实现类之间的关系 实现类可以多个接口
类中有一种特殊类 被修饰符abstract 修饰 称为抽象类 抽象类中可以没有抽象方法 但有抽象方法的类一定是抽象类 类class前面需要对其用关键字abstract 进行修饰
抽象类中的抽象方法 没有方法体 只是进行了方法签名 需要子类继承并对抽象方法进行重写 才能够创建子类对象调用所需要的被重写的方法 抽象类在一定程度上更好的支持了多态
接口与抽象类的 用法思想在一定程度上是相同的 最早JDK版本的接口内 只能有抽象方法 接口内方法内前会有系统默认的修饰符public abstract 成员变量前一般都有默认修饰pulic static final修饰即为常量 但从JDK8与JDK9之后 接口内多了3种方法
default修饰 默认方法 有方法体 可以被对象调用 static修饰 的静态方法 可以通过接口名调用 和private修饰的接口内部调用的方法 主要用于对重复代码的一种抽取
接口其实就是定义的一种规范 其实现类必须按照其规范要求对其抽象方法进行重写
继承中,封装思想,一般父类的成员变量 属性会被pravite 进行修饰私有化 那么子类是怎么使用调用父类的属性呢 原因很简单 父类中的getter 与setter 方法被子类继承 这些方法是共有的 public修饰的 子类是能访问到的
子类的构造方法 第一行一般会省略super() 即先调用父类的构造方法 因为父类如果不被先创建子类就无法使用其中的属性了
如果子类的属性除了被父类抽取的共有属性 还有自己独有的属性 这时 子类全参构造方法创建时先调用父类的全参构造 后对自己独有的属性赋值 可以用this指定子类自身的成员变量进行赋值
三 多态
多态 是继承或实现的 情况下的一种现象 表现为对象多态 行为多态 存在方法重写
存在父类引用指向子类对象 即为小转大 向上转型 为自动类型转换 Java中的属性(成员变量)不谈多态
父类 变量名=new 子类() ; 即父类引用指向子类对象
定义方法时,使用父类类型的形参,可以接收一切子类对象,扩展性更强,更加便利
但是多态下 不能使用子类独有的功能
一般情况下直接创建子类对象 来使用子类独有的功能 如果非要使用多态 用父类类型变量来调用子类独有功能 需要 大转小 向下转型 强制类型转型 编译阶段不会报错
但如果运行时发现对象的真实类型与强转后的类型不同 会出现类型转换异常ClassCastException,为了规避此风险会在使用前使用 instanceof 来判断数据类型是否符合要求
四 final
final 关键字 是最终的意思 可以修饰类 方法 变量
修饰类 最终类 类不能够被继承 如果类中的方法都不希望被重写可以将此类定义为最终类
修饰方法 最终方法 不能够被继承
修饰变量 该变量只能被赋值一次 赋值后不能够被修改
且局部变量使用前需完成赋值 成员变量在声明时或者构造方法结束之前需完成赋值 否则会报错
final修饰的基本数据类型变量 数据不能改变 引用类型变量 地址不能被改变 但地址所指的对象可变
五 模板方法设计模式
一个功能的完成需要经过一系列的步骤 这些步骤是固定的 但是中间某些步骤的具体行为是待定的,在不同的场景内行为不同 这时我们就可以设计一个模板 用模板方法进行设计
具体步骤1 定义一个抽象类,提供模板方法 2模板方法中需要子类实现的地方,定义为抽象方法
3子类只需要继承该抽象类 重写抽象方法即可完成功能
模板方法是给对象直接使用的,不能够被子类重写
一旦子类重写了模板方法模板方法就失效了
防止模板方法被重写,可以用final修饰模板方法
六 常量
使用 static final 修饰的成员变量 称为常量constant
接口内的成员变量默认都是public static final 修饰的
常量命名规范:大写英文字母 多单词使用下划线链接起来 SCHOOL_NAME
作用:通常记录系统的配置信息
程序编译后,出现常量的地方全部会被替换成其记住的字面量,这样可以保证使用常量和直接使用字面量的性能是一样的 一般 男 MAN 计算机字面量为1 女 WOMAN 计算机的字面量为0
七 枚举
enum


枚举的第一行只能罗列一些名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象
枚举的构造器都是私有的(写不写都只是私有的),因此枚举类不能对外创建对象
枚举都是最终类,不可以被继承
枚举类从第二行开始可以定义类的其他各种成员
编译器为枚举新增了几个方法,并且枚举都是继承java.lang.Enum类的,从enum类也会继承到一些方法
10万+

被折叠的 条评论
为什么被折叠?



