SE复习

SE复习

面向对象

  • 封装
    对属性私有化 用get set方法进行修改和获取
  1. 良好的封装能够减少耦合。
  2. 类内部的结构可以自由修改。
  3. 可以对成员变量进行更精确的控制。
  4. 隐藏信息,实现细节。
  • 继承
    1.使用extends关键字实现继承
    2.继承父类的属性和方法
    3.不能继承构造方法
  • 多态
    向上造型
    1.用父类的声明指向之类的对象
    2.子类的声明指向父类的对象 需要强转
    重写
    1.父子之间存在继承关系时产生方法的重写
    2.方法名称要一致
    3.参数要一致
    4.返回值也要一致
    重载
    1.方法名称必须要相同
    2.重载方法的参数组合必须不一样
    3.方法名称要一致
    4.方法重载与返回值无关
  • 抽象
    抽象类
    1.含有 abstract 修饰符 class 即为抽象类
    2.抽象方法不能用private、static、synchronized、native访问修饰符修饰
    接口
    1.特殊的抽象类
    2.接口中的所有方法都必须是抽象的
    3.接口中的方法定义默认为 public abstract 类型
    4.接口中的成员变量(只能为常量)类型默认为 public static final,必须赋初值
    区别
    • 抽象类方法
      JDK 1.8以前,抽象类的方法默认访问权限为protected(可以是public和protected)
      JDK 1.8时,抽象类的方法默认访问权限变为default(可以是public和protected或者不写)
    • 接口方法
      JDK 1.8以前,接口中的方法默认,也必须是public的(只能用public)
      JDK 1.8时,接口中的方法默认public的,也可以是default的(可以是public和default)
      JDK 1.9时,接口中的方法可以是private的(可以是public和default和private)。
    • 抽象类的属性
      四个都可以使用
    • 接口的属性
      接口属性默认(什么都不写的情况下)是public static final的,所以默认是public(只能用public)

object 11种方法

  • wait()*3
  • notify()
  • notifyall()
  • hashcode()原方法输出 this
  • equals()原方法 == 判断
  • tostring()原方法输出 this
  • clone()克隆 浅克隆 protected
    浅克隆:是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。
    深克隆:不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象。
    pos:当前对象的地址;son:son属性所指向的地址;name:对象的name属性。
    在这里插入图片描述
  • getclass()获取类名 返回当前运行对象
  • finalize()垃圾回收 protected
    • 垃圾判定
      1.引用计数法

      给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。

      2.可达性分析算法
      从GC Roots(每种具体实现对GC Roots有不同的定义)作为起点,向下搜索它们引用的对象,可以生成一棵引用树,树的节点视为可达对象,反之视为不可达。

      (1)虚拟机栈(栈帧中的本地变量表)中引用的对象。
      (2)方法区中的类静态属性引用的对象。
      (3)方法区中的常量引用的对象。
      (4)本地方法栈中JNI(Native方法)的引用对象。

  • 垃圾回收算法
    1.标记-清除算法
    这样导致的结果会存在很多的内存碎片。
    在这里插入图片描述
    2.复制算法
    这样虽然解决了内存内存碎片问题,但是如果对象很多,重新申请新的内存空间会很大
    在这里插入图片描述
    3.标记-整理算法
    执行完标记清除全过程之后,再一次对内存进行整理,将所有存活对象统一向一端移动
    在这里插入图片描述
    4.分代收集算法
    老年代 使用复制算法
    新年代 使用标记

String

  • String StringBuild StringBuffer 区别
    String含义为引用数据类型,是字符串常量.是不可变的对象适用与少量字符串操作 final修饰char数组
    StringBuilder可变字符序列,适用单线程下在字符缓冲区下进行大量操作的情况
    StringBuffer可变字符序列,适用多线程下在字符缓冲区进行大量操作的情况

    线程安全:StringBuffer线程安全.StringBuilder线程不安全

  • String StringBuild StringBuffer 速度
    StringBuild>StringBuffer>String


集合

  • Collections
    此类不能实例化,就像一个工具类,服务于Java的Collection框架。他提供一系列静态方法实现对各种集合的搜索、排序、线程安全等操作
  • Collection
    • List
      • ArrayList 和LinkedList区别
        ArrayList是数组大小确定 LinkedList是双端链表 节点
        插入 删除 当头尾时 相差不大 当中间 时LinkedList优势大
        查找 当头尾 查找时相差不大 当中间 查找时ArrayList优势较大
        当10万以上的数据量时LinkedList才显示出优势
      • Vector和ArrayList区别
        Vector是线程安全的效率低
        ArrayList是线程不安全的效率高
    • Set
      • hashset
        底层是hashmap
        需要重写hashcode方法和equals方法
      • treeset
        实现SortedSet接口
        要求可比较实现Comparable或者Comparator接口
    • Queue
  • map
    • HashMap
      线表+链表
    • TreeMap
      红黑树
    • Hashtable
      使用synchronized来保证线程安全
      不能有null值
    • ConcurrentHashMap
      段数组是final的,并且其成员变量实际上也是final的。这可以确保不会出现死锁,因为获得锁的顺序是固定的。
      Segment数组结构(可重入锁ReentrantLock)和HashEntry数组结构组成
      锁分段技术
    • LinkedHashMap
      不允许有null值
      LinkedHashMap 是HashMap的一个子类
      保存了记录的插入顺序先得到的记录肯定是先插入的,也可以在构造时用带参数,按照应用次数排序
      LinkedHashMap的遍历速度只和实际数据有关
      HashMap的遍历速度和他的容量有关
  • 扩大集合
    • HashMap默认初始化数组的大小为16,HashTable为11。前者扩容时乘2,使用位运算取得哈希,效率高于取模。而后者为乘2加1,都是素数和奇数,这样取模哈希结果更均匀。
    • ArrayList初始大小为10,每次1.5倍进行扩容
    • HashMap 初始化大小是 16 ,扩容因子默认0.75
  • iterator

IO

字节流:InputStream(FileInputStream、ObjectInputStream、BufferedInputStream)
OutputStream
字符流:Reader/Writer
FileReader/BufferedReader
FileWriter/PrintWriter/BufferedWriter

1PrintWriter(filepath);// 默认字符集

2PrintWriter(filepath,"charset");// 指定字符集

3PrintWriter(file);// 默认字符集

4PrintWriter(file,"charset");// 指定字符集

5PrintWriter(OutputStream);// 可以指定文件追加

6PrintWriter(OutputStream, true);// 可以设置自动刷新缓冲区  println()换行输入只适用println

OutputStream os = new FileOutputStream(file,true);//是否追加
Writer w = new OutputStreamWrite(os,"gdk");//指定字符集
7PrintWriter pr= new PrintWriter(w,true);//自动刷新 println
8PrintWriter pr= new PrintWriter(w);//不会自动刷新 println

线程

  • 线程创建
    1.继承Thread
    2.实现Runnable
public interface Runnable {
    public abstract void run();
}

3.实现Callable

public interface Callable<V> {
    V call() throws Exception;
}

4.线程池:4种
ExecutorService ex = Executors.newFixedThreadPool(3);//指定最大长度
ExecutorService ex = Executors.newCachedThreadPool(); // 按需求自动增长销毁
ExecutorService ex = Executors.newSingleThreadExecutor(); // 单个线程
ScheduledExecutorService ex = Executors.newScheduledThreadPool(3); // 一个定长线程池,支持定时及周期性任务执行

  • 同步-锁的类型
    • 可重入锁
      如果锁具备可重入性
    • 可中断锁
    • 公平锁
    • 读写锁
  • 通信:wait notify notifyall
  • 线程生命周期、状态
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值