现在的位置: 首页 > 综合 > 正文

java基础_Day10

2017年11月05日 ⁄ 综合 ⁄ 共 6237字 ⁄ 字号 评论关闭

1,finally:通常用于关闭资源

2,处理语句的三种格式:
          try{}                    try{}                    try{}          
          catch(){}              catch(){}              finally{}
                                     finally{}         
          catch是处理异常的语句,如果catch语句说明没有处理过异常,如果该异常是检测时异常,必须进行声明。    
3, 覆盖时异常的特点:        
          A,父类方法抛出了异常,子类方法只能抛出父类异常或者该异常的子类。
          B,父类抛出了多个异常,子类方法只能抛出父类异常的子集,或者这些异常的子类。
          C,如果子类抛出了父类中没有异常,或者父类中没有抛出异常,那么子类必须在内部对该异常进行处理,绝对不能抛出。
4,练习:          
          eg1:

class AException extends Exception

{}

class CException extends Exception

{}

class Fu

{

     void show()throws AException

     {    

     }

}

class Zi extends Fu

{

     void show()throws CException

     {}

}

class Test

{

     void function(Fu f)

     {

          try

          {

               f.show();

          }

          catch (AException e)

          {

          }    

     }

}

class ExceptionDemo2

{

     public static void main(String[] args)

     {

          Test t = new Test();

          t.function(new Zi());//Fu f = new Zi();调用的是子类的show方法,抛出C异常,编译失败。

          System.out.println("Hello World!");

     }

}

eg2:

class FushuException extends RuntimeException

{

     FushuException(String msg)

     {

          super(msg);

     }

}

interface Share

{

     void getArea();

}

class Rec implements Share

{

     private int Chang,Kuan;

     Rec(int Chang,int Kuan)//throws FushuException

     {

          if(Chang<0||Kuan<0)

               throw new FushuException("边长不能小于等于0");

          this.Chang=Chang;

          this.Kuan=Kuan;

     }

     public void getArea()

     {

          System.out.println(Chang*Kuan);

     }

}

class Circle implements Share

{

     private int Zhi;

     public static final double PI=3.24;

     Circle(int Zhi)

     {

          if(Zhi<=0)

               throw new FushuException("圆的直径不能小于等于0");

          this.Zhi=Zhi;

     }

     public void getArea()

     {

          System.out.println(Zhi*Zhi*PI);         

     }

}

class ExceptionDemo3

{

     public static void main(String[] args)

     {

//          try

//          {

//               Rec r = new Rec(-9,9);

//               r.getArea();              

//          }

//          catch (FushuException e)

//          {

//               System.out.println(e.toString());

//          }

          Rec r = new Rec(-9,9);//小于0时必须让程序停止,提示哪里出了问题,然后对代码进行修正,这时候应该抛出RuntimeException或者其子类

          r.getArea();

          Circle c = new Circle(-7);

          c.getArea();

          System.out.println("Hello World!");

     }

}

          eg3:

class TestDemo1
{    
     public static void func()throws Exception
     {
          try
          {
               //throw  new Exception();//没抛出,结果为:B A D
          }
          //catch(Exception e){}//抛出了,这里处理了,结果为:B A D,抛出,这里没有处理,结果为:B C D
          finally//有一种情况不会执行:System.exit(0);退出jvm,之后所有的代码都不再执行
          {
               System.out.println("B");
          }
     }
     public static void main(String[] args)
     {
          try//只看句中的代码
          {
               func();
               System.out.println("A");
          }
          catch(Exception e)
          {
               System.out.println("C");
          }
          System.out.println("D");
     }
}

          eg4:

class Test
{
     int a;
     Test(){};//子类中每个构造函数第一行都会有一个隐式的语句super();就是代表这个语句。
     Test(int a)
     {
          System.out.println("Test");
     }
}
class TestDemo2 extends Test
{
     TestDemo2()
     {
          //super(4);//这里必须手动调用构造函数,否则编译失败,因为系统找不到默认的Test()这个空参数的构造函数。
          //这里省略了:super();
          System.out.println("Demo");
     }
     public static void main(String[] args)
     {
          new TestDemo2();
          new Test(3);
     }
}

          eg5:

interface A{//String func();} 
class B implements A
{
     public String func()
     {
          return "func";
     }
}
class Demo
{
     public static void main(String[] args)
     {
          A a=new B();
          System.out.println(a.func());//编译失败,接口A中没有定义func方法,多态引用:成员变量只看引用所属的对象,成员函数看引用中是否有该函数,静态只看引用
     }
}

          eg6:
class Demo
{
     int show(int a,int b){return 0;}
}
下面那些函数可以存在于Demo的子类中。    
A.public int show(int a,int b){return 0;}//可以,覆盖。    
B.private int show(int a,int b){return 0;}//不可以,权限不够。
C.private int show(int a,long b){return 0;}//可以,和父类不是一个函数。没有覆盖,相当于重载。
D.public short show(int a,int b){return 0;}//不可以,因为该函数不可以和给定函数出现在同一类中,或者子父类中。
E.static int show(int a,int b){return 0;}//不可以,静态只能覆盖静态。
小结:一般方法可以覆盖:条件是函数的返回值类型,函数名称,参数列表必须都相同;子类权限必须大于等于父类函数的。子类中的构造函数不可以覆盖父类中的构造函数,因为名称相同。
          eg7:

class Demo

{    

     public static void func()

     {

          try

          {

               throw  new Exception();//throw单独存在,下面不要定义语句,因为执行不到。

               System.out.println("A");

          }

          catch(Exception e)

          {

               System.out.println("B");

          }

     }

     public static void main(String[] args)

     {

          try

          {

               func();

          }

          catch(Exception e)

          {

               System.out.println("C");

          }

          System.out.println("D");

     }

}

//编译失败。 因为打印“A”的输出语句执行不到。

记住:throw单独存在,下面不要定义语句,因为执行不到。

              
5,package:包,文件夹
          1,A对文件进行分类管理;B,给类提供了多层命名空间;C,写在文件的第一行;D也是分装的一种体现。
           2,javac -d d:\ Demo.java      java pack.Demo     set classpath=包的父目录     没有配置时,运行类文件,当前目录应为包的父目录
           3,编译时的几个小问题:
                    PackageDemo.java:8: 找不到符号

符号: 类 DemoA

位置: 类 pack.PackageDemo

                DemoA d = new DemoA();

                ^

PackageDemo.java:8: 找不到符号

符号: 类 DemoA

位置: 类 pack.PackageDemo

                DemoA d = new DemoA();

                              ^

2 错误

错误原因:类名写错。


因为类名的全名是:包名.类名

PackageDemo.java:8: 软件包 packa 不存在

                packa.DemoA d = new packa.DemoA();

                     ^

PackageDemo.java:8: 软件包 packa 不存在

                packa.DemoA d = new packa.DemoA();

                                         ^

2 错误

错误原因:packa包不在当前目录下

需要设置classpath,告诉jvm去哪里找指定的packa包。

PackageDemo.java:8: packa.DemoA 在 packa 中不是公共的;无法从外部软件包中对其进

行访问

                packa.DemoA d = new packa.DemoA();

                     ^

PackageDemo.java:8: packa.DemoA 在 packa 中不是公共的;无法从外部软件包中对其进

行访问

                packa.DemoA d = new packa.DemoA();

                                         ^

2 错误

错误原因:有了包,范围变大,一个包中的类要被访问,必须要有足够大的权限。

所以被访问的类要被public修饰。

PackageDemo.java:9: show() 在 packa.DemoA 中不是公共的;无法从外部软件包中对其进

行访问

                d.show();

                 ^

1 错误

错误原因:类公有后,被访问的成员也要公有才可以被访问。

6,包与包之间访问:


          被访问的包中的类以及成员必须被public修饰;
          不同包中的子类还可以直接访问父类中北protected修饰的成员
          java文件中类被public修饰,类名必须与文件名相同,所以一个java文件中只能有一个公有类。
          修饰符的使用:
          
范围\修饰符号 public        protected    default       private      
同一个类中 ok ok ok ok
同一个包中 ok ok ok 1
子类(同包/不同包) ok ok 2  
不同包中 ok      
          1:private只在本类中有效
          2:父类中的成员为默认权限时候,子类无法继承该成员。
          多层包目录:
              package haha.hehe.heihei
7,import:导入包中的类。目的:简化类名书写。
     为了防止包名重复,我们可以用url完成定义。例如:package cn.itcast.demo;
        import haha.hehe.Demo;
        improt haha.*;  
        import haha.hehe.*;

8,jar包:java压缩包,使用工具jar.exe压缩
     可以压缩文件夹,也可以压缩文件
     数据重定向:jar tf a.jar >1.txt
                        dir >c:\1.txt

          
     
【上篇】
【下篇】

抱歉!评论已关闭.