08 异常、包、jar文件

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------


1、异常
    异常就是Java程序在运行过程中出现的错误。如程序要打开一个不存的文件、网络连接中断、操作数组越界等;

    异常体系:
	Throwable:Throwable表示Java中可被抛出的对象,它是所有错误和异常的父类;
	    Error:通常出现重大问题如:运行的类不存在或者内存溢出等,表示错误;
	    Exception:在运行时运行出现的一些情况,表示异常;可以通过try catch finally处理异常;
		运行时异常(Runtime Exception)	   
		    一类特殊的异常,如被0除、数组索引越界等。产生比较频繁,处理麻烦,如果每次都处理,
		    会对程序可读性和运行效率影响比较大,因此由系统检测并将它们交给缺省的异常处理程序,
		    如果功能声明了此异常,调用者可以不用任何处理方式.这类异常不处理,编译时不会报错,只
		    是在运行时出现错误时才报 告异常,所以我们称之为运行时异常,所有RuntimeException的子类
		    都是运行时异常。我们 也可以对运行时异常进行处理;是Exception的子类			  
		编译时异常
		    Exception中除了RuntimeException的子类,其他异常都是必须要处理的,如果不处理,编译时会
		    报错,这些异常我们称之为编译时异常;
		Exception和Error的子类名都是以父类名作为后缀;
	Throwable中的方法:
		getMessage():获取异常信息,返回字符串。
		toString():获取异常类名和异常信息,返回字符串;
		printStackTrace():获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void;
		printStackTrace(PrintStream s):通常用该方法将异常内容保存在日志文件中,以便查阅

    异常体系的特点:
	异常体系中的所有类及其对象都具备可抛性,也就是说可以被throws和throw关键字操作;
	thow、throws、try的区别:
	    throws定义在函数上,用于抛出异常类,可以抛出多个,用逗号隔开;
	    throw定义在函数内部,用于抛出异常对象;
	    throws与throw的区别:thorws用在函数上,后面跟异常类名;throw用在函数内,后面跟异常对象;
	    如果功能内部可以将问题处理,用try;如果处理不了,交由调用者处理,这时throw异常对象,并在
		功能上throws该异常类。RuntimeException类除外,如果功能内部抛出此异常类对象,函数上不用声明;
	    后续程序需要继续运行就try,后续程序不需要继续运行就throw;

    jvm如何处理异常:
	jvm发现运算是已经违反了数学运算规则,java将这种常见的问题进行描述,并封装成了对象叫做ArithmeticException
	当除0运算发生后,jvm将该问题打包成了一个异常对象.并将对象抛给调用者main函数,new ArithmeticException("/by zero");
	main函数收到这个问题时,有两种处理方式:
	    1,自己将该问题处理,然后继续运行
	    2,自己没有针对的处理方式,只有交给调用main的jvm来处理
	    jvm有一个默认的异常处理机制,就将该异常进行处理.并将该异常的名称,异常的信息.异常出现的位置打印在了控制
		台上同时将程序停止运行;

    异常的用法:
	抛出异常
	    在程序运行过程中可以使用throw关键字抛出一个Exception类或其子类对象,通知调用者;
	处理异常:
	    可以在方法后面使用throws关键字声明向外抛出异常
	    也可以在方法内部使用try…catch进行异常的捕获或者try...finally处理,又或者try语句与finally的嵌套使用
			try {
				需要检测的代码;
			}catch(异常类变量) {
				异常处理代码;
			}
			finally {//定义的通常是关闭资源代码,因为资源必须释放			
				一定会执行的代码;
			}
		finally代码块只有一种情况不会执行。当执行到System.exit(0)系统退出,jvm结束
	处理原则:
	    调用到抛出异常的功能时,抛出几个,就处理几个,一个try可以对应多个catch。
	    多个catch块,父类异常的catch块放在最下面。
	    catch内需要定义针对性的处理方式,不能简单定义printSteakTrace()或者输出语句,不能不写。
		当捕获到的异常,本功能处理不了时,可以继续在catch中throw该异常对象;如果该异常
		处理不了并且不属于该功能的异常,将异常转换,抛出和该功能相关的一场;或者异常可以
		处理,但需要将异常产生的问题和本功能相关的问题提供出去,让调用者知道并处理,也可
		以捕获异常处理后,转换新的异常。
	
    异常的细节:
	子类只能抛出父类异常的子类或子集,不能抛出新的异常;
	父类或者接口没有异常抛出时,子类覆盖出现异常只能try不能抛
	RuntimeException以及其子类如果在函数中被throw抛出,可以不用在函数上声明;

    自定义异常
	可以通过继承Exception类或RuntimeException类来自定义一个异常;按照java面向对象思想,将
	出现的问题进行封装。是为了让该自定义异常类具备可抛性和操作异常的共性方法。	
	    例:Class DemoException extends Exception {
			DemoException(String message) {	//使用父类已经定义好的功能
				super(message);		//将异常信息传递给父类的构造函数
			}
		}

    finally小结:
	try可以和多个catch一起用;
	如果没有catch,try可以和finally一起用;
	try是检测异常,catch是用来捕获异常的,finally是用来结束资源的;
	如果只写了try和finally的话方法上必须要throws;
	finally里通常用来关闭资源。比如:数据库资源,IO资源等;
	finally 语句块是在 try 或者 catch 中的 return 语句之前执行的。更加一般的说法是,finally 语句块
	    应该是在控制转移语句之前执行,控制转移语句除了 return 外,还有 break 和 continue。另外,
	    throw 语句也属于控制转移语句。虽然 return、throw、break 和 continue 都是控制转移语句,但是
	    它们之间是有区别的。其中 return 和 throw 把程序控制权转交给它们的调用者(invoker),
	    而 break 和 continue 的控制权是在当前方法内转移。


2、包(package)
	写在程序文件的第一行;对类文件进行分类管理;给类提供多层命名空间;类名的全称的是 包名.类名;包也是一种封装形式;
	定义包类:
	    使用package语句加上包名来定义类所属于的包,包名全部小写;
	    可以通过javac编译命令加上一个参数.可以完成对包自动建立;
	    javac -d .(点代表当前目录)文件名.java;
	    -d可以指定目录;
	    有了包以后,在编译的时候,可以指定任意目录,那么就可以完成java源文件和运行文件存储的分离,也可以定义多级目录;
	    如果一个类中没有使用package语句,这个类为缺省无包名,它在一个默认的包中;    
	包与包之间的访问:
	    被访问的包中的类权限必须是public的;
	    类中的成员权限:public或者protected;
	    protected是为其他包中的子类提供的一种权限;
	    当一个包中的类访问到了另一个包中的类的时候,因为生成的.class文件不在当前目录,所以要指定classpath
		classpath用来指定类或者包所在的路径;
	    一个类如果被其它包中的类引用,必须用public关键字修饰,构造函数和方法也要public。
		类被声明为public,必须和文件名同名;一个包中不能出现两个public类 
	import关键字:
	    用来导入包,之后再使用就无需写包名,简化类名;
	    一个程序文件中只有一个package,可以有多个import;
	    用来导包中的类,不导入包中的包;
	    通常写import mypack.Demo;而不写import mypack.*,因为比较占用内存空间;
		    *:导入一个包中所有类。优先匹配当前包中的类,如果当前包没有再匹配导入包中的类;
		    具体类名:导入指定一个类。无论当前包中是否有同名类,都直接匹配导入的类;
	    建议定义包名时,适用url来定义,因为url是唯一的;

3、Jar包
	Java的压缩包,是java的一种压缩格式;
	JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它将一个软件系统的所有class文件打成一个jar文件。
	    为 J2EE 应用程序创建的 JAR 文件是 EAR 文件(企业 JAR 文件)。
	JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且
	    还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含
	    特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR;
	方便项目的携带;
	当我们用到jar包中的类时,需要将jar文件的绝对路径加到classpath当中;
	数据库驱动,SSH框架等都是以jar包体现的。rt.jar:java文件的类库
	Jar包的操作:
	    通过jar.exe工具对jar的操作。
	    创建jar包:jar -cvf    mypack.jar packa packb;
	    查看jar包:jar -tvf    mypack.jar [>定向文件];
	    解压缩:   jar -xvf    mypack.jar
	    自定义jar包的清单文件:jar –cvfm     mypack.jar mf.txt packa packb

4、API	
    什么是API
	Application Programming Interface,API是应用程序编程接口,指一些预先定义好的类。
	例如我们想要一台电脑,并不需要自己生产每个零件,只要从各个厂商买到组装电脑的零件就可以,
		然后根据说明书学会使用,将零件安装在一起就得到了电脑。电脑就像是我们要的程序,
		而零件就是API,说明书就是帮助文档;
    Java API
	Java API就是Sun公司提供给我们使用的类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,
		只需要学习这些类如何使用;
	我们可以通过查帮助文档来了解Java提供的API如何使用
    Java中常用API
	字符串:对字符串进行操作通常我们使用String类,相关的还有StringBuffer和StringBuilder;
	集合类:集合是一种容器,用来存取对象(Collection、Map);
	包装类:Java定义了一组包装类对基本数据类型进行了包装(Integer、Double、Boolean);
	时间类:Java定义了一些类方便用户对时间、日期进行处理(Date、Calendar)  ;
	系统类:Java定义了一些类针对系统进行操作(System、Runtime);
	IO流  :Java定义了一些类对数据传输进行了封装(输入输出流、File文件对象);
	Socket:Java定义了一些类方便用户进行网络编程(Socket、DatagramSocket);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值