1、Collection中的集合称为单列集合,Map中的集合称为双列集合(键值对集合)。

2、Map常用方法:map.put()   map.get()   map.remove()   map.keySet()  //关系对象图 ,可用于遍历,一旦有遍历,就会有迭代器。   打印set 集合, 返回集合所有键的数组。map.getClass()   //返回类的全名。它是Object类的内部类

3、八种基本类型的包装类   int  =>  Integer   ;   double  =>  Double 。 基本数据类型只能干加减乘除,别的事情干不了,所以就有了它的包装类。需求:年龄需转成字符串,考试成绩要转为double类型。

包装类提供多种方法实现对数据的操作。  parseInt()   //  将字符串参数作为有符号的十进制整数进行解析,也就是字符串转int类型。

4、map接口里面的静态接口Entry  (好比静态方法一样),接口中的内部成员,如果不设置非静态的话,就要对象去调用,而接口是不能建立对象的,所以用静态调用。

5、1、泛型的嵌套: Set> set = map.entrySet();   // 接口的内部接口。类似类中的内部类。2、迭代Set集合:Iterator> it = set.irerator();

6、增强 for 的底层也是迭代器iterator,所以增强 for 的写法只是简化代码量。

7、面试题:增强for 能不能遍历 Map 集合  ?   //  不能。

8、增强 for 间接遍历 Map 集合。

9、HashMap集合的两种遍历方法  (内在含义都是转set单列结合才能遍历)

10、重点。HashMap 存储自定义对象 作为键出现,保证键 的 唯一性,就需要重写 hashCode 和 equals 方法。sources。

11、LinkHashMap 保证存储元素顺序的一致  这是与HashMap的区别。两者都是线程不安全的集合,因为运行速度快。

12、Map 接口实现类 Hashtable  。线程安全,运行速度慢。

13、需要记住Map集合的一些特点。HashMap 允许存储 null 键 和 null 值,null 类型 当值当键 都没问题。而Hashtable 不允许存储 null 值 与 null 键。

14、Hashtable 在 1.2起就 逐渐被抛弃,但它的孩子 Properties 依然 活跃在开发舞台。Properties  表示一个持久的属性集。可保存在流中或从流中加载。(集合都是内存的东西,一旦程序结束,就废了,但IO流可以和内存结合起来,把数据集合变成一个永久性的集合存在)。

15、java sdk 1.5新特性==》静态导入的作用:减少开发的代码量。

16、java sdk 1.5新特性==》可变参数:前提,数据类型需要确定,然后参数个数任意。

17、可变参数语法: 数据类型... 变量名。 可变参数,本质,就是一个数组a 。

18、可变参的注意事项:1、一个方法只能有一个可变参数。2、可变参数必须写在列表的最后一位。无敌可变参 Object...o

19、Collection是集合的根接口,而Collections 是集合的工具类。

20、List集合 ,尽量写成多态形式。扩展性强(vector,LinkedList 、ArrayList)。

21、Collections.binarySearch(arr,5)  //  5代表 集合元素  ,返回该元素的索引。Collections.binarySearch(arr,16)  //  16代表 非集合元素,返回值:-(集合长度+1)。

22、Collections.shuffle(list)  // 对集合元素进行随机排列。

23、集合的嵌套:Map集合 存储 Map集合。

24、Map的Entry子接口,泛型的嵌套,在集合的嵌套遍历之中需要注意。

25、throwable超类。thorows IOException 。

FileInputStream :字节输入流  (读取操作) ; FileOutputStream :字节输出流  (写入操作)  第二参数是布尔值,文件追加内容。

定义一个字节数组缓冲区:byte[] buf = new byte[fis.available()];  注:关闭资源  fis.close();

26、Reader,读取字符流的抽象超类。

27、FileReader 读取包含中文的文件。看下面拉:

//输出的字符对应的编码值         //输出字符本身

// System.out.println(ch);      System.out.print((char)ch);

28、fw.flush()  // 刷新该流的缓冲。

29、flush():将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用。

close():关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。流不可以使用。如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,由close完成刷新并关闭。

packagecn.laoda.zhaoda;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;public classCopyTextFileTest {public static void main(String[] args) throwsIOException{

copyTextFile();

}public static void copyTextFile() throwsIOException {//1,明确源和目的。

FileReader fr = new FileReader("g:\\cn.txt");

FileWriter fw= new FileWriter("g:\\copy.txt");//2,为了提高效率。自定义缓冲区数组。字符数组。

char[] buf = new char[1024];int len = 0;while((len=fr.read(buf))!=-1){

fw.write(buf,0,len);//保留疑问:每次写入的起始位置都是?

}/*2,循环读写操作。效率低。

int ch = 0;

while((ch=fr.read())!=-1){

fw.write(ch);

}*/

//3,关闭资源。

fw.close();

fr.close();

}

}

30、IO读写  =>  类总结:

31、把字符转成字节的转换流对象:OutputStreamWriter 。

public classoutputStreamWriterDemo {public static void main(String[] args) throwsException{

outputStreamWriterDemo();

}public static void outputStreamWriterDemo() throwsException {//创建与文件关联的字节输出流对象

FileOutputStream fos = new FileOutputStream("g:\\cn8.txt");//创建可以把字符转成字节的转换流对象,并指定编码

OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");//调用转换流,把文字写出去,其实是写到转换流的缓冲区中

osw.write("你好");//写入缓冲区。

osw.close();

}

}

32、OutputStreamWriter和InputStreamReader是字符和字节的桥梁:也可以称之为字符转换流。字符转换流原理:字节流+编码表。

public classInputStreamReaderDemo {public static void main(String[] args) throwsIOException {//演示字节转字符流的转换流

readCN();

}public static void readCN() throwsIOException{//创建读取文件的字节流对象

InputStream in = new FileInputStream("c:\\cn8.txt");//创建转换流对象//InputStreamReader isr = new InputStreamReader(in);这样创建对象,会用本地默认码表读取,将会发生错误解码的错误

InputStreamReader isr = new InputStreamReader(in,"utf-8");//使用转换流去读字节流中的字节

int ch = 0;while((ch = isr.read())!=-1){

System.out.println((char)ch);

}//关闭流

isr.close();

}

}

33、public BufferedOutputStream(OutputStream out)创建一个新的缓冲输出流,以将数据写入指定的底层输出流。

34、字符缓冲输入流 :BufferedReader (从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取) 。   字符缓冲输出流: BufferedWriter  (将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入)    作用:完成文本数据的高效的写入与读取的操作。

35、BufferedWriter  ====>    void newLine() 根据当前的系统,写入一个换行符。

/** BufferedWriter 字符缓冲输出流

* 方法

* public void newLine()写入一个行分隔符

*

* 需求: 通过缓冲输出流写入数据到文件

* 分析:

* 1,创建流对象

* 2,写数据

* 3,关闭流

**/

public classBufferedWriterDemo {public static void main(String[] args) throwsIOException {//创建流//基本字符输出流

FileWriter fileOut = new FileWriter("file.txt");//把基本的流进行包装

BufferedWriter out = newBufferedWriter(fileOut);//2,写数据

for (int i=0; i<5; i++) {

out.write("hello");

out.newLine();

}//3,关闭流

36、BufferedReader   ==== >   public String readLine() 读取一个文本行,包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null。

/** BufferedReader 字符缓冲输入流

*

* 方法:

* String readLine()

* 需求:从文件中读取数据,并显示数据*/

public classBufferedReaderDemo {public static void main(String[] args) throwsIOException {//1,创建流

BufferedReader in = new BufferedReader(new FileReader("file.txt"));//2,读数据//一次一个字符//一次一个字符数组//一次读取文本中一行的字符串内容

String line = null;while( (line = in.readLine()) != null){

System.out.println(line);

}//3,关闭流

in.close();

}

}

37、使用字符缓冲流完成文本文件的复制

/** 采用高效的字符缓冲流,完成文本文件的赋值

*

* 数据源: file.txt

* 目的地: copyFile.txt

*

* 分析:

* 1,指定数据源, 是数据源中读数据,采用输入流

* 2,指定目的地,是把数据写入目的地,采用输出流

* 3,读数据

* 4,写数据

* 5,关闭流*/

public classCopyTextFile {public static void main(String[] args) throwsIOException {//1,指定数据源, 是数据源中读数据,采用输入流

BufferedReader in = new BufferedReader(new FileReader("file.txt"));//2,指定目的地,是把数据写入目的地,采用输出流

BufferedWriter out = new BufferedWriter(new FileWriter("copyFile.txt"));//3,读数据

String line = null;while ( (line = in.readLine()) != null) {//4,写数据

out.write(line);//写入换行符号

out.newLine();

}//5,关闭流

out.close();

in.close();

}

}

~~~~~~·   ~~~~~~~~····~~~~~···· ~~~~~~·   ~~~~~~~

38、IO流中对象很多,解决问题(处理设备上的数据时)到底该用哪个对象呢?  把IO流进行了规律的总结(四个明确):

l  明确一:要操作的数据是数据源还是数据目的。

源:InputStream    Reader

目的:OutputStream Writer

先根据需求明确要读,还是要写。

l  明确二:要操作的数据是字节还是文本呢?

源:

字节:InputStream

文本:Reader

目的:

字节:OutputStream

文本:Writer

已经明确到了具体的体系上。

l  明确三:明确数据所在的具体设备。

源设备:

硬盘:文件  File开头。

内存:数组,字符串。

键盘:System.in;

网络:Socket

目的设备:

硬盘:文件  File开头。

内存:数组,字符串。

屏幕:System.out

网络:Socket

完全可以明确具体要使用哪个流对象。

l  明确四:是否需要额外功能呢?

额外功能:

转换吗?转换流。InputStreamReader OutputStreamWriter

高效吗?缓冲区对象。BufferedXXX

InputStream

FileInputStream

BufferedInputStream

OuputStream

FileOutputStream

BufferedOuputStream

Writer

OutputStreamWriter

FileWriter

BufferedWriter

Reader

InputStreamReader

FileReader

BufferedReader

~~~~~~·   ~~~~~~~~····~~~~~···· ~~~~~~·   ~~~~~~~

总结:

l  字节流

字节输入流 InputStream

FileInputStream 操作文件的字节输入流

BufferedInputStream高效的字节输入流

字节输出流 OutputStream

FileOutputStream 操作文件的字节输出流

BufferedOutputStream 高效的字节输出流

l  字符流

字符输入流 Reader

FileReader 操作文件的字符输入流

BufferedReader 高效的字符输入流

InputStreamReader 输入操作的转换流(把字节流封装成字符流)

字符输出流 Writer

FileWriter 操作文件的字符输出流

BufferedWriter 高效的字符输出流

OutputStreamWriter 输出操作的转换流(把字节流封装成字符流)

l  方法:

读数据方法:

read() 一次读一个字节或字符的方法

read(byte[]  char[]) 一次读一个数组数据的方法

readLine() 一次读一行字符串的方法(BufferedReader类特有方法)

readObject() 从流中读取对象(ObjectInputStream特有方法)

写数据方法:

write(int) 一次写一个字节或字符到文件中

write(byte[] char[]) 一次写一个数组数据到文件中

write(String) 一次写一个字符串内容到文件中

writeObject(Object ) 写对象到流中(ObjectOutputStream类特有方法)

newLine() 写一个换行符号(BufferedWriter类特有方法)

l  向文件中写入数据的过程

1,创建输出流对象

2,写数据到文件

3,关闭输出流

l  从文件中读数据的过程

1, 创建输入流对象

2, 从文件中读数据

3, 关闭输入流

l  文件复制的过程

1, 创建输入流(数据源)

2, 创建输出流(目的地)

3, 从输入流中读数据

4, 通过输出流,把数据写入目的地

5, 关闭流

39、Error:错误的发生往往都是系统级别的问题,都是jvm所在系统发生的,并反馈给jvm的。我们无法针对处理,只能修正代码。

40、Exception:指程序在编译、运行期间发生了某种异常(XxxException),我们可以对异常进行具体的处理。若不处理异常,程序将会结束运行。

41、异常:

public classEEX {public static voidmain(String[] args) {int[] arr = {1,2,3};

getElement(arr,5);

}public static int getElement(int[] arr,int index) throwsNullPointerException, ArrayIndexOutOfBoundsException {if(arr==null){throw new NullPointerException("arr指向的数组不存在");

}if(index<0 || index>=arr.length){throw new ArrayIndexOutOfBoundsException("错误的角标,"+index+"索引在数组中不存在");

}int element =arr[index];returnelement;

}

}

执行结果:=>

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 错误的角标,5索引在数组中不存在

at cn.itcast.demo.EEX.getElement(EEX.java:15)

at cn.itcast.demo.EEX.main(EEX.java:7)

42、运行时期异常

RuntimeException和他的所有子类异常,都属于运行时期异常。NullPointerException,ArrayIndexOutOfBoundsException等都属于运行时期异常.

运行时期异常的特点:

方法中抛出运行时期异常,方法定义中无需throws声明,调用者也无需处理此异常。

43、异常重写注意细节:

1、子类覆盖父类方法时,如果父类的方法声明异常,子类只能声明父类异常或者该异常的子类,或者不声明。

2、当父类方法声明多个异常时,子类覆盖时只能声明多个异常的子集。

3、当被覆盖的方法没有异常声明时,子类覆盖时无法声明异常的。

举例:父类中会存在下列这种情况,接口也有这种情况

问题:接口中没有声明异常,而实现的子类覆盖方法时发生了异常,怎么办?

答:无法进行throws声明,只能catch的捕获。万一问题处理不了呢?catch中继续throw抛出,但是只能将异常转换成RuntimeException子类抛出。

interfaceInter {public abstract voidmethod();

}class Zi implementsInter {public void method(){ //无法声明 throws Exception

int[] arr = null;if (arr == null) {//只能捕获处理

try{throw new Exception(“哥们,你定义的数组arr是空的!”);

}catch(Exception e){

System.out.println(“父方法中没有异常抛出,子类中不能抛出Exception异常”);//我们把异常对象e,采用RuntimeException异常方式抛出

throw newRuntimeException(e);

}

}

}

}

44、异常中常用方法:

getMessage方法:返回该异常的详细信息字符串,即异常提示信息。

toString方法:返回该异常的名称与详细信息字符串。

printStackTrace:在控制台输出该异常的名称与详细信息字符串、异常出现的代码位置。

45、自定义异常类。=>  编译时异常继承Exception,运行时异常继承RuntimeException。

class NoAgeException extendsException{

NoAgeException() {super();

}

NoAgeException(String message) {super(message);

}

}

// Person类

class Person{

private String name;

private int age;

Person(String name,int age) throws NoAgeException  {

//加入逻辑判断。

if(age<0 || age>200)       {

throw new NoAgeException(age+",年龄数值非法");

}

this.name = name;

this.age = age;

}

//定义Person对象对应的字符串表现形式。覆盖Object中的toString方法。

public String toString()   {

return "Person[name="+name+",age="+age+"]";

}

}

//测试类

class ExceptionDemo{

public static void main(String[] args) {

try {

Person p = new Person("xiaoming",20);

System.out.println(p);

}

catch (NoAgeException ex){

System.out.println("年龄异常啦");

}

System.out.println("over");

}

}

46、Properties:Map集合的一种,它是Hashtable集合的子集合,它键与值都是String类型,它是唯一能与IO流结合使用的集合

方法

load( InputStream in ) 从流所对应的文件中,读数据到集合中

load( Reader in ) 从流所对应的文件中,读数据到集合中

store( OutputStream out , String message ) 把集合中的数据,写入到流所对应的文件中

store( Writer out , String message) 把集合中的数据,写入到流所对应的文件中

实现文件内容的自动追加

构造方法

FileOutputStream(File file, boolean append)

FileOutputStream(String fileName, boolean append)

FileWriter(File, boolean append)

FileWriter(String fileName, boolean append)

实现文件内容的自动刷新

构造方法

PrintStream(OutputStream out, boolean autoFlush)

PrintWriter(OutputStream out, boolean autoFlush)

PrintWriter(Writer out, boolean autoFlush)

Commons-IO

方法

readFileToString(File file):读取文件内容,并返回一个String;

writeStringToFile(File file,String content):将内容content写入到file中;

copyDirectoryToDirectory(File srcDir,File destDir);文件夹复制

copyFileToDirectory (File srcFile,File destFile);文件复制

java expextion_Java(20~24)相关推荐

  1. java面试题24 关于Java中的数组,

    java面试题24 关于Java中的数组,下面的一些描述,哪些描述是准确的:(        ) A 数组是一个对象,不同类型的数组具有不同的类 B 数组长度是可以动态调整的 C 数组是一个连续的存储 ...

  2. 1、《学通Java Web的24堂课》纠错之一 —— 开篇:《学通Java Web的24堂课》简介

    2012年3月8日购于卓越网(真是个好日子) 基本信息 出版社: 清华大学出版社; 第1版 (2011年7月2日) 丛书名: 软件开发羊皮卷 平装: 718页 正文语种: 简体中文 开本: 16 IS ...

  3. (20/24) webpack实战技巧:watch实现热打包和添加代码备注

    (20/24) webpack实战技巧:watch实现热打包和添加代码备注 在前面的学习中,我们一直使用webpack-dev-server充当(本地)服务器和完成打包任务,但是当出项目团队联合开发, ...

  4. JAVA自学笔记24

    JAVA自学笔记24 1.能使用同步代码块就使用同步代码块,除非锁对象是this,就可以考虑使用同步方法.静态方法的锁是类的字节码对象. 2.JDK5新特性 1)接口Lock void Lock()/ ...

  5. 依次输入表(30,15,28,20,24,10,68,35,50)中的元素,生成一棵平衡的二叉排序树。请画出构造过程,并在其中注明每一次平衡化的类型(LL型、RR型、LR型、RL型)

    题目 依次输入表(30,  15,  28,  20,  24,  10,  68,  35,  50)中的元素,生成一棵平衡的二叉排序树. 请画出构造过程,并在其中注明每一次平衡化的类型(LL型.R ...

  6. #102030:在30天内运行20 10K来庆祝Java的20年

    1995年5月23日是技术史上的重要时刻. 业界似乎并没有意识到当天发布的语言会在未来几年内完全改变技术的格局. Java将在今年的同一天庆祝20岁生日. Java 20年,哇! 回顾20年前的存储器 ...

  7. Java学习笔记24(Map集合)

    Map接口: Map接口与Collection接口无继承关系. 区别:Collection中的元素是孤立的,一个一个存进去的. Map作为一个映射集合,每一个元素包含Key-value对(键-值对). ...

  8. JAVA入门[20]-Spring Data JPA简单示例

    Spring 对 JPA 的支持已经非常强大,开发者只需关心核心业务逻辑的实现代码,无需过多关注 EntityManager 的创建.事务处理等 JPA 相关的处理.Spring Data JPA更是 ...

  9. java速算24,Java扑克牌速算24的方法

    已知一副扑克牌有54张,去除大王和小王,剩余52张.在其中随机抽取4张牌,利用加减乘除进行计算得到24. 从A到10,他们的值分别为1到10. 从J到K,他们对应的值是减去10以后的值.编写程序生成一 ...

最新文章

  1. 2020年AI产业报告:100个岗位抢1个人,计算机视觉成最大缺口
  2. 网络营销的探索与爆发
  3. Zw*与Nt*的区别
  4. oracle性能分析
  5. AntD 官网样例 InputRef报错原因
  6. 尽梨了(贪心+dp)
  7. 本机Android应用程序教程:WhatsApp克隆
  8. C# 对话框隐藏 标题栏
  9. matlab相对误差,相对误差与相对误差限定义-精品课程-山东科技大学.PPT
  10. 处理vue项目中使用es6模板字符串中\n换行问题
  11. new与delete动态分配和释放内存
  12. 前后端分离 Spring Boot + Vue 开发网易云、QQ音乐(附源码)!
  13. Mikrotik路由器(routerOS)调试环境搭建
  14. QTextDocument
  15. cml sml区别_资本市场线简介,资本市场线CML与SML的区别
  16. python操作网页界面_python3 操作页面上各种元素的方法
  17. CIA反取证工具曝光 安全专家质疑维基解密
  18. 移动互联应用学习心得
  19. 跨境电商领域的“坂田五虎“你知道都是谁吗?
  20. 北京信息科技大学第十一届程序设计竞赛(重现赛)B kotori和气球

热门文章

  1. apache部署https
  2. 计算机免修考试题库,计算机免修考试内容和样卷.doc
  3. Android studio删除sdk的方法(图文教程)
  4. linux进程通信ips,Cisco IPS 分析引擎拒绝服务漏洞(CVE-2014-0718)
  5. python缩进用什么键盘好_python中缩进使用空格还是tab键
  6. navicat10.1.7英文版_【纯干货】风险评估和管理(PDA TR 49内容节选11 中英文版)...
  7. 声明式事务基于注解@Transactional的理解
  8. 协议类接口 - NAND
  9. 通过QQ或者QQ帮助别人学习Lync之一
  10. Oracle数据库分页的三种方法