Java 开发
本文记录 Java 开发过程的相关知识,以备查阅。
常用类库Apache Commons:对 JDK 的扩展,包含了很多开源工具,常用包如下:
组件
功能说明
Commons BeanUtils
针对 Bean 的工具集,使用反射机制实现
Commons Codec
编码解码组件,如 DES,SHA1,MD5,Base64 等
Commons Collections
集合组件,扩展 Java 标准的 Collections API
Commons Compress
压缩解压组件
Commons Configuration
配置管理工具
Commons CSV
读写 CSV 文件
Commons Daemon
将普通的 Java 应用转变为系统的后台服务,如 Tomcat
Commons DBCP
数据库连接池
Commons DBUtils
对传统操作数据库的类二次封装
Commons Digester
是 XML 到 Java 对象的映射工具集
Commons Email
邮件操作组件
Commons Exec
提供一些常用 ...
《Java》备忘录
本文用于记录 Java 相关知识,以备查阅。
01 面向对象面向对象的三大特征:
封装:通过访问修饰符实现,优点是减少耦合,提高软件的可重用性
继承:通过 extends 实现,表示 is-a 的关系
多态:编译时多态指的是方法的重载,运行时多态指的是对象引用所指向的具体类型在运行期间才确定,运行时多态通过继承,重写,向上转型实现
02 基础知识数据类型:8 种基本类型,对应 8 种包装类型,通过 xxxValue 和 valueOf 自动拆箱和装箱
缓存池:
基本类型:除了 long,float 和 double,其它类型都有一字节的缓存池
String:字面量创建会先从常量池获取,没有的话再创建,new 创建不会加入常量池
String:被声明为 final,内部存储的 value 数组也被声明为 final,同时内部没有改变 value 指向的方法,因此保证了 String 类不可变,不可变的好处:
可以缓存 hash 值
String Pool 的需要,如果可变将没有意义
安全性和线程安全
String,StringBuilder,StringBuffer: ...
《Java并发编程实战》笔记
本文总结了《Java并发编程实战》中的关键点,可以用于查阅其中的知识点。
第二章 线程安全性线程安全性:当多个类访问同一个类的时候,这个类始终都能表现出正确的行为,就称该线程是线程安全的。
原子性:
竞态条件(Race Condition):当某个计算的正确性取决于多个线程的交替执行时序时,那么就会发生竞态条件。比如懒汉式单例模式中的 getInstance 方法,基于先检查后执行,由于需要检查 instance 是否为 null,再判断是否需要实例化,此时就存在竞态条件。
复合操作:指的是将一系列的操作合并成一个,使其满足原子性,比如 AtomicLong 里面的 incrementAndGet 方法。
加锁机制:
内置锁:使用关键字 synchronized 实现同步锁,修饰方法的时候锁就是方法调用所在的对象,静态的 synchronized 方法以 Class 对象为锁。
123synchronized (lock) { // 访问或者修改由锁保护的共享对象}
重入:当某个线程请求一个由其他线程持有的锁的时候,发出请求的线程会阻塞。但是如果一个线 ...
《Effective Java》笔记
本文是《Effective Java》第三版的读书笔记。
第二章 创建和销毁对象
考虑使用静态工厂方法代替构造函数:获取一个类的实例的传统方式是使用类提供的公开构造函数,另外一种方法是类提供公开静态工厂方法,用于返回实例。使用静态工厂方法优点:
静态工厂方法有确切名称,便于阅读
静态工厂方法不需要在每次调用时创建新对象
可以通过静态工厂方法获取返回类型的任何子类的对象,提供灵活性
返回对象的类可以随调用的不同而变化,作为输入参数的函数,声明的返回类型的任何子类型都是允许的
当编写包含方法的类时,返回对象的类不需要存在,如JDBC
静态工厂方法缺点:
没有公共或受保护构造函数的类不能被子类化
程序员很难找到它们,下面是一些静态工厂方法的常用名称:
from:一种类型转换方法,接收单个参数并且返回相应实例
of:一个聚合方法,接受多个参数返回一个实例
valueOf:替代from和of但是更加冗长的方法
instance或getInstance:返回一个实例,该实例由参数描述,但具有不同的值(可能会缓存)
create或newInstance:该方法保证每个调用都返回一个新实例
...
深入理解JAVA虚拟机笔记
本文主要整理由周志明编写的《深入理解Java虚拟机》第三版书籍的整理笔记。
第二章 Java内存区域与内存溢出异常运行时数据区域:
程序计数器:通过改变其值来获取下一条需要执行的字节码指令。
虚拟机栈:每个方法执行的时候会创建一个栈帧,用于存储局部变量,方法出口等信息。
本地方法栈:同虚拟机栈,只不过本地方法栈是为本地方法服务的。
堆:几乎所有的对象实例都会在这里面分配。
方法区:用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。
运行时常量池:是方法区的一部分,常量池表,Class 文件中描述信息会放在此处。
直接内存:在JDK 1.4中新加入了NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。
对象的创建:当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个 ...
设计模式
设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。本文介绍设计模式。
设计模式简介设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
GoF:四位作者合称,他们提出的设计模式主要基于以下面向对象设计原则:
对接口编程而不是对实现编程。
优先使用对象组合而不是继承。
设计模式的用途:是开发人员的共同平台,代表着最佳的实践。
设计模式的类型:创建型模式,结构型模式,行为型模式。另外将介绍 J2EE 模式:
创建型模式:这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
工厂模式(Factory Pattern)
抽象工厂模式(Abstract Factory Pattern)
单例模式(Singleton Pattern)
建造者模式(Builder Pattern)
原型模式( ...
OnJava8笔记
本文主要整理了 OnJava8 的阅读笔记。
第三章 万物皆对象对象操纵:在 Java 中程序员实际操作的是对象的引用,方法参数中传递的也只是对象的引用。
对象创建:new。
数据存储:
寄存器:Java 中不存在该方式。
栈内存:存放一些 Java 数据,比如对象的引用。
堆内存:Java 对象都存于其中。
常量内存:程序代码中,不会改变。
非 RAM 存储:序列化对象(用于传送)和持久化对象(用于恢复)。
基本类型的存储:不是通过 new 创建,变量直接存储值。有 boolean,byte,short,char,int,float,long,double,void。boolean 类型的大小没有明确规定。
高精度数值:BigInteger 和 BigDecimal。
数组的存储:当创建对象数组的时候,实际上是对象引用的数组,初始化为 null。
代码注释:/* ... */ 和 //。
对象清理:
作用域:{} 决定,不允许父作用域和子作用域声明相同的变量。
对象作用域:使用 new 关键字创建的 Java 对象生命周期超出作用域。
类的 ...