以下为《C203_Java核心编程_学习笔记》的无排版文字预览,完整内容请下载
***《Java核心编程》学习笔记态度?方法?知识
dell
2017/11/26
目 录
课程基本信息 1
1 常用类 2
1.1 String和StringBuffer 2
1.2 Arrays 2
1.3 Math 3
1.4 日期类 3
1.5 包装类 4
2 集合框架 5
2.1 集合框架概述 5
2.2 List 5
2.3 Set 6
2.4 Map 7
2.5 集合框架补充 7
3 IO操作 9
3.1 基本概念 9
3.2 字节流 11
3.3 字符流 13
3.4 File类 14
3.5 补充拓展 15
4 网络编程 17
4.1 网络通信基础 17
4.2 UDP通信 17
4.3 TCP通信 18
5多线程 20
5.1 线程基本概念 20
5.2 线程创建 20
5.3 线程调度 21
5.4线程同步 22
5.5 线程协作 22
6 异常与测试 24
6.1 异常概念及处理 24
6.2 自定义异常 24
6.3 单元测试 25
课程基本信息
课程代码:C203
课程名称:Java核心编程
学习时长:5天
教学目标:
熟练掌握常用类和集合框架的使用;
熟练掌握多线程编程;
掌握Java IO、网络编程、异常处理和单元测试
教学内容:
内容
知识点
课时
常用类
String、StringBuffer、Array、Math、日期类、包装类
3
集合框架
Vector、Stack、Collection、List、Set、Map;
7
IO系统
字节流、字符流、File类、RandomAccessFile类
5
网络编程
网络基础知识、UDP通信、TCP通信
5
多线程
线程基本概念、线程创建、线程生命周期、线程调度、线程同步
6
异常处理
异常概念、try…catch、throws
2
单元测试
2
1 常用类
1.1 String和StringBuffer
String类常用方法
Length 求长度
indexOf 索引查找
charAt(获取某个位置的字符)、equals(比较是否相等)、replace(替换,形成新的字符串)、split(分解)、substring(取段)、trim(去掉两边的空格)、format。
Sunsequence()
subSequence() 方法返回一个新的字符序列,它是此序列的一个子序列。
语法
public CharSequence subSequence(int beginIndex, int endIndex)
参数
beginIndex?-- 起始索引(包括)。
endIndex?-- 结束索引(不包括)。
返回值
返回一个新的字符序列,它是此序列的一个子序列。
StringBuffer类常用方法:append、insert、deleteCharAt、delete、replace、setCharAt、reverse。
Replace()
replace() 方法通过用 newChar 字符替换字符串中出现的所有 searchChar 字符,并返回替换后的新字符串。
语法
public String replace(char searchChar, char newChar)
参数
searchChar?-- 原字符。
newChar?-- 新字符。
返回值
替换后生成的新字符串。
使用StingBuffer类
public?StringBuffer?replace(int?start,int?end,String?str)
区间为[start,end),左闭右开
StringBuffer s7 = new StringBuffer("**_*XX区");s7.replace(3,6,"XX市"); System.out.println(s7);
使用StringBuffer可以直接将原字符串替换。
String是不可更改,如需更改字符串内容用StringBuffer。
String s1 = "abc";
s1 = "123"
1.2 Arrays
Arrays所有的方法都是静态的,通过类名调用,比如Array.sort(),提供数组的排序、查找、填充、获取子数组。
sort、binarySearch、fill、copyOf、copyOfRange
对自己自定义的类型使用Array.sort()会报错,因为系统不知道如何判断大小。
解决方案:
(1)实现Compartable接口,重写compareTo方法
public class Complex1 implements Comparable{ private int real; private int virtual; public Complex1(int real, int virtual) { this.real = real; this.virtual = virtual; } @Override public int compareTo(Object o) { Complex1 c = (Complex1)o; int n = this.real*this.real+this.virtual*this.virtual; int m = c.real*c.real+c.virtual*c.virtual; return (int)(Math.sqrt(n)-Math.sqrt(m)); } @Override public String toString() { return String.format("%d+%di",real,virtual); }}
(2)使用匿名内部类重写Comparator接口的compare方法
import java.util.Arrays;import java.util.Comparator;public class 测试 { public static void main(String[] args) { Complex2[] s = {new Complex2(1, 2), new Complex2(0, 0)}; Arrays.sort(s, new Comparator() { @Override public int compare(Complex2 o1, Complex2 o2) { int n1 = o1.getReal() * o1.getReal() + o1.getVirtual() + o1.getVirtual(); int n2 = o2.getReal() * o2.getReal() + o2.getVirtual() * o2.getVirtual(); return n1 - n2; } }); for(Complex2 i :s){ System.out.println(i); } }}
1.3 Math
Math类方法:abs、ceil、floor、round、max、min、exp、log、pow、sqrt、random、三角函数
Math类的方法都是静态方法,所以直接通过类名调用,比如Math.abs
1.4 日期类
授课内容:
Date类两种构造函数、getTime方法
时间戳timestamp
Date date1 = new Date();Date date2 = new Date(***);
日期格式化SimpleDateFormat
import java.text.SimpleDateFormat;import java.util.Date;public class 测试 { public static void main(String[] args) { Date date1 = new Date(); Date date2 = new Date(***); SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); System.out.println(s.format(date1)); }}
/
Calendar类是一个抽象类,无法直接实例化,只能通过getInstance方法获得当前时间的实例。
Calendar c = Calendar.getInstance();
单例模式Singleton
Calendar类的方法:get、set、add
Calendar类的模式:lenient和non-lenient,lenient模式会自动进位,在某些情况下非常好用,比如计算某个日期后10天的日期,不用考虑日超过范围的问题。
1.5 包装类
Integer Float Double
float Float
float
int x=3和Integer y=3是有本质区别的
装箱:Integer y = 3;
拆箱:int x=y;
Integer y = 3;//等价于 Integer y = new Integer(3)int x = y;//等价于int x = y.intValue()
2 集合框架
2.1 集合框架概述
/
集合代表了一组对象(和数组一样,但数组长度不能变,而集合能)。Java中的集合框架定义了一套规范,用来表示、操作集合,使具体操作与实现细节解某某。
集合框架的操作主要就是“增删查”。
Collection接口提供的方法:
增:add、addAll、
删:remove、removeAll、clear
查:contains、containsAll
转换为数组:toArray
Collcetion,List,Set,Map都是接口
ArrayList,LinkedList,Vector,Stack,HashSet,HashMap都是类
2.2 List
List是Collection的子接口,在它的基础上增加了“序”的概念,所以增删查等又添加一个一些和序有关的方法
add(int index, E element)
get(int index)
indexOf(Object o)
remove(int index)
set(int index, E element)
ArrayList是动态(Resizable-array)数组,在实现List接口方法的基础上增加了与“动态”相关的方法
ensureCapacity(int?minCapacity)
trimToSize()
Vector是“向量”的含义,也是动态数组,与ArrayList不同的是它通过增加capacityIncrement数量来提高存储管理效率,即可以指定增量,实现一个扩容多个。;
Stack继承自Vector,额外增加push、pop、peek等方法;
LinkedList是一个双链表,实现了List,还额外增加了addFirst、addLast、getFirst、removeFirst、removeLast
List list1 = new ArrayList();//不能使用基本类型,如下是错误的//List list1 = new ArrayList();list1.add(1);list1.add(2);list1.add(1,99);//常用输出for(Integer i:list1){ System.out.printf("%3d",i);}System.out.println();//借助工具类Array的toString方法System.out.println(Arrays.toString(list1.toArray()));
2.3 Set
List有序可重复
Set无序不重复。
HashSet是Set的实现类
通过实验得到以下结论:
(1)set中是不能有“重复”的元素
(2)系统判断元素是否重复的步骤
1.先判断哈希码,如果哈希码不同则认为是不同的元素
2.如果哈希码相同再去调用equals方法判断是否相同
(3)所以要保证set中不存在重复的自定义类型元素需要重写equal方法和hashCode方法。
2.4 Map
Map是以键值对形式存储数据
Name:张三
Sex:男
HashMap是Map接口的实现类
存:put(K key, V value)
取:get(K key)
2.5 集合框架补充
foreach语法:for(T e : list)
迭代器Iterator使用一般模式:
Iterator iterator = list.iterator();while (iterator.hasNext()){ Double d = iterator.next(); System.out.println(d);}
Collections工具类常用方法:
最大值:max(Collection c)、max(Collection c, Comparator com)
最小值:min(Collection c)、min(Collection c, Comparator com)
查找:binarySearch(List list,T key)、binarySearch(List list,T key, Comparator com)
排序:sort(List list)、sort(List list, Comparator com)
逆序:reverse(List list)
乱序:shuffle (List list)
3 IO操作
应用程序和设备(比如屏幕、键盘、文件等)间经常需要传输数据,Java为了简化开发流程,将这种传输封装成流的概念,屏蔽硬件细节。
流有两种:字节流和字符流
字节流:就是把传输的数据看成是没有特定含义的二进制数据;
字符流:把数据看成是字符。
/
常用字节流相关类
/
常用字符流
/
3.2 字节流
/
字节流2个顶级父类InputStream、OutputStream,它们都是抽象类
InputStream提供的方法主要有:
序号
方法
功能说明
1
read( )
读取一个字节
2
read(byte[] b)
读取多个字节至数组b中
3
read(byte[] b, int off, int len)
读取多个字节至数组从off开始的len个字节中
4
skip(long n)
跳过n个字节
5
close
关闭输入流
OutputStream提供的方法主要有:
序号
方法
功能说明
1
write(int n )
写入一个字节(注意只写入低8位)
2
write (byte[] b)
写入数组b中的全部字节
3
write (byte[] b, int off, int len)
写入数组b中从off开始len个字节
4
flush( )
刷新输出流,即强制输出(因有缓冲机制)
5
close
关闭输入流
FileInputStream继承自InputStream,封装了对文件的读取操作,通过文件路径或者文件对象构造一个FileInputStream对象。
FileOutPutStream继承自OutputStream,封装了对文件的写入操作,通过文件路径或者文件对象构造一个FileInputStream对象。
ObjectInputStream和ObjectOutPutStream分别封装了其它类型数据的读、写操作,ObjectInputStream构造函数传递需要InputStream子类的对象,ObjectOutPutStream构造函数传递需要OutPutStrea子类的对象。
ObjectInputStream提供的方法主要有:
序号
方法
功能说明
1
readInt、readFloat、readLong…
读取基本类型数据
2
readObject
读取引用类型数据(需反序列化)
ObjectOutPutStream提供的方法主要有:
序号
方法
功能说明
1
writeInt、writeFloat、writeLong…
写入基本类型数据
2
writeObject
写入引用类型数据(需序列化)
ObjectOutPutStream向文件中输出123和“abc”,结果如下:
/
所谓序列化就是将内存中的对象存储到外存上去。反序列化则反之,即将外存中的数据读入到内存中的对象中。
内存中的数据在关机后就不存在了,而外存的数据是可以永久保存的。比如游戏过程中的保存游戏,就是将某个时刻的游戏状态(比如生命值、金钱、等级等)数据保存到硬盘上;而读取游戏就是根据从文件中恢复游戏的状态。
这些数据可能是一个对象,也可能是多个对象组成的复杂数据,如果逐个将原子数据写入到文件中去,不仅复杂,而且在写入和保存的步骤和数据应该严格一致,否则数据就会错位。
序列化是将对象(不管多么复杂)整体写入文件中,将来也是整体读取,简化了读写操作。
课堂案例:
C203_03_01_FileOutStream
C203_03_02_FileInputStream
C203_03_03_ObjectOutputStream
C203_03_04_ObjectInputStream
C203_03_05_序列化
课后作业:
E203_03_01_文件复制
E203_03_02_数组序列化
3.3 字符流
/
Reader提供的方法主要有:
序号
方法
功能说明
1
read( )
读取一个字符
2
read(char []b)
读取多个字节至数组b中
3
read(char []b, int off, int len)
读取多个字节至数组从off开始的len个字节中
4
skip(long n)
跳过n个字符
5
close
关闭输入流
Writer提供的方法主要有:
序号
方法
功能说明
1
write(int n )
写入一个字符(注意只 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 需要改变的方向,无返回值
boolean eatSelf() 无参数,返回boolaan类型
boolean eatFood() 是否吃到食物
boolean meetGrid() 是否撞到墙
(2)食物
属性:坐标节点node
方法:随机生成 构造函数Food() Node getNode()
(3)网格
属性:rows行数,cols列数 size 格子大小,margin边距
方法:int getRows() 获取行数
int getCols() 获取列数
boolean outofBound(Node p) 蛇头是否越界
(4)节点
属性:行号row,列号col,颜色color
方法:boolean isSame(Node p) 判断是否相等
(5)游戏Game
属性:
private Snake snake; //蛇private Food food; //食物private Grid grid; //网格
方法:start() drawFood() drawGrid() drawSnake()
[文章尾部最后500字内容到此结束,中间部分内容请查看底下的图片预览]请点击下方选择您需要的文档下载。
以上为《C203_Java核心编程_学习笔记》的无排版文字预览,完整内容请下载
C203_Java核心编程_学习笔记由用户“wgy19852003”分享发布,转载请注明出处