-
%
Java
学习笔记
目
录
一、
Java
技术基础
...................
........................................
编程语言
.
......................................
...........................
Java
的特点
< br>............................................... ...............
Java
开发环境
........
..................................................
..
Java
开发环境配置
......
..................................................
(
Linux
命令与相关知识
....
.................................................
Eclipse/Myeclipse
程序结构
.............................................
..
二、
Java
语言基础
...................
........................................
基础语言要素
.
....................................
.........................
八种基本数据类型
.
..............................................
...........
常量和变量
.
.................................................
..............
运算符与表达式
.
< br>............................................... ............
编程风格
.
..................................................
...............
:
流程控制语句
.
................................................ .............
数组
..................................................
....................
字符串
..........................................
..........................
方法三要素
.
.................................................
..............
插入排序
.
..................................................
...............
冒泡排序
.
..................................................
...............
冒泡排序:轻气泡上浮的方式
.
p>
.........................................
......
二分法查找
.
..............................
.................................
~
Java
系统
API
方法调用
.............................................
.......
二进制基础
p>
.
.............................
..................................
Java
基础其他注意事项
..........................................
..........
三、
面向对象
............
..................................................
..
类
...........
..................................................
..........
对象
...
..................................................
.................
包
..........................
.............................................
方法及其调用
.
....................................
.........................
。
引用
..
..................................................
..................
访问控制(封装)
.
..............................................
...........
构造器
.
..................................................
.................
super()<
/p>
、
super
.和
this()
、
this
.
.
..................
.....................
重载和重写
.
.................................................
..............
继承
.................................................
.....................
static
.
....................
..............................................
final.....................
...............................................
(
多态<
/p>
........................................
..............................
抽象类
................................
....................................
接口
..
..................................................
..................
内部类
............................................ ........................
匿名
类
......................................
..............................
二维数组和对象数组
.
.............................................
..........
其他注意事项
.
................................................ .............
四、
Java SE
核心
I
......
..................................................
...
;
Object
类
< br>............................................... .................
String
类
.........
..................................................
.....
StringUtils
类
....
..................................................
.....
StringBuilder
类
..
..................................................
.....
正则表达式
.
...............................
................................
Date
类
.................................................
.................
Calendar
类
.......
..................................................
.....
SimpleDateFormat
类
.................................................
.....
^
DateFormat
类
...........................................
.................
包装类
.............................................
.......................
BigDecimal
类
.....
..................................................
.....
BigInteger
类
.....
..................................................
.....
Collection
集合框架
..
..................................................
..
List
集合的实现类
p>
ArrayList
和
LinkedLis
t
..................................
Iterator
迭代器
.....
..................................................
...
泛型
..........
..................................................
..........
&
增强型
f
or
循环
.
..................................................
.........
List
高
级-数据结构:
Queue
队列
p>
.
.............................
.............
List
< br>高级-数据结构:
Deque
栈
.
...........................
.................
Set
集合的实现类
HashSet
.
......................................
...........
Map
集合的实现类
HashMap
.
......................................
...........
单例模式和模版方法模式
.
...........................................
........
五、
Java
SE
核心
II
..........
................................................
Java
异常处理机制
......
..................................................
'
File
文件类
.........
..................................................
...
RandomAccessFile
类
.................................................
.....
基本流:
FIS
和
FOS
.
...
..................................................
...
缓冲字节高级流:
BIS<
/p>
和
BOS
.
.
...............................................
基本数据类型高级流:
DIS
和
DOS
.
...
.........................................
字符高级流:
ISR
和
OSW
.
.......
.............................................
缓冲字符高级流:
BR
和
BW
.
.......
...........................................
文件字符高级流:
FR
和
FW
.
.......
...........................................
|
PrintWriter
.
...............
..............................................
对象序列化
.
.....................................
..........................
Thread
线程类及多线程
...
.................................................
Socket
网络编程
......
..................................................
..
线程池
..........
..................................................
........
双缓冲队列
<
/p>
.
............................
...................................
Java
技术基础
编程语言
/
机器语言:
0
1
在硬件直接执行
汇编语言:助记符
高级语言:
(
Java
运行比
C/C++
慢)<
/p>
1
)面向过程的高级语言:程序设计的
基本单位为函数,如:
C/C++
语言。
2
)面向对象的高级语言:程序设计的基本单位为类,如:
Java
、
C#
。
Java
的特点
平台无关性、简单性
、面向对象、健壮性、多线程、自动内存管理。
《
平台无关性:指
< br>Java
语言平台无关,而
Java
的虚拟机却不是,需要下载对应平台
JVM
虚拟机的。
p>
自动内存管理:
对临时存储的数据自动进
行回收,
释放内存。
如:
引用类型的变
量没有
指向时,被回收;程序执行完后,局部变量被回收。
Java
开发环境
Java Developement Kit
——
Java
开发工具包,简称
JDK
,是由
Sun
公司提供的一个
免费的
Java
开发工具,
编程人员和最终用户可以利用这个工具来编译、
< br>运行
Java
程序。
目
前版本有、
、
、
、
p>
、
()
、
()
p>
、
()
。
JDK
结构:
JDK
|--
开发工具(
Tools<
/p>
)命令:
java
、
javac
、
jar
、
rmic ...
|-- JRE
(
Java
基本运行环境)
< br>
|--
系统
A
PI
库,系统类库
…
|
系统带来的标准程序库,标准
API
|-- J VM
java
虚拟机
java
语言的执行环境
Java
开发环境配置
安装完
JDK
之后,不能立刻使用,需要设置环境变量:
1
)设置
PATH
:
D:Java
(指向
JD
K
中
bin
文件夹,有各种编译命令)
。
2
)
p>
CLASSPATH
:告诉
Java
程序去哪里查找第三方和自定义类,如果
.class
文件和类
源文件在同一文件夹内,则不需要配置
cl
asspath
,后续有包,则需要。
A
.
Windows
:在命令行执行
>
set
CLASSPATH=E:workspace1304bin
(临时环境配置)
java
注意事项:
E
:
set classpath
= c:
(不加分号就不找当前路径)
= . c: d:
(先找
classpath<
/p>
,若无,再找当前路径)
C
、
D
两盘有同名
. class
文件,
classpat
h
设置为
D
盘,而命令行窗口
当前盘符为
C
盘,则
J
VM
现找
classpath
路径,后
找当前路径。
B
.
< br>Linux
:在控制台执行
①
设置
CLASSPATH
环境变量,指向
package
所在的目录,一般是项目文件夹中的
bin
目录。
?
②执行
java
(包名必须写)
。
export
CLASSPATH=/home/soft01/workspace/1304/bin
(临时环境配置)
java
java -cp
/home/soft01/workspace/1304/bin
(二合一)
注意事项:
Windows
根目录是反斜线:
Linux
根目录是斜线:
/
Linux
命令与相关知识
?
1
)
p>
Linux
无盘符,只有一个根目录(
ro
ot
)
2
)终端
==
控制台
==
命令行窗口
3
)
pwd
:打印当前工作目录,显示当前工作目录的位置
p>
4
)
ls
:列表显示目录内容,默认显示当前目录内容
5
)
cd
:改变当前工作目录;
p>
cd
后不加参数
=
返回
home
文件夹;
cd ~
p>
:返回
home
;
cd
/
:切换到根目录;
cd ..
:返回上一层目录(相对的)
;
p>
6
)
mkdir
:
创建文件夹(目录)
注意:目录
==
文件夹
7
)
rm
:删除文件;
rm xx
xx
:可删多个文件;
]
rm
–
rf xx
:
-
为减号,
r
表递归,
f
表强制
8
)
cat
xx
:显示文本文件内容
9
)启动
Java
开发工具:
cd/opt/eclipse
./eclipse .
表当前目录下
10
)绝对路径:
/home
(以
/
开始为绝对路径,相对于根目录)
相对路径:
home
(相对于当前工作目录)
11
)
ho
me
(用户主目录,用户的家)
:
/h
ome/username
如:
/home/soft01
p>
12
)主目录(
home
< br>)
:有最大访问权限:什么都能干,增删改查、建目录等
其他地方:一般只能查看,不能增删改查、创建目录等
、
Eclipse/Myecli
pse
程序结构
Project
项目文
件
|--
src
源文件
| |--
Package
包
|
|--
.java
源文件
|-- bin
|--
Package
包
(
|--
.class
字节码程序
注意事项:
消耗少,最稳定
Java
语言基础
基础语言要素
1
)标识符:给类、方法、变量起的名字
A
.必须以字母或下划线或
$$
符号开始,其余字符可以是字母、数字、
$$
符号和下
划线。
B
.只能包含两个特殊字符,即下划线
_
和美元符号
$$
。不允许有任何其他特殊
字符。
C
.标识符不能包含空格。
!
D
.区分大小写。
2
)关键字:只有系统才能用的标识符
注意事项:
true
、
false
、
null
不是关键字!是
字面量。
main
不是关键字!但是是一个特殊单词,可以被
JVM
识别
,主函数是固
定格式,作为程序的入口。
注释:单行注释:
0*2^10(2
次方
)=*2^11(3
次方
)=
.
10*2^1010(10
次方
)
尾数:
. 10
指数:
1010
基数:
2
浮点数字面量默认都为
double
类
型,所以在定义的
float
型数据后面加
F
或
f
;
double
类型可不写后缀,但在小数计算中一定要写
D
p>
或。
,
float
的精度没有
long
高,有效位数(尾数)短。
float
的范围大于
long
指数可以很大。
浮点数是不精确的,不能对浮点数进行精确比较。
3
)一种字符类型
(char)
< br>:
char
:
16
位,是整数类型,用
单引号
括起来的
1
个字符(可以是一个中文字符)
< br>,
使用
Unicode
码代表字
符,
0~2^16-1
(
65535<
/p>
)
。
注意事项:
不能为
0
个字符。
转义字符:
n
换行
r
回车
t
Tab
字符
双引号
表示一个
两字符<
/p>
char
中间用“
+
”
连接,
内部先把字符转成
int
类型,再进行加法
运算,
char
p>
本质就是个数!二进制的,显示的时候,经过“处理”显示
为字符。
4
)一种布尔类型
< br>(boolean)
:
true
真
和
false
假。
5
)类型转换:
char-->
自动转换:
byte
-->short-->int-->long-->float-->double
强制转换:①会损失精度,产生误差,小数点以后的数字全部
舍弃。
②容易超过取值范围。
常量和变量
变量:
< br>内存中一块存储空间,可保存当前数据。在程序运行过程中,其值是可以改变的
量
。
、
1<
/p>
)必须声明并且初始化以后使用(在同一个作用域中不能重复声明变量)
< br>!
2
)变量必须有明确类型(
Java
是强类型语言)
。
3
)变量有作用域(变量在声明的地方开始,到
块{}结束)
。变量作用域越小越好。
4
)局部变量在使用前一定要初始化!成员变量在对象被创建后有默认值,可直接用。
5
)在方法中定义的局部变量在该方
法被加载时创建。
常量:在程序运行过程中,其值不可以改变的量。
注意事项:
字面量、常量和变量的运算机制不同,字面量、常量由编译器
计算,变量
由运算器处理,目的是为了提高效率。
》
eg
:小
于
32
位数的字面量处理
byte b1 = 1; byte b2 = 3;
注意事项:
int
类型指:
byte
、
short
、
int
,只能写
long
类型,要写也必须强转成
int
类型;而
byte
、
short
为自动转换
成
int
。
swtich-case
:若
case
中无符合的数,并且
default
写
在最前(无
break
时)
,
则为顺序执行,有
break
或
}
则退出。
swtich-case
:若
case
中无符合的数,并且
default
写
在最后,则执行
default
。
swtich-case
:若
case
中有符合的数,并且
default
写在最后,并且
default
前面的
case
没有
break
时,
default
也会执行。
【
2
)循环控制语句
< br>①
for
:最常用,用在与次数有关的循环处理,甚至只
用
for
可以解决任何循环问
题。
p>
注意事项:
f
or
中定义的用于控制次数的循环变量,
只在
< br>for
中有效,
for
结束则循
环变量被释放(回收)
。
②
while
:很常用,用在循环时候要先检查循环条件再处理循环体,用
在与次数无
关的情况。如果不能明确结束条件的时候,先使用
w
hile(true)
,在适当条件使用
if
< br>语句
加
break
结束循环。<
/p>
③
do-while
< br>:
在循环最后判断是否结束的循环。
如:
使用
while(true)
实现循环的
时候,结束条件
break
在
while
循环体的最后,就可以使用
do-while
。
do-while
的结束
条件经常是
“否定逻辑条件”
,
不便于思考业务逻辑,
使用的时候需要注意。
可以利用
while
(
true
)
+ break
替换。
④循环三要素:
A
.循环变量初值
p>
B
.循环条件
C
< br>.循环变量增量(是循环趋于
结束的表达式)
⑤
for
和
while
循环体中仅一条语句,
也要补全
{ <
/p>
}
,
当有多条语句,
且不写
{
}
时,
它们只执行紧跟着的第一条语句。
⑥循环的替换:
》
while(
布尔表达式
){}
等价
for(;
布尔表达式
;){}
while(true){}
等价
for(;;)
while(true){} + break
替换
do{}while(
布尔表达式
);
for(;;) +
break
替换
do{}while(
布尔表达式
);
3
)跳转控制语句
< br>continue
:退出本次循环,直接执行下一次循环
break
:退出所有循环
数组
&
<
/p>
类型一致的一组数据,相当于集合概念,在软件中解决一组,一堆
XX
数据时候使用数
组。
1
)数组变量:是引用类型变量(不是基本变量)引用变量通过数组的内存
地址位置引
用了一个数组(数组对象)
,即栓到数组对象的绳子
。
eg
:数组变量的赋值
int[] ary = new
int[3];quals(cmd)
比
(
要好。
方法三要素
方法:
< br>method
(函数
function =
功能)
y=f(x)
1
)方法的主要三要素:方法名、参数列表、返回值。
2
)
什么是方法:
一个算法逻辑功能的封装,
是一般完成一个业务功能,
如:
登录系统,
创建联系人,简单说:方法是动作,是动词。
(
3
p>
)方法名:一般按照方法实现的功能定名,一般使用动词定义,一般使用小写字母开
头,第二个单词开始,单词首字母大写。如:
createContac
t()
。
4
)参数列表:是方法的前提条件,是方法执行依据,是数据。如:
login(String
id,
String
pwd)
,
参数的传递看定义的类型及顺序,
不看参数名。
5
)方法返回值:功能执行的结果,方法必须定义返回值,并且
方法中必须使用
return
语句返回数据;如果无返回值则定
义为
void
,此时
return
p>
语句可写可不写;返回结果只能
有一个,若返回多个结果,要用数组
返回(返回多个值)
。
注意事项:
递归调用:方法中调用了方法本身,用递归解决问题比较简练,
只需考
虑一层逻辑即可!但是需要有经验。
一定要有结束条件!
如:
f(1)=1;
递归层次不
能太深。总之:慎用递归!
插入排序
将数组中每个元素与第一个
元素比较,
如果这个元素小于第一个元素,
则交换这两个元
p>
素循环第
1
条规则,找出最小元素,放于第
1
个位置经过
n-1
< br>轮比较完成排序。
for(int i = 1; i < i++) {
]
int
k
=
arr[i];1
)开始令
low=0
(指向
3
)
,
high=7
(指向
88
)
,则
mid=3
(指
向
36
)
。因为
k 2 ,
,故应在前半段中查找。
)
令新的
high=mid-1
=2
(指向
24
)
而
low=0
(指向
3
)
不变,
则新的
mid=1
(指向
12
)
。
此时
k>mid
,故确定应在后半段中查找。
3
)令新的
low=mid+1=2
(指向
< br>24
)
,而
high=2
(指向
24
)不变,则新的
< br>mid=2
,此时
k=arr[mid]
,查找成功。
如果要查找的数不是数列中的数,例如
k=25
,当第四次判断时,
k>mi
d[2]
,在后边半
段查找,令
low
=mid+1
,即
low=3(
指向<
/p>
36)
,
high=2
< br>(指向
24
)出现
low>hi
gh
的情况,表
示查找不成功。
Java
系统
API
方法调用
Arrays
类,
是数组的工具类,包含很多数组有关的工具方法。如:
1
)
toString()
连接数组元素为字符串,方便数组内容输出。
2
)
equals
比较两个数组序列是否相等。
-
3
)
sort()
对数组进行排序,小到大排序。
4<
/p>
)
binarySearch(names,
二分查找,必须在有序序列上使用。
二进制基础
1
)计算机中一切数据都是
2
进制的
!
基本类型,对象,音频,视频。
2<
/p>
)
10
进制是人类习惯,计算按照人类习
惯利用算法输入输出。
算法转化
-> 1010(2)
1010
-
算法转化
->
3
)
16<
/p>
进制是
2
进制的简写,
< br>16
进制就是
2
进制!
4
)计算机硬件不支持正负号,为了解决符号
问题,使用补码算法,补码规定高位为
1
则为负数,每位都为<
/p>
1
则为
-1
,如
1111 1111 = -1 = 0xff
:
5
)二进
制数右移
>>
:相当于数学
/
p>
2(
基数
)
,且正
数高位补
0
,负数高位补
1
;二进制
字左移
<<
:<
/p>
相当于数学
*
2(
< br>基数
)
,
且低位补
0
;
二进制数无符号右移
>
>>
:
相当于数学
/
2(
基
数
)
,且不论正负,高位都补
0
。
6
)注意掩码运算:把扩展后前面为
1
的情况除去,与
0xff
做与运算。<
/p>
eg1
:二进制计算
int
max
=
0x7fffffff;
long
l
=
max
+
max
+
2;
l
);
和
this()
Cell c =
new Cell(); +
class Cell { int x; int y;
public
Cell()
{
this(1,1);
Foo);lass
类进行初始
化。
③在堆内
存中开辟空间,分配内存地址,栈内存中开辟空间也就有了。
{
④在堆内存中建立对象的特有属性
,并进行默认(隐式)初始化。
⑤对属性进行显式初始化。
⑥对对象进行构造代码块初始化。
⑦对对象进行对应的构造器初始化。
⑧将内存地址赋给栈内存中的
P
变量。
final
最终的,可以修饰:类
、方法、变量(成员变量和局部变量)
。
1
)
final
修饰的类:不能再继承。
、
2
)
p>
final
修饰的方法:不能再重写。
3
)
final
的方法和类,阻止了动态代理模式!动态代理模式广泛的应用在:
Spring
Hibernate Struts2
4
)企业编程规范:不允许使用
final
的方法和类!
5
)
final
的变量:
final
变量只能初始化一次(赋值一次,且方法中不能有给
final
变量赋值的语句!因为方法可被调用多次!
)
< br>,不能再修改!也可在方法的参数列表中添加
final
。
eg1
:
final
的局部变量
p>
final int a;
a =
5;
宏观说:字面量和常量都称为常量!
多态
继承体现了多态:父类型变量可
以引用各种各样的子类型实例,也可接收子类对象。
~
个体的多态:父类型的子类型实例是多种多样的。
行为的多态:父类型定义方法被子类重写为多种多样的,重载也是多态的方法。
1
)千万不能出现将父类对象转成子类类型,会造型异常
!
2
)多态前提:必须是类与类之间
有关系。要么继承,要么实现。通常还有一个前提:
存在覆盖。
3
)多态的好处:多态的出现大大的提高程序的扩展性。
4
)多态的弊端:虽然提高了扩展性,但是
只能使用父类的引用访问父类中的成员。
5
)在多态中成员函数的特点:
p>
①在编译时期:
参阅引用型变量所属的类中是否有调用的方法。
p>
如果有,
编译通过,
如果没有编译失败。<
/p>
(
②在运行时期:参阅对象所属的类中是否有调用的方法。
p>
③简单总结就是:成员方法在多态调用时,编译看左边,运行看右边。
6
)
在多态中,
< br>成员变量的特点:
无论编译和运行,
都参考左边
(
引用型变量所属的类
)
。
7
)在多态中,静态成员方法和
属性的特点:无论编译和运行,都参考做左边。
8
)父类
引用
指向子类对象,当父类想使用子类中特
有属性、方法时,要向下转型。
抽象类
抽象就是将拥有共同方法和属
性的对象提取出来,
提取后,
重新设计一个更加通用、
更
加大众化的类,就叫抽象类。
1
)
abstract
关键
字可以修饰类、方法,即抽象类和抽象方法。
}
2
p>
)抽象类可以有具体的方法,或者全部都是具体方法,但一个类中只要有一个抽象方
法,那么这个类就是抽象类,并且必须用
abstract
修饰类。
3
)抽象类可以
被继承,则子类必须实现抽象类中的全部抽象方法,否则子类也将是抽
象类。抽象类也可
主动继承实体类。
4
)抽象类不能实
例化,即不能用
new
生成实例。
<
/p>
5
)可以声明一个抽象类型的变量并指向具体子类的对象。
6
)抽象类可以实现接口中的方法。
7
)抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立
对象。
接口
interface
差不多
= =
abstract class
1
)
|
p>
2
)
接口是
lik
e
a
:
“像”我中的一种,是继承
体系之外的,用于功能扩展!想扩展就实
现,不想就不用实现。
3
)接口中只能声明抽象方法和常量且声明格式都是固定的,只
不过可以省略。
eg
:接口中声明常
量和抽象方法的格式是固定的
interface
Runner {
/*public
abstract final*/int SPEED=100;ew
Inner();
5
)当内部类在成
员位置上,就可以被成员修饰符所修饰。比如
private
:
将内部类在
外部类中进行封装。
<
/p>
6
)静态内部类:被
static
修饰后就具备了静态的特性。当内部类被
static
修饰后,
只能直接访问外部类中的
static
成员,出现了访问局限。
~
①在外部其他类中,如何直接访问
static
内部类的非静态成员呢
new
().function();
②在外部其他类中,如何直接访问
static
内部类的静态成员呢
注意事项:
当内部类中定义了静态成员,该内部类必须是
static
的
。
-
-
-
-
-
-
-
-
-
上一篇:uCOS-II实时性能测试与研究
下一篇:邀请函用语