面向对象
面向对象
抽象方法abstract
-
没有实现的方法
-
没有方法体
-
有抽象方法的类,一定要声明成抽象类
-
抽象类不能被实例化
接口interface
-
把一些没有实现的方法,封装到一起,等某个类用时再拿出来
-
interface接口名
-
class 类名 implements 接口
-
接口中有3中方法
-
接口中抽象方法,可省略abstract
-
jdk8以后可以有默认实现方法,但要用default修饰
-
jdk8以后可以有静态方法static
类方法(静态方法)
访问修饰符 static 返回值类型 方法名(){}
代码块
只有方法体的方法,前面可以加static,加了就是静态代码块。先调用代码块,再执行构造器
final 关键字
- 类、属性、方法、局部变量,不希望被继承重写或者改变的时候,前面加final
面向对象编程三大特征:
super
代表父类的引用,用于访问父类的属性,方法,构造器
类的5大成员
-
属性
-
方法
-
构造器
-
代码块
-
内部类
内部类
-
定义在外部类局部位置上,通常是方法/代码块中
-
局部内部类(有类名)
- 内部类可直接访问外部类的所有成员
- 外部类访问内部类,要先创建一个对象
- 不能添加修饰符,但可以用final
- 重名时就近原则, 外部类名.this.成员(强制使用外部类成员名)
-
匿名内部类(没有类名)
- new 类/接口(参数列表){@Override//...};
- 匿名内部类只能用一次
- 匿名内部类无法通过有参构造方法进行值传递
-
定义在外部类成员位置上,通常在类中,与方法在一个层级
-
成员内部类(没有static修饰)
- 与属性、方法在一层级
- 外部类使用内部类的成员,必须先创建内部类对象
- 无修饰符直接写在类中,也是一个类,拥有属性,方法
- 内部类可以使用外部类的成员变量
- 强制使用外部类的属性和方法:
- 外部类名.this.属性名/方法名
-
静态内部类(有static修饰)
- 使用static修饰的成员内部类
- 内部类中存在静态成员,那么内部类必须是静态的
- 静态方法只存在静态内部类,不存在成员内部类
- 外部类的静态方法直接调用
- 外部类的非静态方法,需要先创建对象
== 和eauals的区别
-
== 比较运算符
-
即可判断基本类型,又可判断引用类型;
-
如果判断基本数据类型,看值是否相等;
-
如果判断引用类型,看堆地址是否相同(是否同一个对象);
-
equals方法
-
只能判断引用类型;
-
默认判断地址是否相同;
-
子类中往往重写该方法,判断内容是否相等
基本数据类型
-
基本数据类型
-
只能进行赋值或运算操作
-
默认值0,空字符,false
-
没有装箱,拆箱方法
包装类型
-
引用数据类型
-
除了赋值和运算,也可以调用方法,new 调用构造方法
-
默认值null
-
有对应方法实现装箱、拆箱
包装类
-
八种基本数据类型 -- 分别对应引用类型(包装类)
-
装箱拆箱 int-->Integer Integer integer = new Integer(); Int i = integer;
-
Integer 内存范围(-127 ~128)
-
String 保存字符串,一组字符序列有属性 可网络传输
-
StringBuffer很多方法与String相同,可变长度,是个容器
-
StringBuilder 不是线程安全,但比StringBuffer快,被当作是StringBuffer的简易替换,主要操作append,insert方法
-
String类
-
charAt()方法返回指定索引处的字符,索引范围0到length()-1
-
StringBuffer
-
String的增强,可变长度,是个容器,线程安全
-
初始16字符
集合
-
比数组更灵活,可以扩容,数据类型也可以不同,可增删改查
-
Collection接口,实现类 单列
-
List是Collection的子接口,有序(添加顺序与取出顺序一致),可重复
- ArrayList,类似Vector,使用Iterator(迭代器),底层维护了一个Object类型可变数组(改查多),可以放入null,不安全,因此多线程下不建议使用。扩容初始容量0,第一次加10,以后1.5倍,
- 右移除2
-
LinkedList,增强for,维护1双向链表(增删多),维护双向链表。
-
Vector,普通for
-
Set也是Collection的子接口,无序,不允许重复
- HashSet,添加元素时,hash值比较,无序,维护1哈希表(数组+链表+红黑树)
- TreeSet,可排序
- LinkedHashSet 插入和取出顺序一致,维护数组+双向链表
-
List有序的可重复集合
-
Queue先进先出,offer添加元素,poll移除元素
-
Stack后进先出
-
Collection接口遍历对象的方式
-
增强for循序
- 替代iterator/简化版的iterator
-
- 语法【 for(元素类型 元素名:集合名/数组名){访问元素}
-
Map 双列 Key-Value
-
键无序 HashMap
- put() 方法将指定的键/值对插入到 HashMap 中。
-
键排序 TreeMap
-
forEach() 方法与 for-each 循环不同
-
forEach() 方法用于遍历动态数组中每一个元素并执行特定操作。
-
for-each循环用于遍历数组中的每个元素。
-
涉及堆栈,队列时,建议用List,对于快速插入和删除元素,建议用LinkedList,快速随机访问元素的,用ArrayList。
Array方法
- sort()方法排序默认
泛型<>
-
参数化类型,数据类型的数据类型
ArrayList<Dog> arrayList = new ArrayList<Dog>(); -
public class ArrayList<E>{} -
在定义对象时(编译时)确定数据类型
Comparable和Compator
-
Comparable可以称之为内部比较器,而Compator可以称之为外部比较器。
-
Comparable 是一个排序接口,
-
Comparator 是一个比较器接口,
compareTo() 方法
-
该方法用于两个相同数据类型的比较;
-
返回值
-
如果指定的数与参数相等返回 0
-
如果指定的数小于参数返回 -1
-
如果指定的数大于参数返回 1
get/set方法
- 成员变量可读可写控制
多线程
-
⼀个程序运⾏后⾄少有⼀个进程,⼀个进程中可以包含多个线程
-
并发:指两个或多个事件在同⼀个时间段内发⽣,多任务交替执行。
-
并⾏:指两个或多个事件在同⼀时刻发⽣(同时发⽣),需要多核cpu。
-
Runnable的实现方式是实现其接口 implements
-
Thread的实现方式是继承其类 extends
-
run()方法只是一个类中的普通方法,调用run方法跟调用普通方法一样
-
而start()方法是启动线程,它创建线程等一系列工作,然后自己调用run里面的任务内容。start0()真正的多线程
异常
-
NullPointerException 空指针异常
-
ArithmeticException数学运算异常 eg."除以0"
-
ArrayIndexOutOfBoundsException 数组下标越界异常
-
ClassCastException类型转换异常
-
NumberFormatException数字格式不正确异常
-
throws关键字 调用一个抛出异常的方法
-
try-catch 自己处理异常 ctrl + alt + t
-
try – 用于监听,异常捕获。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
-
它一般与catch,finally组合使用块,catch可以出现0次、1次或多次,finally可以出现0次或1次,但是catch和finally不能同时不出现。
线程生命周期
-
Thread.currentThread()获取当前线程
-
synchronized关键字,当某个对象被它修饰时,表明该对象在任一时刻只能被一个线程访问
-
线程的创建
-
写一个类继承Thread类,重写run方法
-
写一个类实现Runnable接口,实现run方法
-
wait() 让当前线程处于等待状态,并释放锁
-
notify() 唤醒某个等待中的线程
-
notifyAll() 唤醒所有等待中的线程
-
wait 是Object顶级类的方法,只能在同步方法或者同步块中使用。wait会释放锁,要用notify()唤起,时长大于等于sleep。
-
sleep 是Thread线程类的静态方法,可以在任何地方使用,不会释放锁,它也不需要占用锁。
-
BlockingQueue自带阻塞
格式化代码
-
ctrl + alt + L
-
读写互斥锁的互斥规则: 只要存在写的操作就互斥 只有读的操作的时候,完全不互斥
IO流
-
I Input,Reader
-
O Output,Writer
-
字节流(8bit)
-
InputStream 输入流(该抽象类是所有字节输入流的超类)
- 3个子类 FileInputStream,BuffferedInputStream(缓冲),ObjectInputStream
-
OutputStream 输出流(该抽象类是所有字节输出流的超类)
- 3个子类 FileOutputStream,FilterOutputStream,ObjectOutputStream
-
字符流(字符)
-
Reader 输入流
- FileReader
-
Writer 输出流
- FileWriter
- fileWriter.close(); 一定要关闭流,或者flush才能真正把数据写入到文件中
-
序列化
-
保存值和数据类型
-
mkdir 创建一级目录
-
mkdirs 创建多级目录
-
delete 删除空目录或文件
-
节点流(底层流)
-
包装流(处理流),用修饰器包装了节点流
-
BufferedWriter
-
BufferedReader
网络
-
ip地址 cmd ipconfig
-
Socket套接字
-
start()方法,真正实现了多线程运行,run()方法只是一个普通方法,称为线程体,start方法会自动调用run方法,run必须是public,返回值void。
properties
- 该类主要用于读取Java的配置文件
反射reflection
-
反射中,可把方法视为对象
-
用方法对象 来调用 方法
函数式接口@FunctionalInterface
-
首先它是一个接口,然后在这个接口里面有且只有一个抽象方法。
-
允许定义静态方法
-
允许定义默认方法
readLine()
- 读取数据,读完所有数据返回null
split()
- 分割字符串
collect方法(收集器)
-
Collector是collect方法的参数,是一个接口
-
Collectors本身实际是一个工厂
Lambda表达式
-
也称闭包
-
操作符->
-
表达式 ()-> {}
关键字
-
用来访问类的a静态方法,b对象方法,c构造方法
-
类名静态方法名 a
-
实例对象实例方法 b
-
类名new c
break
break终止某个语句块的执行
continue结束本次循环,继续执行下一次循环
return 跳出所在的方法
数组[]
属于引用数据类型赋值、翻转、扩容缩减、拷贝、排序、查找
二维数组
类
就是数据类型
对象就是一个具体的实例
对象在内存布局
栈-->堆[基本数据类型直接在此存放]-->方法区(常量池)引用数据类型在这里存放
(成员)方法
方法的调用机制
递归
方法自己调用自己

浙公网安备 33010602011771号