黑马程序员—— 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类"); }}
- 黑马程序员—— 9,包package相关知识点
- 黑马程序员—package
- 黑马程序员_ java面对对象——包package
- 黑马程序员 Java面向对象——包(package)
- 黑马程序员——其他2:package包
- 30.黑马程序员-包package
- 黑马程序员----包(package)
- 黑马程序员—Java面向对象(异常处理机制、package包、import导入包、jar包)
- 黑马程序员——方法的相关知识点
- 黑马程序员——14,String相关知识点
- 黑马程序员 Java面向对象——包(package) Object 类
- 黑马程序员:package、import、jar包介绍
- 黑马程序员---包(package)笔记
- 黑马程序员-day10-面向对象(包package)
- JAVA进阶知识点总结(2)— 包:Package
- 黑马程序员——基础学习(十五)网络编程及反射相关知识点
- 黑马程序员--正则表达式相关知识点
- 黑马程序员——包
- adb not responding. if you'd like to retry then please manually kill adb.exe and click 'restart' 解决办
- UVA 11400(DP)
- 顺序表的查找
- STM32积累
- stm32常见问题
- 黑马程序员—— 9,包package相关知识点
- C++ 编译,运行过程 详解。
- Ubuntu下重置Mysql root用户的密码
- iOS 数组遍历删除元素的问题
- POJ1077 HDU1043 Eight 八数码 (A*+康托展开)
- throw与throws的区别
- linux中的ldd命令简介
- android 沉浸式状态栏(2)
- JAVA垃圾收集机制与内存分配