黑马程序员—— 9,包package相关知识点

来源:互联网 发布:九思软件 编辑:程序博客网 时间:2024/04/29 03:07

-----------android培训java培训、java学习型技术博客、期待与您交流!------------  

黑马程序员—— 9,包package相关知识点

一:Package---》

       Package就相当于一个文件夹,用来分类管理类文件的,也是一种封装的形式。包写在程序第一行,这样的话类名全称是:包名.类名

       用以下例子解释,如图1所示

package   BaoDemo;class   Bao{public  static  void  main(String[] args) {System.out.println("Hello World!");}}

            图1

其中图1编译的结果为图2


                           图2

        由图2中,可以看出编译是可以的,但是运行就会出问题。既然编译没有问题那么就会产生对应的class文件,但是,为什么运行就出问题了呢?这是因为Java文件中存在包,所以在DOS窗口中编写的java  Bao这种格式不正确,应该写Java  BaoDemo.Bao,接着运行结果如图3所示还是不成功的。


                           图3

        为什么还是会出错呢?因为既然有package,那么就要在当前目录下新建一个BaoDemo的文件夹,把之前已经产生的类文件放进去,本人此次试验的当前目录是E:\JAVAwenjian


                    图4

 

再运行一次就可以了如图5所示:


                      图5

        但是每次都这么新建文件夹,很麻烦,所以有另外一个办法解决。

以下是一个例子:

package  deg;class  Bao2{public  static  void  main(String[] args) {System.out.println("deg包的Hello World!");}}

图6

在DOS窗口的编写如图7所示:


                图7

        其中,javac   -d . Bao2.java表示在当前目录下新建一个deg文件夹,并且在deg文件夹里面生成class文件。而且当中的-d表示地址,而后面的. 则是表示当前目录,所以,-d是用来指定目录位置的,当然也是可以指定其他位置的。


        以下是包与包之间访问例子:

package    Abao;/*Abao包中有一个Alei类*/public   class   Alei //extends  Bbao.Blei//Abao包里面的Alei类继承Bbao包里面的Blei类//因为Alei类会被其他包的类调用所以加public{public   void zongjie()//因为会被其他包中的类访问,所以加public{System.out.println("总结有好处");         //eat(); //study();//study()方法在Bbao包的Blei类中被protected修饰 //不同包中的子类可以直接访问父类中protected修饰的成员 //sleep();这句话编译不通过 /* 因为这个sleep()方法在Bbao包的Blei类中为默认权限 */}}

                 图8

package   Cbao;class   Clei{public   static   void   main(String[] args) {Abao.Alei  dx= new Abao.Alei();dx.zongjie();System.out.println("Hello World!");}}


              图9

Abao包中有一个Alei类;Cbao包有一个Clei;而且Clei要访问Alei其编译运行结果如图10所示。


                图10

        如图10所示,cmd命令行先输入javac  e:\JAVAwenjian\erliou  Alei.java这句话的意思是在目录e:\JAVAwenjian\erliou中产生Abao文件,Abao文件里面生成对应的class文件;接着set  classpath=e:\JAVAwenjian\erliou这句话设定类路径为e:\JAVAwenjian\erliou第三行输入的javac  -d  e:\JAVAwenjian\erliou  Clei.java表示也在e:\JAVAwenjian\erliou这个目录下生成Cbao文件,Cbao文件中生成对应的class文件


以下关于包与包之间访问的权限问题:

package   Abao;/*Abao包中有一个Alei类*/public   class   Alei  extends  Bbao.Blei//Abao包里面的Alei类继承Bbao包里面的Blei类//因为Alei类会被其他包的类调用所以加public{public  void zongjie()//因为会被其他包中的类访问,所以加public{ System.out.println("总结有好处");         eat(); study();//study()方法在Bbao包的Blei类中被protected修饰 //不同包中的子类可以直接访问父类中protected修饰的成员 //sleep();这句话编译不通过 /* 因为这个sleep()方法在Bbao包的Blei类中为默认权限 */}}

                 图11

package Bbao;/*   Bbao包中有一个Blei类*/ public  class   Blei //因为会被Abao包中的Alei类继承(访问),所以要加public{public   void   eat()//因为会被Abao包中的Alei类访问,所以要加public{        System.out.println("吃饭了");}protected   void   study()//protected保护权限{     System.out.println("学习啦");}void   sleep()//默认权限{    System.out.println("睡觉了");}}


                     图12

package Cbao;class Clei{public   static   void   main(String[] args) {Abao.Alei  dx= new Abao.Alei();dx.zongjie();System.out.println("Hello World!");}}


                 图13

编译运行过程如图14所示:


                        图14

由此我们可以得知访问权限的大小关系是:

这样的public>protected(保护权限)>默认权限>private

以下是访问权限排序列表:

/*               public      protected   默认权限     private同一个类        可以          可以        可以        可以                      同一个包        可以          可以        可以                            子类            可以          可以                                    不同包          可以    */


                         图15

        小知识点1:假如Bbao包里面除了Blei类之外还有另外一个类B1lei,其他包的类需要调用B1lei类的话不能直接在B1lei类前面加public,因为Blei类已经被public修饰了,一个Java文件里面只能有一个公共类,那么只有把B1lei类放在另外一个新建的Java文件中再调用。

        小知识点2:包里面还有包的情况也是存在的,编写代码的时候就是这样写就可以了,举一个例子:在Java文件中的第一行加上package   yi.er.san;这句话的意思是yi包里面有er包,er包里面有san包。也就是文件里面还有文件的意思,而且,这种情况下建立对象也是:yi.er.san.类名=new  yi.er.san.类名();

————————分割线——————————

关于jar的知识点:


                   图1

在cmd命令中输入jar之后回车键得到的资料。

之前的实验中已经得到了在e:\JAVAwenjian\erliou目录下面的三个包:Abao,Bbao,Cbao


                      图2

在cmd命令行输入


                    图3

 其中图3 的jar  -cf hehe.jar  Abao  Bbao Cbao   表示新建一个压缩包,名字是hehe.jar并且把Abao  Bbao Cbao这三个包压缩进里面。

再把原来的三个包Abao  Bbao Cbao  删除,如图4:


                图4

在cmd命令行输入


               图5

在图5中,先是设定class路径指向hehe.jar然后直接运行Cbao.Clei运行结果和之前的实验结果一样的。

图6是一些显示jar压缩包的信息:


              图6

但是有时候显示的资料过多,不方便在DOS窗口看的时候,我们可以把这些需要显示的资料放在TXT文件中,操作如图7所示:


               图7

操作后看看d盘下是否有hehe.txt文件:


            图8

里面都是需要显示的资料

 ————————分割线——————

package Dbao;//import Dbao2.hh.tt.jj.bb.*;//导入Dbao2.hh.tt.jj.bb里面的所有类文件import Dbao2.hh.tt.jj.bb.Dlei2;//表示仅仅是导入Dbao2.hh.tt.jj.bb中的Dlei2类文件/*   但是如果有Dbao2.hh.tt.jj.bb.Dlei2   假如还有  Dbao2.hh.tt.jj.kk   kk与Dlei2都是类文件   在这种情况下,import Dbao2.hh.tt.jj.*;//只是表示导入Dbao2.hh.tt.jj里面的所有类文件,就是kk类文件而已,绝对不是表示导入Dlei2类文件*/ class   Dlei{         public   static   void   main(String[] args)         {                   /*                   既然已经导入了Dbao2.hh.tt.jj.bb里面所有的类文件,                   那么接下来新建对象的写法和以前一样了                   */                   Dlei2  a= new Dlei2();       /*                     但是还有一点需要注意,如果导入的两个包中有同名类的话,那么建立对象的时候就要写包名以示区别                     还有包名尽量不要重复                    */                   System.out.println("HelloWorld!");         }}//下面是另外一个包Dbao2.hh.tt.jj.bb里面的类package   Dbao2.hh.tt.jj.bb; public   class    Dlei2{         public  void    method()         {             System.out.println("这是Dbao2.hh,tt,jj,bb中的Dlei2类");         }}                  

-----------android培训java培训、java学习型技术博客、期待与您交流!------------  


                  

0 0
原创粉丝点击