类与对象:
对象的概念:客观存在的事物
面向对象:人关注的事物信息 了解这个对象的信息并且关注的这个动作叫做面向对象 面向对象编程 面向这个对象进行编程
类 想要的东西的信息 类是对现实生活中一类具有共同属性和行为的事物的抽象
属性:对象具有的各项特征 每个对象的每个属性都拥有特定的值
行为:对象能够执行的操作
类 是对现实生活中一类具有共同属性和行为的事物的抽象
对象:是能够看到的真正存在的实体
类的重要性:是java程序的基本组成单位
类是对现实生活中一类具有共同属性和行为的事物的抽象 却定对象将会拥有的属性 和行为
类的组成 由属性(成员变量)和行为构成(成员构成)(和之前的方法比去掉了ststic关键字)
定义步骤:1、定义类 2、编写类的成员变量 3、编写类的成员方法(不要static)
封装:封装是面向对象编程语言对客观世界的模拟,客观世界里成员都是隐藏在对象内部,外界无法直接操作
封装原则:类的莫信息隐藏在类的内部 不予许外部程序直接访问 而是通过该类提供的方法来实现;例如对隐藏信息操作和访问的成员变量private' 提供对应的get()/set()方法
优点:提高代码安全性 安全校验 提高代码的复用性
继承格式:class 子类 extends 父类 { } ;extends:关键字表示继承
继承的好处和弊端 1、好处 提高复用性 维护性 2、bad 耦合性增加 一个好的软件 低耦合高内聚
使用条件:体现的关系是:is a 是这个的关系 什么是什么的一种(有关系)
super内存图:
方法重写注意事项:
-
1、私有方法不能被重写(父类私有成员子类是不能继承的)
-
2、子类方法访问权限不能更低(public > 默认 > 私有)
Java中继承的注意事项
-
1、Java中类只支持单继承,不支持多继
-
2、Java中类支持多层继承
修饰符:package(包) import(包)
各个权限修饰符的使用:
final、static(应用)
1.多态
同一个对象,在不同时刻表现出来的不同形态
多态的前提:
-
1、要有继承或实现关系
-
2、要有方法的重写
-
3、要有父类引用指向子类对象
成员访问特点:变量(编译看父类 运行看父类)(方法)编译看父类 运行看子类 为什么两者不一样:因为方法能重写 变量不能
多态的好处和弊端
-
好处:提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作
-
弊端:不能使用子类的特有成员变量 成员方法
抽象类:abstract修饰 不能实例化
接口( ):interface修饰 implements实现 接口不能实例化
接口的成员特点(记忆)(能有哪些东西)
-
1、成员变量:只能是常量默认修饰符:public static final可以通过接口名访问(默认也是被Static修饰)
-
2、构造方法:没有,因为接口主要是扩展功能的,而没有具体存在
-
3、成员方法:接口类不能有非抽象方法:只能是抽象方法默认修饰符:public abstract
接口的更新:
-
常量public static final
-
抽象方法public abstract
-
默认方法(Java 8):public default void show3() {
-
静态方法(Java 8):public static void show() {}
-
私有方法(Java 9):private void show() { }
类和接口的关系
-
1、类与类的关系:继承关系,只能单继承,但是可以多层继承
-
2、类与接口的关系:实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
-
3、接口与接口的关系:继承关系,可以单继承,也可以多继承(类不支持)
抽象类和接口的区别
-
成员区别
-
抽象类:变量,常量;有构造方法;有抽象方法,也有非抽象方法
-
接口:常量;抽象方法
-
-
关系区别
-
类与类 继承,单继承
-
类与接口 :实现,可以单实现,也可以多实现
-
接口与接口:继承,单继承,多继承
成员/关系区别 是在java中语法的区别
-
-
设计理念区别
-
抽象类:对类抽象,包括属性、行为
-
接口:对行为抽象,主要是行为
-
(常用)API:Math、System、Object(toString、equals)、Arrays(toString、sort)、Date、SimpleDateFormat、Calendar
代码块:{}普通代码块 static静态代码块 静态 普通 构造 含继承访问 父静子静父普构子普构
包装类:将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据
常用的操作之一:用于基本数据类型与字符串之间的转换
String相互转换int:
int转换为String转换为:
-
方式一:先将字符串数字转成Integer,再调用valueOf()「String类中方法」方法
String转换int:
-
方式二:通过Integer静态方法parseInt()「Integer类中方法」进行转换
异常:
try catch (处理)/throws(抛出):
throws和throw的区别
自定义异常格式:
public class 异常类名 extends Exception {
无参构造:
含参构造};
}
Lambda表达式:函数(拿数据做操作 )式编程思想
格式:()->{代码块} 三要素 形式参数 箭头 代码块
-
1、形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可
-
2、->:由英文中画线和大于符号组成,固定写法。代表指向动作
-
3、代码块:是我们具体要做的事情,也就是以前我们写的方法体内容
Lambda表达式和匿名内部类的区别:
-
所需类型不同
-
匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
-
Lambda表达式:只能是接口
-
-
使用限制不同
-
如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
-
如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用Lambda表达式
-
-
实现原理不同
-
匿名内部类:编译之后,产生一个单独的.class字节码文件
-
Lambda表达式:编译之后,没有一个单独的.class字节码文件。对应的的字节码会在运行的时候动态生成
-
方法引用(lambda的兄弟)
-
方法引用符
:: 该符号为引用运算符,而它所在的表达式被称为方法引用
-
推导与省略
-
如果使用Lambda,那么根据“可推导就是可省略”的原则,无需指定参数类型,也无需指定的重载形式,它们都将被自动推导
-
如果使用方法引用,也是同样可以根据上下文进行推导
-
方法引用是Lambda的孪生兄弟
引用类方法【应用】:其实就是引用类的静态方法 格式 类名::静态方法::Lambda表达式被类方法替代的时候,它的形式参数全部传递给静态方法作为参数
-
引用对象的实例方法,其实就引用类中的成员方法:格式 对象::成员方法;Lambda表达式被对象的实例方法替代的时候,它的形式参数全部传递给该方法作为参数
-
引用类的实例方法,其实就是引用类中的成员方法:类名::成员方法;Lambda表达式被类的实例方法替代的时候第一个参数作为调用者 后面的参数全部传递给该方法作为参数
-
引用构造器,其实就是引用构造方法:格式 类名::new;Lambda表达式被构造器替代的时候,它的形式参数全部传递给构造器作为参数
-
内部类
在类的成员位置 成员内部类
在类的局部位置:局部内部类(匿名内部类)
枚举类:枚举是一组常量的集合 枚举是一种特殊的类 里面只包含一组有限的特定的对象
实现方式:自定义/enum关键字实现枚举
enum关键值语法:
1、使用关键字enum替代class
2、直接使用对象名字加上传给构造器的参数 常量名+参数列表
3、如果有多个常量(对象 )使用逗号间隔即可
4、如果用enum实现枚举 要求将定义的常量 写在前面
常用方法
ordinal()返回枚举常量的次序 从0开始编号 可以做比较
values():返回数组(将所有的枚举常量返回 含有所有的枚举对象) 只能通过反编译发现 这个方法
valueof() 执行流程 根据输入的名称 到枚举对象去查找 如果找打 就返回 如果没找到 报错
compareto比较编号 看谁先申明 调用者的编号 - 被调用者编号
clone
name
getDeclaringclass
equals
tostring
eg:增强for:循环增强的流程:依次从nums数组中取出数据 赋值给i 如果取出完毕 则退出
注解:用于修饰解释包、类、方法、属性、构造器、局部变量
元注解:注解的注解