A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 暖羊羊 中级黑马   /  2018-1-4 18:02  /  869 人查看  /  0 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

第二阶段 集合--反射总结
s2-day06
## 集合的体系结构
* 集合:
* 是一个统称, 包含很多集合的实现类. 根据不同数据结构, 提供了不同的集合类
* 数据结构:
* 数据的组织和存储方式
* 体系结构:
* 将不同的集合实现类的共性向上抽取出父类, 从而形成一种体系
* 如何学习一种体系结构:
* 从顶层开始学习共性
* 从底层使用具体实现

## Collection接口中常用的功能
* `Collection`接口
* 是单列集合体系的顶层
* 如何创建Collection对象?
  * 本身是接口, 实际使用的是子类对象. 使用多态, `Collection c = new ArrayList<>();`
* 常用方法
  * 增
   * `boolean add(E e)`: 向集合中添加元素, 添加成功返回true, 添加失败返回false. 永远能够添加成功
  * 删
   * `boolean remove(Object o)`: 删除元素中的指定元素, 删除成功返回true, 删除失败返回false
   * `void clear()`: 清空集合中的元素
  * 判断
   * `boolean contains(Object o)`: 判断集合中是否包含指定元素, 包含返回true, 否则false
   * `boolean isEmpty()`: 判断集合是否为空集合, 即没有元素. 没有元素返回true, 否则false
  * 获取个数
   * `int size()`: 获取集合中元素的个数
  * 转换
   * `Object[] toArray()`: 将集合转换为Object[]
s2-day07
*Set接口:
* 继承自Collection接口
* 特点
* 元素无序(存入和取出的顺序不一致)
  * 元素不能重复(元素唯一)
  * 没有索引
* 注意:
* 无序: 指的是存入的顺序和取出的顺序不一样, 而不是说每次取出来是随机顺序, 存入后每次取出来的顺序都一样, 但和存入的顺序不一样
* 直接打印和获取元素都属于取出, 所以不要把打印当成是HashSet内部存储的样子

## HashSet存储自定义对象并遍历
* HashSet类: 是Set接口的实现类
* 成员方法
  * `boolean add(E e)`: 添加成功true, 添加失败(重复了)返回false

s2-day08
* 异常:
* 就是不正常的情况, 是代码编译或运行时发生的错误
* 常见异常
* `NullPointerException`
* `ArrayIndexOutOfBoundException`
* 任何数字(负数, 0, 正数)除以0都会抛出异常
* 异常体系结构
```
java.lang.Throwable(最顶层)
|_ Error (不应该试图捕获的严重问题, 不能处理的异常)               
|_ Exception (可以处理的异常)    # 编译时异常: 编译时期就会发生的异常
  |_ RuntimeException        # 运行时异常: 编译时正常, 运行时才会发生的异常
s2-day09
* 注意: 目录路径字符串写2个斜线: `a\\b`, 或`a/b`
* 原因: 一个斜线可以和字母组合编程特殊字符, 如`\t`, 所以要把斜线转义为普通的斜线, 即`\\t`
* `java.io.File`类: 是文件和目录的路径名的抽象表现形式(也就是文件和目录在Java中的形式, 既能表示文件, 也能表示目录)
* 构造方法(创建了File对象, 并将其指向该路径. **注意**: 不会在磁盘上创建这个文件)
  * `File(String pathname)`: 使用指定的路径名创建一个File对象.
  * `File(String parent, String child)`: 根据指定的父路径和文件路径创建File对象.
  * `File(File parent, String child)`: 根据指定的父路径File对象和文件路径创建File对象
s2-day10
* 类字段:
* 静态成员变量
* `System`类的类字段
* `err`: 标准错误输出流. 命令行输出错误信息
  * 是PrintStream, `OutputStream`的子类, 属于字节输出流
* `in`: 标准输入流. 键盘输入  InputStream in = System.in;   byte  byte[]
  * 是`InputStream`类, 属于字节输入流
* `out`: 标准输出流. 将数据输出到控制台  OutputStream out = System.out;   byte  byte[]
  * 是PrintStream, `OutputStream`的子类, 属于字节输出流
s2-day11
* 进程:
* Process, 一个应用程序在内存中的执行区域
* 举例:
  * 一个正在运行的程序, 可以有一个或多个进程.
   * 例如: 查看资源管理器, QQ有1个进程, chrome浏览器有多个进程
  * 每个进程都会占用一部分系统资源
   * 如CPU, 内存, 磁盘, 网络等
* 线程:
* Thread, 是一个进程中的一个执行路径.
* 举例:
  * 一个进程中可以有一个或多个线程, 每个线程可以执行自己的代码
  * 多个线程各自执行的任务可以同时进行
  * 线程的执行依靠CPU调度分配
   * 单核CPU: 靠CPU不断高速的随机的切换执行的线程, 达到看似同时进行的效果
   * 多核CPU: 每个CPU可能完全执行一个线程, 或者多个CPU各自不断高速随机切换, 更高效
* 单线程和多线程特点
* 单线程: 同一时间只做一件事情, 安全性高, 效率低.
* 多线程: 同一时间做多件事, 安全性低, 效率高.
* 单线程和多线程的例子
* 假设各位同学吃坏了, 都想去卫生间, 只有1个空位
* 单线程方式: 同学1进去解决完毕, 同学2再去. ( 安全性高, 效率低)
* 多线程方式: 大家同时进去解决... (安全性低, 效率高)
s2-day12
* 网络通信三要素
* `传输协议`:
  * 作用: 通信的规则
  * 常见协议
   * TCP: Transmission Control Protocol, 传输控制协议
   * UDP: User Datagram Protocol, 用户数据报协议
* `IP地址`: 是一个二进制数字
  * 作用: 网络设备的标识.
  * IPv4: 192.168.100.255 (每位0~255, 32位, 4个无符号byte), `点分十进制表示法`
  * IPv6: CDCD:910A:2222:5498:8475:1111:3900:2020 (128位, 16个无符号byte)
  * IP可以使用主机名或域名代替, 更容易记忆
* `端口号`:
  * 作用: 标识使用网络通信的进程的逻辑地址, 用于定位一个主机上的具体服务
  * 0~65535个端口, 前1024个端口号是系统保留端口号
  * 常见服务占用的端口
   * 80: HTTP服务
   * 443: HTTPS服务, 安全加密的HTTP
   * 21: FTP服务, 文件传输
   * 22: SSH服务, 安全加密的远程登录
   * 23: Telnet服务, 远程登录
  * 查看端口号: `netstat -an`
s2-day13
为什么要学反射:
* 反射的目的
  * 反射可以在不修改源代码的前提下, 改变程序的运行方式
  * 反射是后期web框架的底层实现基础, 帮助我们更好理解框架的原理
* 反射能干的事
  * 前提条件: 获取一个类的字节码对象, 然后通过该字节码对象可以:
   * 获取一个类的所有构造方法
    * 创建一个类的对象
   * 获取一个类的所有成员属性
    * 获取属性值
    * 设置属性值
   * 获取一个类的所有成员方法
    * 调用成员方法
## 反射机制概述, 获取字节码对象的3种方式

* 反射:  
* Reflection. 在程序运行时, 获取任何一个类的所有属性和方法(包括私有的), 调用任意一个对象的所有属性和方法(包括私有的)
* 反射的前提
* 获取类的字节码对象
* 获取字节码对象的3种方法
* `对象.getClass()`
* `类名.class`
* `Class.forName(String clasName)`

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马