zoukankan      html  css  js  c++  java
  • Java基础_学习笔记_15_包

    1、包,提供类的多层类命名空间。也就是对类文件进行分门别类,就像用文件夹来管理文件一样,会使得管理更方便,也避免了类名冲突的问题

    package example.four.aa;

    class Test

    {...}

    这条语句说明,该文件中的所有类都是放在example.four.aa包中的,位于此包中的每个类的完整类名应该是包名+类名的组合,即example.four.aa.Test。

    package语句作为java源文件的第一条语句,指明该文件中定义的类所在的包,必须把包的声明放在云文件的最前面,每个源文件只能生命一个包。

    2、javac -d . Test.java

    在编译时我们输入该命令,系统会根据package example.four.aa;,自动在当前目录下建一个example文件夹,且example文件夹中又有个four文件夹,four中有个aa文件夹,aa中有个生成的Test.class文件。整个过程是自动完成的,我们只需要输入命令即可

    3、同一个包中的类相互访问,不需要加包名;不同包之间的类相互访问,需要加上包名。

     1 package example.four.aa;
     2 class Test
     3 {
     4     public int divide(int x,int y) throws ArithmeticException,example.four.DivideByMinusException
     5     {
     6         if(y<0)
     7             throw new example.four.DivideByMinusException("the divisor is negative "+y);
     8         //这里抛出的异常对象,就是catch(Exception e)中的e
     9         int result=x/y;
    10         return result;
    11     }
    12 }
    View Code

    example.four.aa包中的Test类方法中有用到example.four的DivideByMinusException方法,则需要在其前加上对应包名。

    4、import关键字

    那么问题又来了,我们每次都加上这样的包名作为前缀会很长,那我们需要引入import关键字

    import example.four.*;表明我们引入example.four这个包中的所有类,就省去我们在DivideByMinusException前加上example.four了。

    import example.four.*;//表示引入example.four中的所有类
    import example.four.aa.*;//表示引入example.four.aa中的所有类

    尽管aa是在example.four的下一级,但是,我们在引入的时候,只要用到aa中的类,就要用import引入。

    5、

    Test.java

     1 package example.four.aa;
     2 import example.four.*;
     3 public class Test
     4 {
     5     public int divide(int x,int y) throws ArithmeticException,DivideByMinusException
     6     {
     7         if(y<0)
     8             throw new example.four.DivideByMinusException("the divisor is negative "+y);
     9         //这里抛出的异常对象,就是catch(Exception e)中的e
    10         int result=x/y;
    11         return result;
    12     }
    13 }
    View Code

    DivideByMinusException.java

    1 package example.four;
    2 public class DivideByMinusException extends Exception
    3 {
    4     public DivideByMinusException(String msg)
    5     {
    6         super(msg);
    7     }
    8 }
    View Code

    lesson61.java

     1 package example.four;
     2 import example.four.*;
     3 import example.four.aa.*;
     4 class TestException
     5 {
     6     public static void main(String [] args)
     7     {
     8         Test t=new Test();
     9         try{
    10             t.divide(2,-1);
    11             System.out.println("the divide opration is over");
    12         }
    13         catch(ArithmeticException e)
    14         {
    15             System.out.println("Error ~ ArithmeticException");
    16             e.printStackTrace();//Exception类中的方法
    17         }
    18         
    19         catch(DivideByMinusException e)
    20         {
    21             System.out.println("Error ~ DivideByMinusException");
    22             e.printStackTrace();
    23             //return;//结束函数,有返回值的返回值,所以不会打印出B
    24             //System.exit(0);//表示程序到此终止
    25         }
    26         catch(Exception e)
    27         {
    28             System.out.println(e.getMessage());//打印出the divisor is negative -1
    29             e.printStackTrace();
    30         }
    31         finally
    32         {
    33             System.out.println("finally~");//A语句
    34         }
    35         System.out.println("the program is running here!");//B语句
    36     }
    37 }
    View Code

    这是之前写的一个程序,为了巩固包的知识点,把它拆开,并将编译后的Test.class文件放在example.four.aa包中,将其他两个文件编译后放在example.four包中。lesson61.java需要访问Test类中的方法,那么该类需要声明为public,否则无法访问。在运行TestException.class文件时,要记住classpath一定要是顶层包名所在的父目录,且类名要写全。即F:java_examplelesson61>java example.four.TestException

    6、访问控制

    类成员访问控制:

    private访问控制 只能在类内部被使用;

    缺省类型访问控制  只能在同包中被引用;

    protected 访问控制 可以在同一个包中被访问,也可以在属于不同包的子类中被访问;

    public访问控制 都可以访问。

    类的访问控制:

    public和缺省类型,和上面一样,缺省类型的访问控制只能被同一个包中的所有类访问

    7、jar

    F:java_examplelesson61>jar

    用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
    选项:
    -c 创建新档案
    -t 列出档案目录
    -x 从档案中提取指定的 (或所有) 文件
    -u 更新现有档案
    -v 在标准输出中生成详细输出
    -f 指定档案文件名
    -m 包含指定清单文件中的清单信息
    -n 创建新档案后执行 Pack200 规范化
    -e 为捆绑到可执行 jar 文件的独立应用程序
    指定应用程序入口点
    -0 仅存储; 不使用任何 ZIP 压缩
    -P 保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件
    -M 不创建条目的清单文件
    -i 为指定的 jar 文件生成索引信息
    -C 更改为指定的目录并包含以下文件
    如果任何文件为目录, 则对其进行递归处理。
    清单文件名, 档案文件名和入口点名称的指定顺序
    与 'm', 'f' 和 'e' 标记的指定顺序相同。

    常用命令:

    F:java_examplelesson61>jar -cvf lesson61.jar example com

    将example和com两个文件压缩,且命名为lesson61.jar,放在F:java_examplelesson61目录下。v 显示打包的详细过程

    F:java_examplelesson61>jar -xvf lesson61.jar 将lesson61.jar在当前目录下解压缩

    有时候如果一个jar包里面文件很多,我们可以将它当中的文件名重定向到一个新的文件中

    jar -tvf rt.jar>c: t.txt

    将rt.jar中的文件名写到rt.txt文件中,且该文件放在c盘

  • 相关阅读:
    适配器模式
    事务
    JUnit4
    命令模式
    组合模式
    MySQL语法
    MyEclipse工具
    数据源和连接池
    Annotation
    Java反射机制
  • 原文地址:https://www.cnblogs.com/tiantianxiangshang33/p/4959900.html
Copyright © 2011-2022 走看看