java核心技术系列

java核心技术(卷I)[概述|结构|对象|继承] 精华版

java核心技术(卷I)[接口|lambda|内部类|异常|泛型] 精华版

java核心技术(卷I)[集合|并发] 精化版

 

java核心技术 卷I
._ 概述
. ._ 白皮书
. . ._ 简单性
. . ._ 面向对象
. . ._ 分布式
. . . ._ 用于处理HTTP、ftp之类的TCP协议
. . . ._ 能够通过URL打开和访问网络上的对象
. . ._ 健壮性
. . . ._ 早期问题检测
. . . ._ 后期动态检测
. . ._ 安全性
. . . ._ 不可信任的代码在沙箱中执行
. . ._ 可移植性
. . . ._ 可移植性接口
. . ._ 解释性
. . ._ 高性能
. . . ._ 即时编译器
. . ._ 多线程
. . ._ 动态性
._ 程序设计结构
. ._ 注释
. . ._ //
. . ._ /*    */
. . ._ /**   */
. ._ 数据类型
. . ._ 整型
. . . ._ int
. . . . ._ 4字节
. . . ._ short
. . . . ._ 2字节
. . . ._ long
. . . . ._ 8字节
. . . ._ byte
. . . . ._ 1字节
. . ._ 浮点类型
. . . ._ float
. . . . ._ 4字节
. . . ._ double
. . . . ._ 8字节
. . ._ char类型
. . . ._ 转义序列
. . . . ._ \b 退格
. . . . ._ \t 制表
. . . . ._ \n 换行
. . . . ._ \r 回车
. . . . ._ \" 双引号
. . . . ._ \'  单引号
. . . . ._ \\  反斜杠
. . ._ Unicode和char类型
. . ._ boolean类型
. ._ 变量
. ._ 运算符
. . ._ +-*/%
. . ._ 位运算符 & | ^ ~
. ._ 字符串
. . ._ String是不可变字符串
. . ._ 字符串通过共享存放在公共的存储池中,字符串变量指向存储池中相应的位置
. . ._ api
. . . ._ charAt
. . . ._ codePointAt
. . . ._ offsetByCodePoints
. . . ._ compareTo
. . . ._ equals
. . . ._ equalsIgnoreCase
. . . ._ startsWith
. . . ._ endsWith
. . . ._ indexOf
. . . ._ lastIndexOf
. . . ._ length
. . . ._ codePointCount
. . . ._ replace
. . . ._ subString
. . . ._ toLowerCase
. . . ._ toUpperCase
. . . ._ trim
. . . ._ join
. . ._ StringBuilder
. . . ._ length
. . . ._ append
. . . ._ setCharAt
. . . ._ insert
. . . ._ delete
. . . ._ toString
. ._ 输入输出
. . ._ 输入
. . . ._ Scanner
. . . . ._ nextLine
. . . . ._ next
. . . . ._ nextInt
. . . . ._ nextDouble
. . . . ._ hasNext
. . . . ._ hasNextInt
. . . . ._ hasNextDouble
. . . ._ System
. . . . ._ console
. . . ._ Console
. . . . ._ readPassword
. . . . ._ readLine
. . ._ 格式化
. . . ._ 转换符
. . . . ._ d 十进制整数
. . . . ._ x 十六进制整数
. . . . ._ o 八进制整数
. . . . ._ f 定点浮点数
. . . . ._ e 指数浮点数
. . . . ._ g 通用浮点数
. . . . ._ a 十六进制浮点数
. . . . ._ s 字符串
. . . . ._ c 字符
. . . . ._ b 布尔
. . . . ._ h 散列码
. . . . ._ tx 或 TX 日期时间
. . . . ._ %  百分号
. . . . ._ n 与平台又换的行分隔符
. . . ._ 标志
. . . . ._ + 打印整数和负数的符号
. . . . ._ 空格  在正数之前添加空格
. . . . ._ 0 数字前面补0
. . . . ._ - 左对齐
. . . . ._ ( 将负数括在括号内
. . . . ._ , 添加分组分隔符
. . . . ._ #(对于f格式) 包含小数点
. . . . ._ #(对于x或0格式) 添加前缀0x或0
. . . . ._ $ 给定格式化的参数索引
. . . . ._ < 格式化前面说明的数值
. . . ._ Formattable接口
. . . ._ 日期和时间格式化
. . . . ._ c 完整的日期和时间
. . . . ._ F ISO 8601日期
. . . . ._ D 美国格式的日期
. . . . ._ T 24小时时间
. . . . ._ r 12小时时间
. . . . ._ R 24小时时间没有秒
. . . . ._ Y 4位整数的年
. . . . ._ y 年的后两位数字
. . . . ._ C 年的前两位数字
. . . . ._ B 月的完整拼写
. . . . ._ b或h 月的缩写
. . . . ._ m 两位数字的月
. . . . ._ d 两位数字的日
. . . . ._ e 两位数字的日
. . . . ._ A 星期几的完整拼写
. . . . ._ a 星期几的缩写
. . . . ._ j 三位数的年中的日子
. . . . ._ H 两位数字的小时
. . . . ._ k 两位数字的小时,前不补0
. . . . ._ I 两位数字的小时,12小时制
. . . . ._ l 两位数字的小时,前不补0,12小时制
. . . . ._ M 两位数字的分钟
. . . . ._ S 两位数字的秒
. . . . ._ L 三位数字的毫秒
. . . . ._ N 9位数字的毫微秒
. . . . ._ p 上午下午的标志
. . . . ._ z 从GMT起,RFC822数字位移
. . . . ._ Z 时区
. . . . ._ s 从格林威治时间1970-01-01 00:00:00起的秒数
. . . . ._ Q 从格林威治时间1970-01-01 00:00:00起的毫秒数
. . . . ._ 示例:System.out.printf("%1$s %2$tB %2$te %2$tY", "Due Date:", new Date());
. . . . . ._ %1$s 第1个参数以字符串标识,$作为分隔符
. . . . . ._ %2$tB 第2个参数,转换成月完整的拼写,$作为分隔符
. . . ._ 
. ._ 控制流程
. . ._ 块作用域
. . . ._ {...}
. . ._ 条件语句
. . . ._ if() {} else {}
. . ._ 循环
. . . ._ while
. . . ._ for
. . ._ 多重选择
. . . ._ switch
. ._ 大数值
. . ._ BigInteger
. . . ._ add
. . . ._ subtract
. . . ._ mutiply
. . . ._ divide
. . . ._ mod
. . . ._ compartTo
. . . ._ valueOf
. . ._ BigDecimal
. . . ._ add
. . . ._ subtract
. . . ._ mutiply
. . . ._ divide
. . . ._ compartTo
. . . ._ valueOf
. ._ 数组
. . ._ 数组拷贝 Array.copyOf
. . ._ 数组排序  Array.sort
. . ._ Arrays
. . . ._ copyOf
. . . ._ sort
. . . ._ copyOfRange
. . . ._ toString
. . . ._ binarySearch
. . . ._ fill
. . . ._ equals
. . ._ 多维数组
. . ._ 不规则数组
._ 对象与类
. ._ 类
. . . 封装:
. . . ._ 是与对象有关的一个重要的概念,从形式上看,封装不过是将数据和行为组合在一个包中,并对对象的使用隐藏的数据的实现方式。
. . . ._ 关键在于绝对不能让类中的方法直接访问其他类的实例域。
. . . ._ 封装给予对象黑盒体征,是提高重用性和可靠性的关键
. . ._ 实例域
. . . ._ 实例域的集合构成了对象的当前状态
. . ._ 方法
. ._ 对象
. . ._ 对象的行为
. . ._ 对象的状态
. . ._ 对象的标识
. ._ 类之间的关系
. . ._ 依赖 uses-a
. . ._ 聚合 has-a
. . ._ 继承 is-a
. ._ LocalDate
. . ._ 表示时间点的类 Date
. . ._ 表示日历表示法的类 LocalDate
. ._ 自定义类
. . ._ 隐式参数
. . . ._ 方法名前的对象,this
. . ._ 访问权限
. . ._ final实例域
. . . ._ 构建时必须初始化
. . . ._ 后续不能被修改
. ._ 静态域与静态方法
. . ._ 静态域
. . . ._ 每个类中只有一个
. . ._ 静态常量
. . ._ 静态方法
. . . ._ 一个方法不需要访问对象状态,参数都是通过显示参数提供
. . . ._ 一个方法只需要访问类的静态域
. . . ._ 另一个常见用途:工厂方法
. . . ._ main方法
. . . . ._ 每个类可以有一个main方法
. ._ 方法参数
. . ._ java程序总是按值调用
. . . ._ 方法得到的所有的值是一个拷贝
. . . ._ 方法不能修改传递给它的任何参数变量的内容。
. . ._ 使用情况
. . . ._ 一个方法不能修改一个基本数据类型的参数
. . . ._ 一个方法可以改变对象参数的状态
. . . ._ 一个方法不能让对象参数引用另一个对象
. ._ 对象构造
. . ._ 重载
. . . ._ 多个方法有相同的名字、不同的参数
. . . ._ 允许重载任何方法
. . . ._ 编译器通过方法的参数进行匹配来挑选出相应的方法
. . ._ 默认域初始化
. . . ._ 数值为0
. . . ._ 布尔为false
. . . ._ 对象引用为null
. . ._ 无参构造器
. . . ._ 如果编写一个类时没有编写构造器,系统会提供一个无参构造器
. . . ._ 如果类中提供了至少一个构造器,但没有提供无参构造器,则在构造对象时如果没有提供参数就会被视为非法
. . . ._ 仅当类没有提供任何构造器的时候,系统才提供一个默认的无参构造器
. . ._ 显式域初始化
. . ._ 初始化块
. . . . 在一个类的声明中,可以包含多个代码块,只要构造对象,这些块就会被执行 
. . . . {
. . . .  ...
. . . . }
. . ._ 静态初始化块
. . . ._ 如果静态域初始化的代码比较复杂,可以使用静态初始化块  static {...}
. . . ._ 在类第一次加载的时候,将会进行静态域的初始化,所有静态初始化语句和静态初始化块都将按照定义的顺序执行
. . ._ 调用构造器步骤
. . . ._ 1. 所有数据域被初始化为默认值
. . . ._ 2. 按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块。
. . . ._ 3. 如果构造器的第一行调用了第二个构造器,则执行第二个构造器的主体。
. . . ._ 4. 执行这个构造器的主体。
. . ._ finalize
. . . ._ 可以为任何一个类添加一个finalize方法,该方法将在垃圾回收器清除对象前调用
. . . ._ 不建议依赖使用此方法,因为不确定该方法何时会被调用
. ._ 对象与包
. . ._ 使用包的原因
. . . ._ 使用包的主要原因是确保类名的唯一性
. . . ._ sun公司建议将公司的因特网名以逆序的形式作为包名
. . ._ 类的导入
. . . ._ 一个类可以使用所属包中的所有类,以及其他包的共有类
. . . ._ import语句导入一个类
. . ._ 静态导入
. . . ._ import语句还可以导入静态方法和静态域
. . ._ 作用域
. . . ._ 如果没有指定public或private,这个部分可以被同一个包中的所有方法访问
. ._ 类路径
. . ._ 包括
. . . ._ 基目录 /home/user/classdir 或 c:\classes
. . . ._ 当前目录 .
. . . ._ jar文件/home/user/archives/archive.jar 或 c:\archives\archive.jar
. . ._ 编译器
. . . ._ javac编译器总是在当前目录中查找文件
. . . ._ java虚拟机仅在类路径中有.的目录的时候才查看当前目录
. . . ._ 编译器除了定位类文件,还要查看源文件是否比类文件新,如果是,那么会自动重新编译
. . . ._ 一个源文件只能包含一个公有类,并且文件名必须与公有类匹配
. . ._ 设置类路径
. . . ._ -classpath
. . . ._ 环境变量 CLASSPATH
. ._ 文档注释
. . ._ javadoc
. . . ._ 包
. . . ._ 公有类与接口
. . . ._ 共有的受保护的构造器及方法
. . . ._ 共有的受保护的域
. . ._ 类注释
. . ._ 方法注释
. . . ._ @param
. . . ._ @return
. . . ._ @throws
. . ._ 域注释
. . ._ 通用注释
. . . ._ @author 作者
. . . ._ @version 版本
. . . ._ @since 始于,可以引入特性的版本描述
. . . ._ @deprecated 不再使用
. . . ._ @see  增加一个超链接
. . ._ 包注释
. . . ._ 提供一个以package.xml命名的html文件,在标记<body>..</body>之间所有的文本会被抽取出来。
. . . ._ 提供一个以package-info.java命名的java文件,这个文件必须包含一个初始的以/**和*/界定的javadoc注释,跟随在一个包语句之后。
. . ._ 注释的抽取
. . . ._ javadoc -d docDirectory nameOfPackage1 nameOfPackage2 ...
. . . ._ javadoc -d docDirectory *.java
. . . ._ 可以提供自定义的doclet,以便生成想要的任何输出格式
. ._ 类的设计技巧
. . ._ 一定要保证数据私有
. . ._ 一定要对数据初始化
. . ._ 不要在类中使用过多的基本类型
. . ._ 不是所有的域都需要独立的域访问器或域更新器
. . ._ 将职责过多的类分解
. . ._ 类名和方法名要能体现它们的职责
. . ._ 优先使用不可变类
._ 继承
. ._ 类/超类/子类
. . ._ 概述
. . . ._ is-a是继承的明显特征
. . . ._ 关键字extends表示继承
. . . ._ 使用super调用超类的方法和构造器
. . . . ._ 与this不同,super不是对象的引用
. . ._ 覆盖方法
. . . ._ 在子类中可以增加域、增加方法或覆盖方法,但是绝对不能删除继承的任何域或方法
. . ._ 子类构造器
. . . ._ 通过super调用超类的构造器
. . . ._ 如果子类构造器中没有显式调用超类的构造器,则将自动调用超类的默认构造器
. . ._ 多态
. . . ._ 概念
. . . . ._ 一个对象可以指示多种实际类型的现象被称作多态
. . . . ._ 动态绑定:运行时能够自动地选择调用哪个方法
. . . ._ 小贴士
. . . . ._ 子类数组的引用可以转换为超类数组的引用
. . . . ._ 子类方法不能低于超类方法的可见性,如果超类的方法时public,子类的方法一定要声明为public
. . . ._ 调用过程
. . . . ._ 1.编译器查看对象的声明类型和方法名
. . . . ._ 2.编译器查看调用方法时的参数类型
. . . . ._ 3.如果是private方法、static方法、final方法或构造器,那么编译器将可以准确地知道应该调用哪一个方法
. . . . ._ 4.当程序运行,并且采用动态绑定调用方法时,虚拟机一定调用与x所引用的对象的实际类型最合适的那个方法
. . ._ 阻止继承
. . . ._ final类不允许被扩展
. . . ._ final方法不能被子类覆盖
. . ._ 强制类型转换
. . . ._ 仅能在继承层次内进行类型转换
. . . ._ 在将超类转换成子类前,先用instanceof进行检查
. . ._ 抽象类
. . . ._ 小贴士
. . . . ._ 位于上层的类更加通用,甚至更加抽象
. . . . ._ 建议尽量将通用的域和方法放在超类中
. . . . ._ 抽象方法充当占位的角色,具体实现在子类中
. . . . ._ 抽象类不能被实例化
. . ._ 受保护访问
. . . ._ protected访问域
. . . ._ 访问修饰符
. . . . ._ private:仅对本类可见
. . . . ._ public:对所有类可见
. . . . ._ protected:对本包和所有子类可见
. . . . ._ 默然:对本包可见
. ._ Object类
. . ._ Object类是所有类的超类
. . ._ equals:检测一个对象是否等于另一个对象
. . ._ equals方法特性
. . . ._ 自反性:对于任何非空对象x,x.equals(x)应该返回true
. . . ._ 对称性:对于任何引用x和y,当且仅当y.equals(x)返回true,x.equals(y)也应该返回true
. . . ._ 传递性:对任何引用x,y,z,如果x.equals(y)返回true,y.equas(z)返回true,x.quals(z)也应该返回true
. . . ._ 一致性:如果x,y引用对象没有发生变化,反复调用x.equals(y)应该返回同样的结果
. . . ._ 对任意非空引用x, x.equals(null)应该返回false
. . ._ 编写equals方法的建议
. . . ._ 1.显式参数命名为otherObject,稍后需要将其转换成为另一个叫做other的变量
. . . . 2.检测this和otherObject是否引用同一个对象。
. . . . if (this == otherObject) return true;
. . . ._ 3.检测otherObject是否为null,如果为null,返回false
. . . . 4.比较this与otherObject是否属于同一各类
. . . . if (getClass() != otherObject.getClass()) return false;
. . . . 5.将otherObject转换为相应的类类型变量
. . . . ClassName other = (ClassName)otherObject;
. . . ._ 6.对需要比较的域进行比较
. . ._ hashCode方法
. . . ._ 散列码是由对象导出的一个整数值,是没有规律的
. . . ._ Object类的hashCode方法返回对象的存储地址
. . . ._ 如果重新定义了equals方法,就必须重新定义hashCode方法
. . . ._ hashCode应该返回一个整数值,并合理地组合实例域的散列码,以便能够让各个不同的对象产生的散列码尽量均匀
. . . ._ equals与hashCode的定义必须一致,如果x.equals(y)返回true,那么x.hashCode()就必须与y.hashCode()具有相同的值
. . ._ toString方法
. . . ._ 建议为每个自定义的类增加toString方法
. ._ 泛型数组列表
. . ._ ArrayList
. . . ._ 采用类型参数的泛型类
. . . ._ 数组列表管理着对象引用的一个内部数组。
. . . ._ 为了插入一个新元素,位于插入点之后的所有元素都要向后移动一个位置。
. . . ._ 对数组实时插入和删除元素的操作其效率比较低
. . . ._ 如果调用add且内部数组已经满了,数组列表就自动地创建一个更大的数组,并将所有的对象从较小的数组中拷贝到较大的数组中
. . . ._ 一旦能够确认数组列表的大小不再发生变化,就可以调用trimToSize方法,该方法将存储区域的大小调整为当前元素数量所需要的存储空间数目,垃圾回收器将回收多余的存储空间。
. . . ._ api
. . . . ._ ArrayList<E>()
. . . . ._ ArrayList<E>(int initialCapacity)
. . . . ._ boolean add(E obj)
. . . . ._ int size()
. . . . ._ void ensureCapacity(int capacity)
. . . . ._ void trimToSize
. . . . ._ void set(int index, E obj)
. . . . ._ E get(int index)
. . . . ._ void add(int index, E obj)
. . . . ._ E remove(int index)
. ._ 对象包装器
. . ._ 包装器类:Integer、Long、Float、Double、Short、Byte、Character、Void、Boolean
. . ._ 装箱拆箱
. . . . 自动装箱:将原始类型赋值给包装器类型,将会自动转换。 Integer intBox= 3;
. . . . 自动拆箱:将一个包装器类型赋值给一个原始类型时,将会自动拆箱。 int n = list.get(i)
. . . ._ 要求boolean、byte、char<=127,介于-128~127之间的short和int被包装到固定的对象中
. . . ._ 装箱和拆箱是编译器认可的,而不是虚拟机
. . ._ api
. . . ._ Integer
. . . . ._ int intValue()
. . . . ._ static String toString(int i)
. . . . ._ static String toString(int i, int radix)
. . . . ._ static int parseInt(String s)
. . . . ._ static int parseInt(String s, int radix)
. . . . ._ static Integer valueOf(String s)
. . . . ._ static Integer valueOf(String s, int radix)
. . . ._ NumberFormat
. . . . ._ Number parse(String s)
. ._ 参数数量可变的方法
. . . public PrintStream printf(String fmt, Object ... args) {
. . .    return format(fmt, args);
. . . }
. . ._ 省略号...是java代码的一部分,表明这个方法可以接收任意数量的对象。实际上,printf的第二个参数是Object[]数组,Object...和Object[]完全一样
. . ._ 编译器需要对printf的每次调用进行转换,以便将参数绑定到数组上,并在必要的时候进行自动装箱。
. ._ 枚举类
. . ._ public enum Size{SMALL, MEDIUM, LARGE, EXTRA_LARGE};
. . ._ 比较两个枚举类型的值时,要用==,而不能用equals
. . ._ api
. . . ._ static Enum valueOf(Class enumClass, String name)
. . . ._ String toString()
. . . ._ int ordinal()  返回枚举常量在enum声明中的位置
. . . ._ int compareTo(E other)
. ._ 反射
. . ._ 概念
. . . ._ 能够分析类能力的程序称为反射
. . ._ 用途
. . . ._ 在运行时分析类的能力
. . . ._ 在运行时查看对象
. . . ._ 实现通用的数组操作代码
. . . ._ 利用Method对象
. . ._ Class类
. . . . Class cl = obj.getClass();
. . . . Class cl = Class.forName(className);
. . . . Class类实际上是个泛型类
. . . ._ 在系统启动时,包含main方法的类被加载,它会加载所需要的类,这些被加载的类又要加载它们需要的类
. . . ._ newInstance()方法调用默认的构造器(无参构造器)初始化创建的对象
. . . ._ api
. . . . ._ Class
. . . . . ._ static Class forName(String className)
. . . . . ._ Object newInstance()
. . . . . ._ Field[] getFields()  获取共有域
. . . . . ._ Field[] getDeclareFields()  获取全部域
. . . . . ._ Method[] getMethods()  获取共有方法
. . . . . ._ Method[] getDeclareMethods()  获取全部方法
. . . . . ._ Constructor[] getConstructors() 获取共有构造器
. . . . . ._ Constructor[] getDeclareConstructors() 获取全部构造器
. . . . ._ Constructor
. . . . . ._ Object newInstance(Object[] args)
. . . . . ._ Class getDeclareClass()
. . . . . ._ Class[] getExceptionTypes()
. . . . . ._ int getModifiers()
. . . . . ._ String getName()
. . . . . ._ Class[] getParameterTypes()
. . . . . ._ Class getReturnType()
. . . . ._ Field
. . . . . ._ Object get(Object obj)
. . . . . ._ void set(Object obj, Object newValue)
. . . . ._ Method
. . . . . ._ public Object invoke(Object implicitParameter, Object[] explicitParameters)
. . . . ._ AccessibleObject
. . . . . ._ void setAccessible(boolean flag)
. . . . . ._ boolean isAccessible()
. . . . . ._ static void setAccessible(AccessibleObject[] array, boolean flag)
. . . . ._ Modifier
. . . . . ._ static String toString(int modifiers)
. . . . . ._ static boolean isAbstract(int modifiers)
. . . . . ._ static boolean isFinal(int modifiers)
. . . . . ._ static boolean isIinterface(int modifiers)
. . . . . ._ static boolean isNative(int modifiers)
. . . . . ._ static boolean isPrivate(int modifiers)
. . . . . ._ static boolean isProtected(int modifiers)
. . . . . ._ static boolean isPublic(int modifiers)
. . . . . ._ static boolean isStatic(int modifiers)
. . . . . ._ static boolean isStrict(int modifiers)
. . . . . ._ static boolean isSynchronized(int modifiers)
. . . . . ._ static boolean isVolatile(int modifiers)
. . . . ._ Array
. . . . . ._ static Object get(Object array, int index)
. . . . . ._ static XXX getXxx(Object array, int index)
. . . . . ._ static void set(Object array, int index, Object newValue)
. . . . . ._ static setXxx(Object array, int index, xxx newVAlue)
. . . . . ._ static init getLength(Object array)
. . . . . ._ static Object newInstance(Class componentType, int length)
. . . . . ._ static Object newInstance(Class componentType, int[] lengths)
. ._ 继承设计技巧
. . ._ 将共有操作和域放在超类
. . ._ 不要使用受保护的域
. . . ._ 子类集合时无限制的,任何一个人都能够由某各类派生一个子类,并编写代码以直接访问protected的实例域,从而破坏了封装性。
. . . ._ 在java程序设计语言中,在同一个包中的所有类都可以访问protected域,而不管它是否为这个类的子类。
. . ._ 使用继承实现is-a关系
. . ._ 除非所有继承方法都有意义,否则不要使用继承
. . ._ 在覆盖方法时,不要改变预期的行为
. . ._ 使用多态,而非类型信息
. . ._ 不要过多的使用反射
. . . ._ 反射是很脆弱的,编译器很难帮助人们发现程序中的错误

 

java核心技能训练的目的及意义 java核心技术 卷i_数组