黑马程序员—— 9,包package相关知识点
2015-07-26 16:50
411 查看
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
黑马程序员—— 9,包package相关知识点
一:Package---》
Package就相当于一个文件夹,用来分类管理类文件的,也是一种封装的形式。包写在程序第一行,这样的话类名全称是:包名.类名
用以下例子解释,如图1所示
图1
其中图1编译的结果为图2
图2
由图2中,可以看出编译是可以的,但是运行就会出问题。既然编译没有问题那么就会产生对应的class文件,但是,为什么运行就出问题了呢?这是因为Java文件中存在包,所以在DOS窗口中编写的java Bao这种格式不正确,应该写Java BaoDemo.Bao,接着运行结果如图3所示还是不成功的。
图3
为什么还是会出错呢?因为既然有package,那么就要在当前目录下新建一个BaoDemo的文件夹,把之前已经产生的类文件放进去,本人此次试验的当前目录是E:\JAVAwenjian
图4
再运行一次就可以了如图5所示:
图5
但是每次都这么新建文件夹,很麻烦,所以有另外一个办法解决。
以下是一个例子:
图6
在DOS窗口的编写如图7所示:
图7
其中,javac -d . Bao2.java表示在当前目录下新建一个deg文件夹,并且在deg文件夹里面生成class文件。而且当中的-d表示地址,而后面的. 则是表示当前目录,所以,-d是用来指定目录位置的,当然也是可以指定其他位置的。
以下是包与包之间访问例子:
图8
图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文件
以下关于包与包之间访问的权限问题:
图11
图12
图13
编译运行过程如图14所示:
图14
由此我们可以得知访问权限的大小关系是:
这样的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
里面都是需要显示的资料
————————分割线——————
-----------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学习型技术博客、期待与您交流!------------
相关文章推荐
- 一道考察赋值语句的面试题
- 黑马程序员—— 8,关于异常Exception的知识点
- 面试题:close()和flush()的区别?
- (剑指Offer)面试题37:两个链表的第一个公共结点
- 黑马程序员——集合(一)
- 黑马程序员android培训51期
- 10 大帮助你获得理想的职业的操作系统技能
- 【面试加分项】java自定义注解之解析注解
- 黑马程序员——Java基础-图形界面
- 【LeetCode-面试算法经典-Java实现】【033-Search in Rotated Sorted Array(在旋转数组中搜索)】
- 最适合程序员编程的10款字体
- 【剑指Offer面试题】 九度OJ1511:从尾到头打印链表
- 【剑指Offer面试题】 九度OJ1510:替换空格
- 【剑指Offer面试题】九度OJ1384:二维数组中的查找
- 黑马程序员-Java反射机制
- 【面试加分项】java自定义注解之解析注解
- (剑指Offer)面试题36:数组中的逆序对
- 几个面试好地址
- 黑马程序员——Java基础-IO流
- 求子数组的最大和