Java基础学习第七天
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础学习第七天相关的知识,希望对你有一定的参考价值。
回顾第六天
面向接口编程
——————————————
降低耦合度
接口是最低标准。一个类可以实现任意多个接口
接口通常用在对现有的类进行扩展的时候。
接口可以多重继承
适配器模式
——————————————————
预先实现方法
主要用在匿名类内部对象。
异常(例外)
-------
Exception.异常
java.lang.NullPointerException 空指针异常
...ArrayIndexOutOfBoundsException. 数组越界异常
ClassCastException:类转换异常 说明两类之间无继承或实现关系
RuntimeException,运行时异常不需要在方法的定义中进行声明。
ArithmeticException 算术异常
java.lang.Object
|
|----java.lang.Throwable(可抛出,是所有异常和错误的超类)
|
|----java.lang.Error //硬伤
|----java.lang.Exception //
Throwable
----------
可以抛出的
是所有异常和错误的超类。
throw //抛出异常对象的指令。就像new指令一样
throws //在方法中声明抛出异常的关键字。用于标识函数暴露出的异常
throws与throw的区别
throws用在函数上,后面跟异常类名。
throw用在函数内,后面跟异常对象。
catch //就是捕获、抓取
Throwable中的方法
——————————————————
getMessage()
获取异常信息,返回字符串
toString()
获取异常类名和异常信息,返回字符串
printStackTrace() 打印栈跟踪信息
获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void
printStackTrace(PrintStream s)
通常用该方法将异常内容保存在日 志文件中,以便查阅
Exception
---------
通过try-catch-finally语句解决。(异常的处理方式)
try{
需要检测的代码
}
catch( 异常类 变量){
异常处理代码;
}
finally{
一定会执行的代码
}
Finally代码块只有一种情况不会被执行。就是在之前执行了System.exit(0)(系统退出)
可以有多个catch语句,catch的顺序需要注意。
子类异常需要先行catch,否则后面的代码不可达,编译也无法通过。
方法重写时,不能声明抛出新的异常类型,只能是原有异常类型体系(异常的子类)。
异常中处理示例:
————————————————
示例1:
class ExceptionDemo{
public static void main (String[] args){
int[] arr = null; //{1,2,3,4,5};
outArr(arr);
}
//输出数组,这时未监测传入的数组是否为空,下面使用异常处理方式来处理
public static void outArr( int[] arr ){
//使用try catch方式处理异常,将需要正确输出的信息放在try中
try{
for ( int i = 0 ; i < arr.length ; i++ ){
System.out.print(arr[i] + " ");
}
}
//如果出现异常,执行catch内代码
catch(Exception e){
System.out.println("传入数组异常,请重新确认");
}
//finally不是必须加,如果需要最后执行一代程序,就可以加上
}
}
--------------------------------
示例2:自定义异常
class ExceptionDemo3{
//第一种处理方式:throws AgeTooSmallException,AgeTooBigException放在main方法后,用于声明异常
//第二种下理方式 使用try 将p.setAge(300);包含在内
public static void main (String[] args) {// throws AgeTooSmallException,AgeTooBigException {
Person p = new Person();
//setAge方法声明了抛出异常,说明是存在风险的,如果要调用这个方法需对这个风险做出解释,如何处理:1,用try处理,2,不处理,也往外抛
try{
p.setAge(300);
}
//可以设置多个catch捕获,但要将最小的catch放在前面,把父级的放在后面,注意前后顺序,规则越细的越往前放。如果两个catch 无继承关系,就无前后关系了。
catch (AgeTooBigException e){
//这里的e.getMessage()调的就是setAge方法中的异常处理信息 throw new AgeTooSmallException 和 throw new AgeTooBigException 两个异常信息
//System.out.println(e.getMessage());
System.out.println("年龄太大了!");
}
catch (Exception e){
//这里的e.getMessage()调的就是setAge方法中的异常处理信息 throw new AgeTooSmallException 和 throw new AgeTooBigException 两个异常信息
//System.out.println(e.getMessage());
System.out.println("出问题了");
}
System.out.println(p.getAge());
}
}
class Person{
private int age ;
public int getAge(){
return age;
}
//通过throws AgeTooSmallException,AgeTooBigException声明抛出异常
public void setAge ( int age ) throws AgeTooSmallException,AgeTooBigException {
if ( age <= 0 ){
//如果年龄小于0 使用throw抛出异常,这里使用的
throw new AgeTooSmallException("年龄过小,不合法");
}
if ( age > 200 ){
//如果年龄小于0 使用throw抛出异常
throw new AgeTooBigException("年龄过大,不合法");
}
this.age = age ;
}
}
//自定义异常类AgeTooSmallException 并继承 Exception(因为它是所有异常的超类)
class AgeTooSmallException extends Exception{
public AgeTooSmallException(){
}
public AgeTooSmallException( String msg ){
//调用父类方法
super(msg);
}
}
//自定义异常类AgeTooSmallException 并继承 Exception(因为它是所有异常的超类)
class AgeTooBigException extends Exception{
public AgeTooBigException(){
}
public AgeTooBigException( String msg ){
//调用父类方法
super(msg);
}
}
————————————————
Triangle
--------------
Triangle(int a,int b,int c),无法构造三角形,自定义异常。
InvalidEdgesException()
package
------------
1.包。
2.类似于文件夹,组织管理类的结构。
com.sina.weibo.
3.完整类名:包名 + . + 类名,例如:com.it18zhang.java.PackageDemo
路径 :com\it18zhang\java\PackageDemo.class
完整类名:com.it18zhang.java.PackageDemo
4.编译含有包名的类
1.javac -d classes xxx.java //-d指定存放classes文件的位置,同时生成对应的文件夹目录树。
2.javac -cp classes -d . xxx.java //-cp指定编译程序时需要搜索的类路径顺序,如有多个路径使用;号分隔。-d同时生成对应的目录
5.运行程序
运行java程序,需要指定类的完整类名(全限定名,)
java -cp classes com.it18zhang.java1.PackageDemo1 //指定根包的位置 ,使用 -cp 指定执行时需要搜索的路径及类名。
6.含有包名的类需要使用public修饰,否则无法在其他包中访问。
package com.it18zhang.java1;
public class PackageDemo1{
...
}
7.引入包中的类,需要使用import关键字
import com.it18zhang.java1.PackageDemo1;//这里最后的类名可以使用* 号通配符,但一般不用。
public class xxx{
...
}
本段小结:
-d 是指定类输出路径
-cp 是指定编译程序时需要搜索的类路径顺序,如有多个路径使用;号分隔
dos命令
-----------------
1.tree /F //输出目录树
2.rmdir /S/Q //递归删除文件夹,不提示。
权限修饰符(可见性)
------------
1.public //公有的 所有人都可访问
2.protected //受保护的
3.default //默认的 未加修饰符的
4.private //私有的 只能在类中访问
四种修饰符对应的四种权限及权限之间的关系
-------------
public 1.同类 > 同包 > 同包子类 > 不同包 > 不同包子类
protected 2.同类 > 同包 > 同包子类
default 3.同类 > 同包 >
private 4.同类
jar
------------
0.java archieve,java归档,打包。(对class文件打包后形成的文件 )
1.jar war ear har
2.对java的类文件进行归档.
//将foo目录下的所有文件进行归档,生成xxx.jar
jar cvf xxx.jar -C foo/ .
//归档时,指定入口点,会在清档文件中添加Mai-Class属性。其中com.it18zhang.e.EE为代有main方法的入口类
jar cvfe xx.jar com.it18zhang.e.EE -C foo/classes .
3.通过jar文件执行程序
java -cp xxx.jar com.it18zhang.e.EE
java -cp xxx.jar;yy.jar;classes;..;d:\java com.it18zhang.e.EE
java -jar xxx.jar //直接执行代入口类的程序
作业
--------
1.Person类中setBirthday(int year,int month,int day);
判断生日是否是有效的日期值。
yean : >1970
month : 1-12
day: 1-31
是否是大月小月,平闰年等等
2.编写ArrayTool
冒泡
选择
折半查找
空心三角形
打成jar,互相测试。
com.it18zhang.ArrayTool.java{
public static ...
}
以上是关于Java基础学习第七天的主要内容,如果未能解决你的问题,请参考以下文章