注意:
7.2 集合体系结构
-----| Iterable 接口
Iterator iterator()
-------| Collection 接口
add() remove() clear()
---------| List 有序,可重复
get() remove() set() listIterator()
------------| ArrayList 数组实现,默认10,增长0.5 操作慢,查询快
------------| Vector 线程安全的ArrayList
------------| LinkedList链表实现,操作快,查询慢, 数据结构: 栈、队列
---------| Set 无序,不可重复
------------| HashSet 哈希表,底层使用HashMap, hashCode()且eauqls()则两个对象重复
------------| TreeSet 红黑树,底层采用TreeMap, 如果比较的结果为0说明对象重复
Comparable conpareTo( Object o )
Comparator compare( Object o1, Object o2 ) new TreeSet( 比较器对象 );
3. 增强for循环
public static <T> void print( T t ){
}
3. 泛型的继承
注意:
2. 集合的工具类(Collections)
sort() 自然排序
binarySearch() 前提是先排序
reverse()
max()
synchronizedCollection(Collection<T> c) 将线程不安全的集合对象转换为线程安全的
注意:
1. 根据源代码学习二分查找的实现原理
2. 在项目的实际开发中要学会定义工具类
所有的属性和方法都是静态的。该类一定是一个final的。
9. IO流
9.1 IO的概念
主要做设备和设备之间的数据传输。
9.2 IO的分类
单位:
字节流 (主要操作二进制数据)
字符流 (主要操作字符文本数据)
方向:
输入流
输出流
---》34.8
String price = read.readLine();
double price = Double.parseDouble(price);
注意:
9.8 顺序流
new Enumeration(){
public boolean hasMoreElements(){
return it.hasNext()
}
9.9 File类
3. 递归
ObjectInputStream
ObjectOutputStream
9.11 管道流
%s 字符串
%d 正数
%f 小数
%c 字符
9.13 其他流
12.4 正则的应用
13. GUI图形界面编程(了解)
GUI的容器:
---| Window 默认不显示、JFrame是顶层的容器。
-----| JFrame 默认的布局管理器是BorderLayout
-----| JDialog
---| JPanel 默认必须添加在另外一个顶层容器中使用,不能单独的使用。默认布局管理器是FlowLayout
4、客户端和服务器端相互的发送和接收数据。全双工的数据通信
多媒体标签:
集合框架标签(帧标签):
post方式将表单的数据写在HTTP协议的请求体中传输,对于数据的长度没有限制。
表单项:用于搜集用户数据的具体标记。
<input type="" name="" value="" /> 是空标签
type:
CSS语言: Cascading Style Sheet语言。
CSS的页面引入:
选择器:
h1{ } 标记选择器 <h1></h1>
#my{ } ID选择器 <h2 id="my"></h2>
.c1{ } 类选择器 <h3 class="c1 c2"></h3>
text-decoration
relative:相对的是该元素在标准文档流中没有定位之前的位置。
扩展:滤镜
*,html{
filter:gray
}
7. API( Applaction Program Interface)
6.1 Object
所有类的终极父类,该类中定义的方法,其他类中都有。该类可以直接创建对象。
6.1 Object
所有类的终极父类,该类中定义的方法,其他类中都有。该类可以直接创建对象。
常见方法:
String toString() 返回一个描述对象的字符串信息
boolean equals() 比较两个对象的内存地址是否相等,默认使用==实现
int hashCode() 如果两个对象equals()返回true,那么该方法的返回值也要一致
boolean equals() 比较两个对象的内存地址是否相等,默认使用==实现
int hashCode() 如果两个对象equals()返回true,那么该方法的返回值也要一致
Class getClass() 返回当前对象的Class对象
注意:
在开发者自定义类的时候,必须要记得重写这三个函数。
6.2 String
1. 创建对象
1. 创建对象
String str = "abc"; 对象在常量池中
String str = new String("abc") 对象在堆中
String str = new String("abc") 对象在堆中
== 比较的是字符串对象的内存地址是否相等
equals 比较是的两个对象的内容是否相等
equals 比较是的两个对象的内容是否相等
2. 判断
equals()
contains()
isEmpty()
endsWith()
startWith()
contains()
isEmpty()
endsWith()
startWith()
3. 查看
charAt()
indexOf()
lastIndexOf()
indexOf()
lastIndexOf()
4. 截取和替换
trim()
substring( start,end ) 不包含end索引
split()
replace()
replaceAll()
matches()
substring( start,end ) 不包含end索引
split()
replace()
replaceAll()
matches()
5. 转换
toUpperCase()
toLowerCase()
toLowerCase()
toCharArray()
getBytes("") // 编码
new String( byte[] bs,"" ) // 解码
getBytes("") // 编码
new String( byte[] bs,"" ) // 解码
6.3 字符串缓冲区对象
因为String不可变(数组不可变),所以提出了字符缓冲区对象。
-----| StringBuffer 线程安全的
append()
toString()
String substring(int start)
insert(int offset, float f)
delete(int start, int end)
append()
toString()
String substring(int start)
insert(int offset, float f)
delete(int start, int end)
-----| StringBuilder 推荐使用
6.4 System
属性:
InputStream in
PintStream out
属性:
InputStream in
PintStream out
方法:
getProperties() 获取系统素有属性 os.name=Window XP file.encoding=GBK
currentTimeMillis() 获取当前系统的时间值
exit(int status) 0为正常退出
getenv(String name) 获取系统环境变量
console() 获取控制台对象
currentTimeMillis() 获取当前系统的时间值
exit(int status) 0为正常退出
getenv(String name) 获取系统环境变量
console() 获取控制台对象
setIn(InputStream in)重定向标准输入流
setOut(OutStream out)重定向标准输出流
setOut(OutStream out)重定向标准输出流
6.5 Runtime
描述的是运行环境对象。
描述的是运行环境对象。
static Runtime getRuntime() 通过该方法获取该类的对象
exit()
gc()
Process exec() 执行一个命令行命令程序,可以指定参数
exit()
gc()
Process exec() 执行一个命令行命令程序,可以指定参数
6.6 Date(java.util.*)
描述的是系统的当前的日期,包含年、月、日、时、分和秒
描述的是系统的当前的日期,包含年、月、日、时、分和秒
getYear()
....... 都过期了
....... 都过期了
Calendar.set(year + 1900, month, date)
格式化日期类:(java.text.*)
SimpleDateFormat
"yyyy-MM-dd a E hh:mm:ss"
String str = format( Date date );
6.7 Calendar
static Calendar getInstance() 只能通过该静态方法获取
Calendar.get( Calendar.YEAR ) 获取年份
Calendar.get( Calendar.YEAR ) 获取年份
6.8 Math
ceil() 向上取整
floor() 向下取整
round() 四舍五入
random() 0~1
ceil() 向上取整
floor() 向下取整
round() 四舍五入
random() 0~1
6.9 Random
nextInt(10)
nextLong(10)
nextDouble(23.7)
nextLong(10)
nextDouble(23.7)
8. 集合(Collection)
7.1 集合的概念
7.1 集合的概念
1. 主要用于存储对象
2. 数组 VS 集合
2. 数组 VS 集合
2.1 数组是不可变
2.2 数组操作比较麻烦
2.2 数组操作比较麻烦
7.2 集合体系结构
-----| Iterable 接口
Iterator iterator()
-------| Collection 接口
add() remove() clear()
---------| List 有序,可重复
get() remove() set() listIterator()
------------| ArrayList 数组实现,默认10,增长0.5 操作慢,查询快
------------| Vector 线程安全的ArrayList
------------| LinkedList链表实现,操作快,查询慢, 数据结构: 栈、队列
---------| Set 无序,不可重复
------------| HashSet 哈希表,底层使用HashMap, hashCode()且eauqls()则两个对象重复
------------| TreeSet 红黑树,底层采用TreeMap, 如果比较的结果为0说明对象重复
Comparable conpareTo( Object o )
Comparator compare( Object o1, Object o2 ) new TreeSet( 比较器对象 );
-----| Iterator 接口
hasNext() next() remove()
-------| ListIterator 接口
add() hasPrevious() previou() set()
hasNext() next() remove()
-------| ListIterator 接口
add() hasPrevious() previou() set()
-----| Comparable 接口 实现自然排序
compareTo( Obejct o ) String Integer
compareTo( Obejct o ) String Integer
-----| Comparator
compare( Object o1, Object o2 )
equals()
compare( Object o1, Object o2 )
equals()
-----| Map 主要存储关联对象 Key --- Value
--------| HashMap 哈希表,对Key对象进行hash存储,Key对象的hashCode()且eauqls()则两个对象重复
--------| TreeMap 红黑树,如果Key比较的结果为0说明对象重复
如果比较出来Key对象重复了,那么会使用新值对象进行替换原来的旧值对象
--------| Properties 代表一个配置文件对象,可以将配置文件映射为内存的中Map对象
--------| HashMap 哈希表,对Key对象进行hash存储,Key对象的hashCode()且eauqls()则两个对象重复
--------| TreeMap 红黑树,如果Key比较的结果为0说明对象重复
如果比较出来Key对象重复了,那么会使用新值对象进行替换原来的旧值对象
--------| Properties 代表一个配置文件对象,可以将配置文件映射为内存的中Map对象
load() 将某一个配置文件装载为Map对象
get(key) 获取某一个key关联的值对象
getProperty()
setProperty( key , value ) 内存
store( Writer )
get(key) 获取某一个key关联的值对象
getProperty()
setProperty( key , value ) 内存
store( Writer )
7.3 集合的遍历
1. 直接打印集合对象
1. 直接打印集合对象
System.out.println(list);
2. for循环(只能遍历List)
for( int i = 0; i < list.size() ; i++ ){
list.get(i)
}
list.get(i)
}
3. 增强for循环
for( T t : list ){
System.out.println(t);
}
System.out.println(t);
}
4. 迭代器
4.1 while
Iterator it = list.iterator();
while( it.hasNext() ){
it.next()
}
it.next()
}
4.2 for
for( Iterator it = list.iterator(); it.hasNExt() ; ){
it.next()
}
it.next()
}
Iterator it = list.iterator();
for( ; it.hasNExt() ; ){
it.next()
}
for( ; it.hasNExt() ; ){
it.next()
}
5. Map的遍历
5.1 直接打印Map对象
5.2 获取key的set
5.2 获取key的set
Set keys = map.keySet();
for( Iterator it = keys.iterator(); it.hasNExt() ; ){
it.next()
}
5.3 获取value对象
it.next()
}
5.3 获取value对象
Collecion vs = map.values();
for( Iterator it = vs.iterator(); it.hasNExt() ; ){
it.next()
}
5.4 EntrySet
for( Iterator it = vs.iterator(); it.hasNExt() ; ){
it.next()
}
5.4 EntrySet
Set<Map.Entry> set = map.entrySet();
for( Iterator it = set.iterator(); it.hasNExt() ; ){
Map.Entry entry = it.next();
T key = entry.getKey();
T value = entry.getValue();
}
for( Iterator it = set.iterator(); it.hasNExt() ; ){
Map.Entry entry = it.next();
T key = entry.getKey();
T value = entry.getValue();
}
6. 使用泛型的迭代器进行遍历
ArrayList<String> list = new ArrayList<String>();
Iterator<String> it = list.iterator();
for( ; it.hasNext(); ){
String v = it.next();
String v = it.next();
}
for( String temp : list ){
}
7.4 泛型(Generic)
}
7.4 泛型(Generic)
泛型的概念: 泛型即类型的参数化。
1. 泛型的应用
集合中使用泛型可以提高数据的安全性。
集合中使用泛型可以提高数据的安全性。
ArrayList<String> list = new ArrayList<String> (); 推荐使用
ArrayList list = new ArrayList<String> ();
ArrayList<String> list = new ArrayList ();
ArrayList list = new ArrayList<String> ();
ArrayList<String> list = new ArrayList ();
注意:
泛型不能自动类型转换
泛型不能自动类型转换
2. 泛型的自定义
2.1 非静态方法
public <T> void print( T t ){
}
}
2.2 类泛型
如果一个类中属性和方法几乎都用到泛型了,那么可以将泛型的自定义声明到类上。
class Person<T>{
public void eat( T t){
}
}
}
}
注意:
1. 如果创建给类的时候没有指定具体的数据类型,默认是Object
2. 具体的类型只能是对象类型,不能是基本数据类型
1. 如果创建给类的时候没有指定具体的数据类型,默认是Object
2. 具体的类型只能是对象类型,不能是基本数据类型
2.3 静态方法的泛型声明
静态方法不能使用类上的泛型声明,所以要自己单独的声明
public static <T> void print( T t ){
}
3. 泛型的继承
3.1 class A<T> extends B<T>
3.2 class A extends B<String>
注意:
1. 接口可以有泛型
1. 接口可以有泛型
interface A<T>{}
4. 泛型的约束
Collection<?> 任意的对象类型
Collection<? extends Number> 必须是Number的子类或自身
Collection<? super Integer> 必须是Integer的父类或自身
Collection<? extends Number> 必须是Number的子类或自身
Collection<? super Integer> 必须是Integer的父类或自身
注意:
一个类是自己本身的子类或父类。
7.5 工具类
1. 数组的工具类(Arrays)
sort() 自然排序
binarySearch() 前提是先排序
toString() 遍历数组 [,]
asList()
binarySearch() 前提是先排序
toString() 遍历数组 [,]
asList()
2. 集合的工具类(Collections)
sort() 自然排序
binarySearch() 前提是先排序
reverse()
max()
synchronizedCollection(Collection<T> c) 将线程不安全的集合对象转换为线程安全的
所有的集合类都有一个方法
toArray() 转换为数组
toArray() 转换为数组
注意:
1. 根据源代码学习二分查找的实现原理
2. 在项目的实际开发中要学会定义工具类
所有的属性和方法都是静态的。该类一定是一个final的。
9. IO流
9.1 IO的概念
主要做设备和设备之间的数据传输。
9.2 IO的分类
单位:
字节流 (主要操作二进制数据)
字符流 (主要操作字符文本数据)
方向:
输入流
输出流
以代码为基准:输入流、输出流
9.3 IO的体系结构
字符流(使用了缓冲区)
-----| Writer 抽象类 每次操作一个字符
write(int) write( char[] ) flush() close()
--------| FileWriter
--------| OutputStreamWriter
--------| BufferedWriter
newLine()
-----| Reader 抽象类 每次操作一个字符
read() read(char[]) close()
--------| FileReader
--------| InputStreamReader
--------| BufferedReader
readLine()
----------| LineNumberReader
getLineNumber()
setLineNumber()
mark(34242)
reset()
skip()
-----| Writer 抽象类 每次操作一个字符
write(int) write( char[] ) flush() close()
--------| FileWriter
--------| OutputStreamWriter
--------| BufferedWriter
newLine()
-----| Reader 抽象类 每次操作一个字符
read() read(char[]) close()
--------| FileReader
--------| InputStreamReader
--------| BufferedReader
readLine()
----------| LineNumberReader
getLineNumber()
setLineNumber()
mark(34242)
reset()
skip()
注意:
文本文件的拷贝练习。
文本文件的拷贝练习。
字节流不是用缓冲区
-----| OutputStream 抽象类 每次操作一个字节
write(byte) write(byte[]) close()
--------| FileOutputStream
--------| ObjectOutputStream
--------| BufferOutputStream (有缓冲区了)
--------| PipedOutputStream
-----| InputStream 抽象类 每次操作一个字节
--------| FileInputStream
--------| BufferedInputStream
--------| ObjectInputStream
--------| SequenceInputStream
--------| PipedInputStream
-----| OutputStream 抽象类 每次操作一个字节
write(byte) write(byte[]) close()
--------| FileOutputStream
--------| ObjectOutputStream
--------| BufferOutputStream (有缓冲区了)
--------| PipedOutputStream
-----| InputStream 抽象类 每次操作一个字节
--------| FileInputStream
--------| BufferedInputStream
--------| ObjectInputStream
--------| SequenceInputStream
--------| PipedInputStream
注意:
拷贝一个图片文件。
9.4 字符流
1. 操作单位为字符
2. 使用了内存中的缓冲区,所以需要刷新
3. 操作文本数据,不能操作二进制数据
4. 内部做了码表的转换,所以要注意乱码
编码和解码的码表必须一致。
getBytes()
new String()
9.5 字节流
2. 使用了内存中的缓冲区,所以需要刷新
3. 操作文本数据,不能操作二进制数据
4. 内部做了码表的转换,所以要注意乱码
编码和解码的码表必须一致。
getBytes()
new String()
9.5 字节流
1. 操作单位是字节
2. 没有使用缓冲区,不需要刷新
3. 主要操作二进制数据,无需编码
2. 没有使用缓冲区,不需要刷新
3. 主要操作二进制数据,无需编码
9.6 转换流
字节流到字符流的桥梁。
InputStreamReader 将字节输入流转换为字符输入流
OutputStreamWriter 将字节输出流转换为字符输出流
字节流到字符流的桥梁。
InputStreamReader 将字节输入流转换为字符输入流
OutputStreamWriter 将字节输出流转换为字符输出流
new BufferedReader( new InputStreamReader( (System.in) ) );
9.7 标准输入和输出流
InputStream System.in
PrintStream System.out
PrintStream System.out
接受控制台输入的数据:
BufferedReader read = new BufferedReader( new InputStreamReader( (System.in) ) );
---》23
String age = read.readLine();
String age = read.readLine();
Person age int
int age = Integer.parseInt(age);
---》34.8
String price = read.readLine();
double price = Double.parseDouble(price);
注意:
学会使用标准流重定向实现日志文件。
9.8 顺序流
SequenceInputStream
new SequenceInputStream( InputStream in1 , InputStream in2 )
new SequenceInputStream( Enumeration< ? extends InputStream > )
new SequenceInputStream( Enumeration< ? extends InputStream > )
new Enumeration(){
public boolean hasMoreElements(){
return it.hasNext()
}
public Object nextElement(){
return it.next()
}
}
return it.next()
}
}
注意:
文件的切割和合并。
9.9 File类
该类描述的是一个文件或文件夹。
0. 属性
separator \ /
pathSeparator ;
pathSeparator ;
1. 构造函数:
new File(String name)
new File( File dir , String name)
new File( File dir , String name)
2. 常见的方法
boolean createNewFile()
delete()
deleteOnExit()
createTempFile(String prefix, String suffix) .tmp 存储在系统的默认的临时文件夹中
boolean createNewFile()
delete()
deleteOnExit()
createTempFile(String prefix, String suffix) .tmp 存储在系统的默认的临时文件夹中
exists() 目录或是否存在
isFile()
isDirectory()
isFile()
isDirectory()
String[] list() 返回一个文件夹下面的所有的目录和文件
File[] listFiles() 返回一个文件夹下面的所有的目录和文件对象
File[] listFiles() 返回一个文件夹下面的所有的目录和文件对象
File [] listFiles(FileFilter filter)
-----| FileFilter 接口
public boolean accept(File pathname){
return pathname.getName().endsWith(".java");
}
return pathname.getName().endsWith(".java");
}
mkdir() 创建一级目录
mkdirs() 常见多级目录
mkdirs() 常见多级目录
renameTo() 重命名 如果指定的路径不相同实现的是剪切
注意:
1. 实现遍历一个多级目录的文件夹
2. 删除一个目录
3. 拷贝一个带目录的文件夹
2. 删除一个目录
3. 拷贝一个带目录的文件夹
3. 递归
3.1 递归的概念
函数自身调用自身。
3.2 递归的实现
1. 函数中自己调用自己
2. 退出条件
2. 退出条件
3.3 递归的练习
1. 递归目录的删除
2. 递归目录的拷贝
2. 递归目录的拷贝
public void print( int x ){
if( x > 3 ){
print(--x);
if( x > 3 ){
print(--x);
}
Systenm.out.println(x);
}
}
print( 5 );
4. 带File的流操作
new FileWriter( new File("a.txt") , true );
new FileWriter( new File("a.txt") , true );
9.10 序列化和反序列化流
序列化: 对象 ------》 目标设备
反序列换: 目标设备----》对象
序列化: 对象 ------》 目标设备
反序列换: 目标设备----》对象
ObjectInputStream
ObjectOutputStream
注意:
1. 序列化的类对象一定要实现Serializable接口
2. 为了避免整容后不认识该对象,在序列化的类定义的时候需要定义一个
public static final long serialVersionUID = 1L;
2. 为了避免整容后不认识该对象,在序列化的类定义的时候需要定义一个
public static final long serialVersionUID = 1L;
3. 如果A实现了Serializable接口,B继承了A,那B可以被序列化。
9.11 管道流
主要做的是线程之间的数据通信
PipedInputStream
PipedOutputStream
PipedOutputStream
注意:
需要相互连接
需要相互连接
9.12 打印流
打印方便开发者格式化输出日志信息或其他数据信息。
PrintStream
PrintWriter
println()
print()
PrintWriter
println()
print()
printf()
%s 字符串
%d 正数
%f 小数
%c 字符
9.13 其他流
RandomAccessFile
new RandomAccessFile( 文件设备 , "rw" );
writeUTF();
readUTF();
seek();
readUTF();
seek();
DataInputStream
DataOutputStream
......
DataOutputStream
......
10. IDE
10.1 IDE概念
10.2 常见IDE
10.3 eclipse的使用
1. 管理模式
1.1 创建工作区
1.2 创建java项目
1.3 在项目的src目录下创建java源文件
2. 快捷键
Ctrl+1
Alt+/
Ctrl+Shift+O
Ctrl+/
Ctrl+Shift+/ Ctrl+Shift+\
Ctrl+Shift+F
Ctrl+D
Ctrl+单击
3. 代码重构
抽取方法
抽取接口
4. 关联源代码
选择源代码
5. 代码的调试
5.1 进入调试视图 debug as
5.2 单步、进入
5.3 调试后的清理
清除断点
清楚变量
关闭JVM
切换编辑java视图
6. 项目的导入和导出
10.1 IDE概念
10.2 常见IDE
10.3 eclipse的使用
1. 管理模式
1.1 创建工作区
1.2 创建java项目
1.3 在项目的src目录下创建java源文件
2. 快捷键
Ctrl+1
Alt+/
Ctrl+Shift+O
Ctrl+/
Ctrl+Shift+/ Ctrl+Shift+\
Ctrl+Shift+F
Ctrl+D
Ctrl+单击
3. 代码重构
抽取方法
抽取接口
4. 关联源代码
选择源代码
5. 代码的调试
5.1 进入调试视图 debug as
5.2 单步、进入
5.3 调试后的清理
清除断点
清楚变量
关闭JVM
切换编辑java视图
6. 项目的导入和导出
.....
11. JDK5.0新特性
11.1 静态导入
import static 包名.类名.静态属性|静态方法|*
11.2 增强for循环
for( 临时变量 : 需要遍历的容器 ){
}
11.2 增强for循环
for( 临时变量 : 需要遍历的容器 ){
}
注意:在循环中改变临时变量的值,不会改变容器的值。
11.3 可变参数
...
public long gerSum( int... a ){
}
}
特点:
1. 可变参数底层是可变数组
2. 可以直接创建数组对象接受并按照数组操作来操作
3. 可变参数只能在参数列表的最后一个位置
4. 可变参数只能且只有一个
2. 可以直接创建数组对象接受并按照数组操作来操作
3. 可变参数只能在参数列表的最后一个位置
4. 可变参数只能且只有一个
11.4 枚举
实现: enum 枚举值
enum 枚举类名{
// 所有的枚举值 大写形式
}
// 所有的枚举值 大写形式
}
特点:
1. 枚举类是一个类
2. 默认继承java.lang.Enum
3. 所有的枚举值都是枚举类的常量对象
public static final 枚举类 枚举常量名
2. 默认继承java.lang.Enum
3. 所有的枚举值都是枚举类的常量对象
public static final 枚举类 枚举常量名
4. 可以做作为switch的参数
5. 内部可以定义属性、构造函数、函数、以及抽象函数。
5. 内部可以定义属性、构造函数、函数、以及抽象函数。
12. 正则表达式
12.1 正则的概念
Regular Expresion 正则表达式,描述的是数据要满足的规则。
12.2 正则的适用范围
String
matches()
split()
replaceAll()
java.util.regex
Pattern 描述的正则的编译形式 Pattern pattern = Pattern.compile("正则");
Matcher 描述的是要匹配的文本 Matcher matcher = pattern.matches(str);
Regular Expresion 正则表达式,描述的是数据要满足的规则。
12.2 正则的适用范围
String
matches()
split()
replaceAll()
java.util.regex
Pattern 描述的正则的编译形式 Pattern pattern = Pattern.compile("正则");
Matcher 描述的是要匹配的文本 Matcher matcher = pattern.matches(str);
find() 查找符合规则的字符集,如果有返回true,否则返回false
group() 返回匹配的文本字符
12.3 正则的语法
group() 返回匹配的文本字符
12.3 正则的语法
1. . 匹配任意一个字符
a 匹配一个a
abc
a 匹配一个a
abc
2. 数量匹配
? 0 1
+ 1 ~ n n>=1
* 0 ~ n
? 0 1
+ 1 ~ n n>=1
* 0 ~ n
{4}
{4, }
{4,8}
{4, }
{4,8}
"a{5}" aaaaa
3. 简写形式
\d 数字范围 0 ~ 9
\D 非数字
\s 空白字符
\S
\w 单词字符 [a-zA-Z0-9]
\W
\D 非数字
\s 空白字符
\S
\w 单词字符 [a-zA-Z0-9]
\W
"^[^0]\\d{5,10}$"
4. 规则范围
[a-z] a 7
[a-z[1-4]] 并集
[a-z&&[a-b]] 交集
[a-z&&[^a-b]] [c-z]
[a-z] a 7
[a-z[1-4]] 并集
[a-z&&[a-b]] 交集
[a-z&&[^a-b]] [c-z]
5. 边界
^
$
\b
$
\b
6. 练习
由5~10个字母组成的用户名 "[a-zA-Z]{5,10}"
身份证 18位数字 0 "^[^0]\\d{16}[0-9x]{1}"
email " \\w+@\\w+(\\.\\w+)+"
密码是6为大写字母 "[A-Z]{6}"
身份证 18位数字 0 "^[^0]\\d{16}[0-9x]{1}"
email " \\w+@\\w+(\\.\\w+)+"
密码是6为大写字母 "[A-Z]{6}"
12.4 正则的应用
1. 基本的数据的校验
2. 特殊的字符正则应用
jiao.ning.bo "\\."
jiao ning bo " +"
jiao\ning\bo " \\\\"
2. 特殊的字符正则应用
jiao.ning.bo "\\."
jiao ning bo " +"
jiao\ning\bo " \\\\"
aabbbbcccccf "(.)\\1" #
aabbbbcccccf "(.)\\1" $1
aabbbbcccccf "(.)\\1" $1
3. 从页面上搜集email
4. 从页面上搜集url连接
4. 从页面上搜集url连接
13. GUI图形界面编程(了解)
GUI图形界面编程:java中主要使用的是AWT(java.awt.*)或Swing(javax.swing.*)
GUI体系
----| Component
-------| Container
----------| Window
-------------| Frame
-------------| Dialog
----------| Panel
-------| 普通的组件
----------| Button
----------| Label
-------| Container
----------| Window
-------------| Frame
-------------| Dialog
----------| Panel
-------| 普通的组件
----------| Button
----------| Label
对于Swing而言,所有的容器对象和普通的组件对象前面都加一个"J"即可。
GUI的容器:
---| Window 默认不显示、JFrame是顶层的容器。
-----| JFrame 默认的布局管理器是BorderLayout
-----| JDialog
---| JPanel 默认必须添加在另外一个顶层容器中使用,不能单独的使用。默认布局管理器是FlowLayout
常见的方法如下:
add() : 添加组件的方法
setLayout(): 修改布局管理器的方法
setVisiable():设置容器的可见性
setSize() : 设置窗口大小
setLocation(): 设置窗口的位置
setBounds() : 一次性设置大小和位置
add() : 添加组件的方法
setLayout(): 修改布局管理器的方法
setVisiable():设置容器的可见性
setSize() : 设置窗口大小
setLocation(): 设置窗口的位置
setBounds() : 一次性设置大小和位置
GUI组件:
常见的组件:JButton JLabel JTextField JPasswordField JCheckBox JTextArea
GUI布局管理器:BorderLayout(5) FlowLayout(居中) GridLayout(行列) CardLayout(JPanel)
GUI布局管理器:BorderLayout(5) FlowLayout(居中) GridLayout(行列) CardLayout(JPanel)
GUI事件监听器:
ActionListener 一个处理动作事件的action方法
WindowListener 处理窗口事件的
MourseListener 鼠标监听器
KeyListener 键盘监听器
因为实现接口需求全部实现所有的方法,但是在实际的项目开发中不需要将所有的实现,所以SUN提供了
默认的监听器的所有的方法的空实现的适配器。
ActionListener 一个处理动作事件的action方法
WindowListener 处理窗口事件的
MourseListener 鼠标监听器
KeyListener 键盘监听器
因为实现接口需求全部实现所有的方法,但是在实际的项目开发中不需要将所有的实现,所以SUN提供了
默认的监听器的所有的方法的空实现的适配器。
GUI事件适配器:
WindowAdapter 处理窗口事件的
MourseAdapter 鼠标监听器
KeyAdapter 键盘监听器
MourseAdapter 鼠标监听器
KeyAdapter 键盘监听器
编写GUI程序的一个模版写法:
public class GUI{
// 1. 声明所有的组件对象
// 2. init()提供对象的初始化
// 3. setConponent()设置所有的组件对象
// 4. bindEvent() 给需要的组件监听事件
public static void main(String [] args){
// 5. 创建GUI对象,一次调用2/3/4方法
}
}
// 5. 创建GUI对象,一次调用2/3/4方法
}
}
14. 网络编程
前面的所有知识,无论是文件的操作,还是线程的管道通信都是在本地PC上进行的,但是在实际的项目
开发中需要实现网络中的多台PC之间的数据通信,所以SUN提供了java.net.*帮助开发人员进行网络操作。
该网络操作也被形象的称之为Socket编程。
开发中需要实现网络中的多台PC之间的数据通信,所以SUN提供了java.net.*帮助开发人员进行网络操作。
该网络操作也被形象的称之为Socket编程。
网络基础知识:
IP IPV4 IPV6 192.168.10.1 0~255 256 = 2(8) 4字节
port 主要是为了区分一个pc上的多个网络应用程序
protocol 主要约束的是数据的传输的格式 TCP/IP UDP TCP
port 主要是为了区分一个pc上的多个网络应用程序
protocol 主要约束的是数据的传输的格式 TCP/IP UDP TCP
网络模型:
网络的5层模型
通信的协议:
UDP: 数据的接收端可以不在
TCP: 数据的接收端必须在发送端发送数据之前存在
TCP: 数据的接收端必须在发送端发送数据之前存在
UDP通信:
1、InetAddress 描述的是发送的数据的ip和port
有两个子类:Inet4Address, Inet6Address
获取对象: InetAddress getByName(String host)
2、客户端
DatagramSocket 主要用于接受可发送数据包
发送: send(DatagramPacket p)
有两个子类:Inet4Address, Inet6Address
获取对象: InetAddress getByName(String host)
2、客户端
DatagramSocket 主要用于接受可发送数据包
发送: send(DatagramPacket p)
DatagramPacket 主要用于打包数据
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
3、接收端
receive(DatagramPacket p)
TCP通信(重点):
1、InetAddress 描述的是发送的数据的ip和port
2、Socket 主要描述的是客户端用于发送数据的节点对象
Socket(String host, int port)
getOutputStream() 获取输出流进行数据的发送
Socket(String host, int port)
getOutputStream() 获取输出流进行数据的发送
3、ServerSocket
Socket accept() 接受客户端发送过来的数据Socket对象
Socket accept() 接受客户端发送过来的数据Socket对象
4、客户端和服务器端相互的发送和接收数据。全双工的数据通信
多线程下的TCP通信:
将通信的数据代码写在Thread的run()或Runnable的run()
可以启动多个线程来进行通信。
面试:
问? 是不是多线程可以提高通信的效率?
理论上:多线程是降低效率的。
15. HTML网页结构设计
后期的主要学习的是JavaEE,主要开发的是网站的管理系统,基于页面的,所以必须要学习网页的开发。
网页:
1、 后缀为.html或.htm的文件
2、 该文件内容主要由HTML标记组成
2、 该文件内容主要由HTML标记组成
HTML标记
HTML是一种超文本标记语言,主要用于开发页面,还页面中的所有的标记都是预先定义好的,不能自己修改。
文本标签:
h1~h6
p == 2<br/>
ul
ol
li
font
pre
sub
sup
span 语义标签
div 分区标签
文本标签:
h1~h6
p == 2<br/>
ul
ol
li
font
pre
sub
sup
span 语义标签
div 分区标签
表格标签:
table
caption
thead
tbody
tfoot
caption
thead
tbody
tfoot
tr
td
th 默认作为表格的表头,文本加粗
td
th 默认作为表格的表头,文本加粗
属性:
align
border
rowspan
clospan
cellspacing
align
border
rowspan
clospan
cellspacing
多媒体标签:
embed
bgsound
object
bgsound
object
滚动标签:
marquee
marquee
属性:
scrollamount 滚动的速度
scrolldelay 滚动的延迟
direction 滚动的方向
scrollamount 滚动的速度
scrolldelay 滚动的延迟
direction 滚动的方向
超链接标签:
<a> 的锚链接
<a> 的超链接
<a> 的超链接
<a href="mailto:">
<a href="javascript:">
<a href="#">
<a href="javascript:">
<a href="#">
注意一个属性:
target: _self _blank _top _parent 可以是一个子窗口的name属性值
集合框架标签(帧标签):
<iframe> 实现的是画中画的效果
<frameset> 该标签不能和body
rows属性切割行
clos属性切割列
一般使用相对单位的%数据来充当切割的数值。
clos属性切割列
一般使用相对单位的%数据来充当切割的数值。
<frame>
name属性:指定该子窗口的名称
src属性: 指定该窗口打开的页面URL
表单标签(重点):
表单标记的出现主要是为快速的从页面上采集用的输入信息。
src属性: 指定该窗口打开的页面URL
表单标签(重点):
表单标记的出现主要是为快速的从页面上采集用的输入信息。
表单:
<form action="" method="" enctype="">
</form>
属性:
action 该属性指定将表单的数据提交个谁(动态页面的路径)? 默认提交给自己。
method 指定数据传输的方式 get post
get方式数据在浏览器的地址栏的信息的后面
www.baidu.com?keywords=java&name=jiao
www.baidu.com?keywords=java&name=jiao
1、明码 不能传递密码
2、长度受限 必须小于1K 所以如果要实现文件的上传只能post
2、长度受限 必须小于1K 所以如果要实现文件的上传只能post
post方式将表单的数据写在HTTP协议的请求体中传输,对于数据的长度没有限制。
enctype 是一种组合表单数据的格式。
application/x-www-form-urlencoded 默认值,一般情况下使用。
multipart/form-data 将不同的数据类型进行分类发送给服务器。
text/plain 以纯文本的形式进行发送
主要用于邮件的发送表单中。
项目应用:
application/x-www-form-urlencoded 默认值,一般情况下使用。
multipart/form-data 将不同的数据类型进行分类发送给服务器。
text/plain 以纯文本的形式进行发送
主要用于邮件的发送表单中。
项目应用:
如果要实现文件上传和下载,form表单的,method属性必须是post 且
enctype属性必须是multipart/form-data。
enctype属性必须是multipart/form-data。
表单项:用于搜集用户数据的具体标记。
<input type="" name="" value="" /> 是空标签
type:
text
password
button
submit
reset
file
hidden
checkbox
radio
name:
password
button
submit
reset
file
hidden
checkbox
radio
name:
如果要传递数据,那么表单项中的元素一定要有name属性,否则数据无法传输,
获取到一定是null。
获取到一定是null。
表单提交:
<input type="submit" value="提交">
在表单的form标记中有一个事件属性:οnsubmit="return 指定处理函数"
16. CSS网页美化
16. CSS网页美化
在HTML中既有结构化的标签又有样式标签(font、b、i),后期HTML中摒弃了所有的样式标签,
一定要使用CSS样式语言进行页面的修饰。这样可以使得页面结构和样式进行分离,进而便于
网站的维护。
一定要使用CSS样式语言进行页面的修饰。这样可以使得页面结构和样式进行分离,进而便于
网站的维护。
CSS语言: Cascading Style Sheet语言。
CSS的页面引入:
行内: 元素的style属性
内部: <style>
/*样式*/
</style>
内部: <style>
/*样式*/
</style>
外部:<link href="UTL" type="text/css" rel="stylesheet" > link标签属于HTML
<style>
@import URL("xx.css"); 该关键字属于CSS
</style>
<style>
@import URL("xx.css"); 该关键字属于CSS
</style>
选择器:
h1{ } 标记选择器 <h1></h1>
#my{ } ID选择器 <h2 id="my"></h2>
.c1{ } 类选择器 <h3 class="c1 c2"></h3>
h1,h2{ }并集选择器 <h1></h1><h2></h2>
关系选择器
p a{ } 后代选择器 <p><a></a><a></a><a></a> <span><a></a></span> </p>
p>a{ } 直接后代选择器 <p><a></a><a></a><a></a></p>
p a:first-child 老大选择器 <p><a></a></p>
p a:first-child+a老二选择器
p a{ } 后代选择器 <p><a></a><a></a><a></a> <span><a></a></span> </p>
p>a{ } 直接后代选择器 <p><a></a><a></a><a></a></p>
p a:first-child 老大选择器 <p><a></a></p>
p a:first-child+a老二选择器
读懂以下选择器:
p>a:first-child+a+a{
color:#F00;
}
p>a:first-child+a+a{
color:#F00;
}
超链接的特殊伪类选择器:
LoVeHAte
a:link{} 链接在显示的时候的样式
a:visited{} 链接在访问过后的样式
a:hover{} 链接在鼠标移上去之后的样式
a:active{} 链接被激活的一瞬间的样式
a:visited{} 链接在访问过后的样式
a:hover{} 链接在鼠标移上去之后的样式
a:active{} 链接被激活的一瞬间的样式
CSS属性:
在实际的项目中如果要使用DOM动态操作带-的CSS属性,那么必须要进行命名的调整。
在实际的项目中如果要使用DOM动态操作带-的CSS属性,那么必须要进行命名的调整。
<p style="background-color:#f00">some text</p>
window.document.getElementByTagName("P").iterm(0).style.backgroundColor = "#00f";
text-decoration
CSS属性值:
!important
BOXModel:
padding: 是内容到边框之间的间距
margin :是边框到外部空白区域的举例
margin :是边框到外部空白区域的举例
margin:10px; 上下左右都为10px
margin:0px 10px; 上下 0px 左右 10px
margin:1px 2px 3px 10px; 上右下左
浮动:
margin:0px 10px; 上下 0px 左右 10px
margin:1px 2px 3px 10px; 上右下左
浮动:
1、浮动的元素脱离文档流,如果页面文档流中的元素遇到浮动的元素,元素内容的环绕。
2、浮动元素的虽脱离了文档流,但是浮动的位置坐标取决于文档流中的页面位置。
2、浮动元素的虽脱离了文档流,但是浮动的位置坐标取决于文档流中的页面位置。
作用:布局
练习:
1、使用浮动+div技术模拟框架集。
2、使用浮动+ul技术实现动态链表菜单。
2、使用浮动+ul技术实现动态链表菜单。
定位:
position:absolute fixed relative
absolute: 绝对定位,脱离文档流 z-index:12;
使用left top bottom right 来模拟x和y坐标
fixed: 固定定位在页面的一个位置,不会随着页面滚动条的滚动来滚动。
relative:相对的是该元素在标准文档流中没有定位之前的位置。
扩展:滤镜
*,html{
filter:gray
}