面向对象

面向对象

抽象方法abstract

  • 没有实现的方法

  • 没有方法体

  • 有抽象方法的类,一定要声明成抽象类

  • 抽象类不能被实例化

接口interface

  • 把一些没有实现的方法,封装到一起,等某个类用时再拿出来

  • interface接口名

  • class 类名 implements 接口

  • 接口中有3中方法

  1. 接口中抽象方法,可省略abstract

  2. jdk8以后可以有默认实现方法,但要用default修饰

  3. jdk8以后可以有静态方法static

类方法(静态方法)

访问修饰符 static 返回值类型 方法名(){}

代码块

只有方法体的方法,前面可以加static,加了就是静态代码块。先调用代码块,再执行构造器

final 关键字

  • 类、属性、方法、局部变量,不希望被继承重写或者改变的时候,前面加final

面向对象编程三大特征:

super

代表父类的引用,用于访问父类的属性,方法,构造器

类的5大成员

  1. 属性

  2. 方法

  3. 构造器

  4. 代码块

  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()真正的多线程

异常

  1. NullPointerException 空指针异常

  2. ArithmeticException数学运算异常 eg."除以0"

  3. ArrayIndexOutOfBoundsException 数组下标越界异常

  4. ClassCastException类型转换异常

  5. 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 跳出所在的方法

数组[]

属于引用数据类型赋值、翻转、扩容缩减、拷贝、排序、查找

二维数组

就是数据类型

对象就是一个具体的实例

对象在内存布局

栈-->堆[基本数据类型直接在此存放]-->方法区(常量池)引用数据类型在这里存放

(成员)方法

方法的调用机制

递归

方法自己调用自己

posted @ 2023-01-17 21:26  Ritchie^._.^  阅读(9)  评论(0)    收藏  举报