当前位置: 代码迷 >> Android >> Android笔记——Day3 *错误处理 *Java中的io *匿名内部类
  详细解决方案

Android笔记——Day3 *错误处理 *Java中的io *匿名内部类

热度:536   发布时间:2016-05-01 15:31:47.0
Android笔记——Day3 *异常处理 *Java中的io *匿名内部类

1、异常处理。

··Java中含有异常处理机制。

··Java中异常的继承关系:

Throwable<——Exception<——RuntimeException、··· ···

··通常有两种情况需要对异常进行处理。

1)产生了运行时的异常,即unchecked异常,及RuntimeException类及其子类。

2)编译器对可能产生异常的代码在编译时强制要求对异常进行处理,即checked异常。包括Exception和除了 RuntimeException意外的异常类。

一般有一下几种情况:

1)Thread.sleep(long);

2) ?对IO流的打开或关闭。

3) ?以后遇到再加。

··对于异常的处理方法:

?

		 try{                        //产生或者可能产生异常的代码			}		}		catch (Exception e) {			// 对于异常的处理的代码		}finally{                        //无论是否产生异常都会执行的代码,一般用于IO流的关闭等等		}

?

?

··可以在代码中编写产生异常的代码。如果产生的是unchecked异常,比如RuntimeException re = new RuntimeException(String);然后可用throw关键字对其进行抛出,在编译时不会报错,在运行时会打印出错误代码。

而如果是checked异常,如果不在产生异常的地方加上try—catch结构,可以在产生异常的函数中加上throws关键字将异常交给调用函数的上一级进行捕捉。

比如说:

?

?

	public void error(){		RuntimeException re = new RuntimeException("错误啦");		throw re;//这句抛出异常,如果没有这句,这么都不会产生。	}//编译时不会报错,运行结果会打印出错误。		public void error() throws Exception{ //这句将异常交给上级处理。		Exception e = new Exception("错误啦");		throw e;	}

---------------------------------------------------------

?

2、Java中的IO

··Java中的IO可以分为字节流和字符流,或者是分为节点流和处理流。

1)字节流:

InputStream<—FileInputStream

其中有函数int read(byte [] b , int off , int len),第一个形参表示将 FileInputStrean对象中的内容放入b中,第二个表示从b的第几位开始放(偏移量),第三个len 表示预计读取的字节数,返回值表示真正读取的字节数。如果什么都没有(读到文件结尾) 返回-1;

OutputStream<—FileOutputStream

其中由函数void write(byte [] b , int off , int len),意义和上面类似。

2)字符流:

FileReader和FileWriter和上面的基本上是一样的。

3)需要注意的是在IO流创建和关闭的时候要加上try—catch结构,因为这些行为都是checked异 常。

··Java中“装饰者模式”:

··为了可以对一大部分类进行一些共同的操作,即对一些类进行“装饰”,Java中可以采用复合的方式,即新建 一个类,其中包含所要“装饰”类的对象,在以该类为参数重载一个构造函数。直接看代码吧,直接说起来有点虚。

?

public class lei{	public static void main(String args[]){		FileReader fr = null;		BufferedReader br = null; //BufferedReader是一个用于IO的处理流,也是一个装饰类		String line = null;		try{			fr = new FileReader("c:/in.txt");			br = new BufferedReader(fr);//可以用某个IO流作为参数构成BufferedReader对象			while((line = br.readLine())!= null){//经常会利用BufferedReader对象的readLine函数				System.out.println(line);			}			}catch (Exception e) {		}finally{			try{				fr.close();				br.close();			}catch (Exception e) {			}		}	}}
?

3、匿名内部类

··在Android开发中经常性地会用到匿名内部类。

··匿名内部类的用法比较简单,即这个类是在某个类之中且不给它赋名字,一般用于一次性产生的对象

?

        startButton.setOnClickListener(new OnClickListener() {//这里就是一个匿名内部类,直接覆写了OnClickListener这个类中的onClick函数,并生成了一个对象。			public void onClick(View v) {				new Thread(run1).start();//开始执行run1;			}		});

?

4、文件下载。

http://edu.gamfe.com/tutor/d/37218.html

··这里只讨论非常简单的文件下载--#

··Java中文件下载一般分为如下一个步骤。

1)新建一个URL对象。

2)用所建的URL对象生成以个URLConnection对象用于建立连接。

3)用URLConnection对象的getInputStream()函数获取该URL的输入流。

4)得到输入流之后可以写入SD卡或是进行其他一系列处理。

public class lei{	public static void main(String args[]){		BufferedReader br = null;		String line = null;		try{			URL url = new URL("http://baike.baidu.com/view/1007958.htm");//新建一个URL对象			URLConnection con = (URLConnection)url.openConnection();//用URL对象的openConnection()方法新建一个URLConnection对象,注意要向下转型。			InputStream is = con.getInputStream();				br = new BufferedReader(new InputStreamReader(is));//需要先将字节流转为字符流,因为BufferedReader是字符流			while((line = br.readLine())!= null){				System.out.println(line);//这里只是将得到内容输出,最后的输出结果是htm代码。			}		}catch (Exception e) {		}finally{			try{				br.close();			}catch (Exception e) {			}		}	}}
?

?

?

?

  相关解决方案