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                //在方法中声明抛出异常的关键字。用于标识函数暴露出的异常

throwsthrow的区别

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基础学习第七天的主要内容,如果未能解决你的问题,请参考以下文章

大数据JAVA基础第七天

python基础学习第七天

python学习第七天 基础数据类型补充 深浅copy 集合 关键字后面加可迭代对象

java基础第七天_匿名内部类异常包和jar

java学习第七天2020/7/12

二刷java基础第七天——面向对象(中)