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盘

原文地址:https://www.cnblogs.com/tiantianxiangshang33/p/4959900.html