Java核心技术卷1基础知识(第一部分)
目录
第一章:Java程序设计概述
1、Java程序设计平台
2、Java“白皮书”的关键术语
3、Java applet与Internet
4、Java发展简史
5、关于Java常见的误解
第二章:JAVA程序设计环境
1、安装JAVA开发工具包
2、使用命令行工具
3、使用集成开发环境
4、运行图形化应用程序
5、构建并运行applet
第三章:JAVA的基本程序设计结构
1、注释
2、数据类型
3、变量
4、运算符
5、字符串
6、输入输出
7、控制流程
8、大数值
9、数组
第四章:对象和类
1、面向对象程序概述
2、使用预定义类
3、用户自定义类
4、静态域和静态方法
5、方法参数
6、对象构造
7、包
8、类路径
9、文档注释
10、类设计技巧
第五章:继承
1、类、超类和子类
2、Object:所有类的超类
3、泛型数组列表
4、对象包装器与自动装箱
5、参数数量可变的方法
6、枚举类
7、反射
8、继承的设计技巧
第六章:接口、Lambda表达式与内部类
1、接口
2、接口实例
3、lambda表达式
4、内部类
5、代理
第七章:异常、断言和日志
1、处理错误
2、捕获异常
3、使用异常机制的技巧
4、使用断言
5、记录日志
6、调试技巧
第八章:泛型程序设计
1、为什么要使用泛型程序设计
2、定义简单泛型类
3、泛型方法
4、类型变量的限定
5、泛型代码和虚拟机
6、约束和局限性
7、泛型类型的继承规则
8、通配符类型
9、反射和泛型
第九章:集合
1、JAVA集合框架
2、具体的集合
3、映射
4、视图与包装器
5、算法
6、遗留的集合
第十章:并发
1、什么是线程
2、中断线程
3、线程状态
4、线程属性
5、同步
6、阻塞队列
7、线程安全的集合
8、Callable与Future
9、执行器
10、同步器
第一部分:Java介绍
Java“白皮书”的关键术语
简单性
可移植性
面向对象
解释型
分布式
高性能
健壮性
安全性
动态性体系结构中立
第二部分:JAVA的基本程序设计结构
数据类型
整形
int:4字节 short:2字节 long:8字节 byte:1字节
浮点数
float:4字节 double:8字节
字符串:
字符串是UINICODE的序列。
子串是String类的substring方法从较大字符串提取出来的子串。
字符串拼接允许用"+"号进行拼接。
String类没有提供用于修改字串的方法,所以Java中把String类对象称为不可变字符串
检测字符串是否相等在Java中可以用equals方法检测两个字符串是否相等。要想检测两个字符串是否相等,并且不区分大小写,可以使用equalsIgnoreCase方法。
空串和null串
空串是长度为0的字符串,空串是一个Java对象,有自己的串长度(0)和内容(空),String类可以存放一个特殊的值,名为null,表示目前没有任何对象与该变量关联。
String API
汇总一些使用频率非常高的方法
• char
charAt ( int index )
返回给定位置的代码单元,除非对底层的代码单元感兴趣 ,否则不需要调用这个方法。
• int codePointAt ( int Index ) 5.0
返回从给定位置开始的码点
• int offsetByCodePoints ( int startlndex , int cpCount ) 5.0
返回从 startlndex 代码点开始, 位移 cpCount 后的码点索引 。
• int compareTo ( String other )
按照字典顺序, 如果字符串位于 other 之前 , 返回一个负数 ; 如果字符串位于other 之后, 返回一个正数 ; 如果两个字符串相等 , 返回0。
•Int Stream codePoints ( ) 8
将这个字符串的码点作为一个流返回。 调用 toArray 将它们放在一个数组中 。
• new String ( int [ ] codePoints , int offset , int count ) 5.0
用数组中从 offset 开始的 count 个码点构造一个字符串。
•boolean equals ( 0 bject other )
如果字符串与 other 相等 , 返回 true。
•boolean equalsIgnoreCase ( String other )
如果字符串与 other 相等 ( 忽略大小写 ), 返回 tme 。
•boolean startsWith ( String prefix )
•boolean endsWith ( String suffix )
如果字符串以 suffix 开头或结尾 , 则返回 true。
•int indexOf ( String str )
•int indexOf ( String str , int fromlndex )
•int indexOf ( int cp )
•int indexOf ( int cp , int fromlndex )
返回与字符串 str 或代码点 cp 匹配的第一个子串的开始位置。 这个位置从索引0 或fromlndex 开始计算 。 如果在原始串中不存在 str , 返回 - 1。
•int 1 astIndexOf ( String str )
•Int 1 astIndexOf ( Stri ng str , int fromlndex )
•int lastindexOf ( int cp )
•int 1 astindexOf ( int cp , int fromlndex )
返回与字符串 str 或代码点 cp 匹配的最后一个子串的开始位置 。这个位置从原始串尾端或 fromlndex 开始计算。
•int 1 ength ( )
返回字符串的长度 。
•int codePointCount ( int startlndex , int endlndex ) 5.0
返回 startlndex 和 endludex - l 之间的代码点数量。 没有配成对的代用字符将计入代码点 。
•String replace ( CharSequence oldString , CharSequence newString )返回一个新字符串。 这个字符串用 newString代替原始字符串中所有的 oldString。 可以用 String 或StringBuilder 对象作为 CharSequence 参数 。
•String substring ( int beginlndex )
參 String substring ( int beginlndex , int endlndex )返回一个新字符串。 这个字符串包含原始字符串中从beginlndex 到串尾或 endlndex - l的所有代码单元。
•String toLowerCase ( )
參 String toUpperCase ( )返回一个新字符串 。 这个字符串将原始字符串中的大写字母改为小写 , 或者将原始字符串中的所有小写字母改成了大写字母。
•String trim ( )
返回一个新字符串。 这个字符串将删除了原始字符串头部和尾部的空格 。
•String join ( CharSequence delimiter , CharSequence . .. elements ) 8
返回一个新字符串 , 用给定的定界符连接所有元素 。
构建字符串
使用String每次连接字符串都会构建一个新的String对象,既耗时又浪费空间,使用StringBuilder类可以避免这类问题的发生。
下面的API包含了StringBuilder的重要方法:
•StringBuilder ()
构造一个空的字符串构建器。
•int length ( )
返回构建器或缓冲器中的代码单元数量。
• Stri ngBui 1 derappencl ( Stri ng str )
追加一个字符串并返回 this。
•StringBui 1 der append ( char c )
追加一个代码单元并返回 this。
•StringBui 1 der appendCodePoint ( int cp )
追加一个代码点, 并将其转换为一个或两个代码单元并返回 this。
•void setCharAt ( int i , char c )
将第 i 个代码单元设置为 c。
•StringBui1der insert ( int offset , String str )
在 offset 位置插入一个字符串并返回 this。
• StringBuilder insert ( int offset , Char c )
在 offset 位置插入一个代码单元并返回 this。
•StringBui1der delete ( int startindex , int endlndex )
删除偏移量从 startindex 到 - endlndex - 1 的代码单元并返回 this。
•String toString ( )
返回一个与构建器或缓冲器内容相同的字符串
输入输出
读取输入
构造Scanner对象
Scanner sc = new Scanner(System.in)
Scanner类的方法
•Scanner ( InputStream in )
用给定的输人流创建一个 Scanner 对象。
•String nextLine ( )
读取输入的下一行内容。
•String next ( )
读取输入的下一个单词 ( 以空格作为分隔符 )。
•int nextlnt ( )
•double nextDouble ( )
读取并转换下一个表示整数或浮点数的字符序列 。
•boolean hasNext ( )
检测输人中是否还有其他单词。
•boolean hasNextInt ( )
•boolean hasNextDouble ( )
检测是否还有表示整数或浮点数的下一个字符序列 。
文件输入和输出
要想对文件进行读取,就需要一个用file对象构建一个Scanner对象
Scanner in = new Scanner(paths.get("myfile.txt"),"UTF-8");
如果文件名中包含反斜杠符号,就需要记住在每一个反斜杠之前再加一个反斜杠:"c:\mydirectory\myfile.txt"
。
控制流程
与任何语言一样,Java使用条件语句和循环语句确定控制流程。
条件语句
条件语句格式:
第一种,if...else
if(){
}
else{
}
第二种,if...else if...else
if(){
}
else if(){
}
else(){
}
第三种,多重if
if(){
}
if(){
}
循环
while循环
while(true){
}
do...while循环
do{
}while();
for循环
for(int i=0;i<10;i++){
}
多重选择:switch语句
switch(num){
case 1:
break;
case 2:
break;
default:
break;
}
中断流程控制语句
break:用于退出循环语句。
continue:用于越过当前循环体的剩余部分,回到首部。
数组
数组是一种数据结构,用来存储同一类型值得集合,通过一个整形下标可以访问数组中得每一个值。
声明数组:
int[] a
创建并初始化数组:
int[] a = new int[100]
注意:一旦创建了数组,就不能再改变它的大小(尽管可以改变每一个数组元素)如果经常需要在运行过程中扩展数组的大小,就应该使用另一种数据结构—数组列表( array list )。
for each循环
Java有一种功能很强的循环结构,可以用来依次处理数组中的每个元素(其他类型的元素集合亦可)而不必为指定下标值而分心 。
这种增强的 for 循环的语句格式为 :
for ( variable : collection ) statement
例如:
for(int element:a)
System.out.println(elememt);
注释 :foreach循环语句的循环变量将会遍历数组中的每个元素,而不需要使用下标值 。
如果需要处理一个集合中的所有元素,for each循环语句对传统循环语句所进行的改进更是叫人称赞不已。 然而,在很多场合下,还是需要使用传统的for循环,例如,如果不希望遍历集合中的每个元素 ,或者在循环内部需要使用下标值等。
数组初始化和匿名数组
在Java中,提供了一种创建数组对象并同时赋予初始值的简化书写形式。下面是一例子:
int[] smallPrimes = {2 ,3 ,5 ,7 ,11 ,13 };
使用这种语法形式可以在不创建新变量的情况下重新初始化一个数组 。例如 :
smallPrimes = new int[] {17 ,19 ,23 ,29 ,31 ,37 };
数组拷贝
一个数组的所有值拷贝到一个新的数组中去,就要使用 Arrays 类的 copyOf 方法 :
int[] copiedLuckyNumbers = Arrays.copyOf ( luckyNumbers , luckyNumbers.length );
数组排序
要想对数值型数组进行排序,可以使用 Arrays 类中的 sort 方法 :
int[] a = new int[10000];
Arrays.sort (a);
多维数组
多维数组将使用多个下标访问数组元素,它适用于表示表格或更加复杂的排列形式。
在 Java 中, 声明一个二维数组相当简单 。 例如 :
double[][]balances;
与一维数组一样,在调用 new 对多维数组进行初始化之前不能使用它。 在这里可以这样初始化 :
balances = new double[NYEARS][NRATES];
注释:for each循环语句不能自动处理二维数组的每一个元素。它是按照行,也就是一维教组处理的要想访问二维教组 a 的所有元素,需要使用两个嵌套的循环,如下所示 :
for ( doubleG row : a )
for ( double value : row )