@ [toc]
1.依赖注入
- 依赖注入是一种设计模式和编程思想,不依赖 具体的框架实现,可以通过多种方式和框架来实现
- 可以通过Spring , Google Guice , PicoContainer 等都可以实现依赖注入,也可以通过手动编写实现
- 目的:
- 为了解耦合,将对象之间的依赖关系从代码中解耦出来, 使系统更加灵活,更易于维护和测试
- 方法:
- 构造方法注入: 通过构造函数传入依赖对象
- Setter方法注入:通过Setter方法设置依赖对象
- 接口注入
2.File类
- File类是用来表示文件和目录路径名的抽象,主要功能是对文件和目录进行操作,如创建,删除,重命名,以及获取文件和目录的各种属性信息.如果要进行文件内容的读写,则需要使用java IO流相关的类
- java中用于文件操作的基础类,主要用于获取文件和目录的属性,信息等,而不能直接进行文件的读写操作
- File本身不能读写文件内容,需要使用FileInputStream,FileOutputStream,FIleReader,FileWriter等流类操作
- 通过createNewFile()方法创建文件,通过mkdir()或者mkdirs()方法创建目录
3.多线程
- run()方法是线程执行的入口点,也是新线程执行的起点.当一个类继承Thread类或实现Runnable接口时,必须==重写run()==方法来定义线程要执行的任务
- start()方法是用来启动线程的方法,是线程进入就绪状态,等待CPU调度
4.HashMap
- java中常用的集合类
- 使用键值对的形式存储数据,每个键都映射一个特定的值,这种结构让数据的存取非常高效
- 不保证元素的顺序,有序存储需要使用LinkedHashMap或者ThreeMap
- 允许使用null作为键,但是只能有一个null键
- 允许使用null做值,并且可以有多个键映射到值
- 键必须是唯一的,但是值可以重复
- HashMap的实现基于哈希表,查找效率为O(1)
- 不是线程安全,多线程环境下应使用ConcurrentHashMap
5.序列化
- java实现序列化时,必须实现Serializable接口,这是一个标记接口,没有定义任何方法,仅用来标识某个类对象可以序列化.当一个类实现后,java虚拟机在序列化的过程中提供默认的序列化机制
- 序列化时将对象转换为字节序列的过程
- 反序列化是将字节序列恢复对象的过程
- serialVersionUID是 序列化版本号,用于确保序列化与反序列化的类版本一致
- 使用transient关键字可以标记不需要序列化的字段
6.Cloneable接口
- 用于标记一个类的对象可以被克隆
7.Comparable接口
- 用于定义对象之间自然排序规则,提供compareTo方法的实现
8.Writeable
- 不是java标准库中的接口
9.executeUpdate()方法返回值的具体含义
- 其返回值表示受影响的行数
- 对于INSERT语句:返回新增的记录数
- 对于UPDATE语句:返回更新的记录数
- 对于DELETE语句:返回删除的记录数
- 如果执行失败,则会抛出SQLException,恩施返回特殊值
10.volatile
- 用于多线程环境下的同步控制,但是并不能完全保证线程安全
- 能保证可见性 和 有序性 ,但是不能保证原子性
- JVM的内存模型规定,volatile变量的值在使用前必须从主内存重新加载,保证获取到的是最新值
- 轻量级的同步机制,保证内存可见性和机制指令重新排序,但是不保证原子性,所以不保证线程安全
11.线程安全的类
- Hashtable:其所有方法都是同步的(synchronized),任一时刻只能有一个线程访问,所以是线程安全的,但是性能不如HashMap,在多线程环境下可以安全使用
- Vector:与Hashtable类似,所有方法是同步的,可在多线程环境下安全使用,是ArrayList的线程安全版本
- 现在更推荐使用java.util.concurrent包下的并发集合类,如ConcurrentHashMap,CopyOnWriteArrayList等
12.线程不安全的类
- TreeSet:基于T热额Map实现的,不是线程安全的,可以使用Collections.synchronizedSet()实现线程安全
- LinkkedList:是双向链表实现,本身不是线程安全的,在多线程环境下使用需要额外的同步措施
13.类方法的特性和调用规则
- 类方法中不能使用this关键字,因为this表示当前对象的引用,而类方法属于类本身,不依赖与具体对象,在类方法中使用this是语法错误
- 可以直接调用本类的其他方法和类变量
- 也可以调用实例方法,但需要先创建类的实例对象,然后通过对象引用来调用