黑马程序员----包(package)
来源:互联网 发布:linux 显卡驱动安装 编辑:程序博客网 时间:2024/05/14 18:16
——- android培训、java培训、期待与您交流! ———-
包:package
1.对类文件进行分类管理;
2.给类提供多层命名空间;
3.写在程序文件的第一行;
4.类名的名称是:包名.类名;
5.包也是一种封装形式。
包用package关键字来定义:package pack;
包的文件名都是小写;
问题:
1.找不到类,名称错误;
2.目录中没有文件;新建文件夹.
自己生成包:
命令加参数:javac -d d:\java0217\day10
-d:指定这个包所存放的位置,也就是目录;
d:\java0217\day10:文件夹路径,如果是当前文件夹,可以用.代替,即javac -d .
javac -d c:myclass PackageDemo.java //在c盘下的myclass文件夹下面建立一个名为pack的包,包里面存放的是PackDemo.class文件。
包的出现可以让类文件和源文件相分离,好处在于,当对方想要拿程序的时候,只需要拷贝class文件即可,不用再拷贝源文件
可以用classpath指定包存放的位置:classpath指向包的父目录即可,不用加pack;
set classpath=c:\myclass //后面不用再写pack,pack和PackageDemo.class是一个整体,
运行:java pack.PackageDemo
包与包之间的访问:
不同包中的类该如何访问呢?
package pack;public class DemoA{public void show(){System.out.println("hello package");}}public class PackageDemo {public static void main(String[] args){pack.DemoA d=new pack.DemoA();d.show();}}javac -d c:myclass DemoA.java
javac -d c:myclass PackageDemo.java
编译失败:找不到符号DemoA
错误原因:类名写错了,因为类名的全名是包名.类名。
修改后重新编译:javac -d c:myclass PackageDemo.java
编译失败:pack软件包不存在;
错误原因:当前目录下没有这个包,包在myclass文件夹下。
解决方法:需要设置classpath,告诉jvm去哪里找指定的packb包:set classpath=c:myclass
修改后重新编译:javac -d c:myclass PackageDemo.java
编译错误:pack.DemoA在pack中不是公共的,无法从外部软件包中对其进行访问;
错误原因:DemoA在包里的权限不够大,有了包,范围变大,一个包中的类要被访问,必须要有足够大的权限;
解决方法:被访问的类加public关键字修饰.
重新编译:
javac -d c:myclass DemoA.java
javac -d c:myclass PackageDemo.java
编译失败:show方法在pack.DemoA中不是公共的,无法从外部软件包中对其进行访问;
错误原因:类公有后,被访问的成员也要公有才可以被访问;
解决方法,show方法加public关键字修饰,增加权限;
重新编译,通过。
运行:java pack.PackageDemo
总结:
包与包之间进行访问,被访问的包中的类以及类中的成员需要public修饰;
---------------------------------------------------------
不同包中的类能不能有关系呢?
不同包中的类可以相互继承,但是要记得在被继承的那个包里的类前面一定要加包名;
package pack_1;public class DemoB extends pack.DemoA{public void method(){System.out.println("demoB method run");show();//可以直接使用父类的方法show;}}public class PackageDemo {public static void main(String[] args){pack_1.DemoB d=new pack_1.DemoB();d.method();//可不可以建立父类DenoA的对象呢?可以 pack.DemoA p=new pack.DemoA(); p.show();}}编译:
javac -d c:\myclass DemoA.java
javac -d c:\myclass DemoB.java
javac -d c:\myclass PackageDeno.java
运行:
Java pack.PackageDemo
但是存在问题,不管是不是继承父类,都可以建立对象,因此Java给包中的子类提供了一个特殊权限:protected;
继承父类,就能拿到一些别人拿不到的东西;
public class DemoB extends pack.DemoA{public void method(){System.out.println("demoB method run");show();//可以直接使用父类的方法show;}}public class DemoA{protected void show() //被protected权限修饰;{System.out.println("hello package");}}加了保护权限之后,就不能再在主函数中直接建立父类的对象和调用父类方法;
总结:
不同包中的子类可以直接访问父类中被protected权限修饰的成员。
-------------------------------------------------------------
包与包之间可以使用的权限有两种:
public:公有权限;
protected:被保护权限;
权限的说明:(按权限大小)
public:公有权限;
protected:被保护权限;
default:默认权限;
private:私有权限;
public protected default private
同一个类中: Y Y Y Y
同一个包中: Y Y Y N
子类: Y Y N N
不同包中 Y N N N
protected在同一包中主要体现在覆盖上,权限大于等于就可以覆盖;
记住:一个Java文件中不能出现多于一个的公有类或者接口,
因为在命名的时候,当被public所修饰的时候,类名必须和文件名保持一致,如果出现多个,就会发生冲突;
解决方法:放在一个包中就可以。
包里面可以有多层包:(对类进行逐级存放,分层管理)
定义格式:
package pack.haha.heihei.hehe;
package packb.haha.heihei.hehe;public class DemoC{public void method(){}}
想要在packageDemo这个文件中建立Demo对象,该怎么做呢?
package pack;class PackageDemo{public static void main(String[] args){packb.haha.heihei.hehe.DemoC c=new packb.haha.heihei.hehe.DemoC();}}
发现建立对象很费劲,怎么办呢?
import关键字,可以帮我们简化包名的书写,导入的是包中的类;
package pack;
import packb.haha.heihei.hehe;//导入包,DemoC类就进入到当前文件中;
class PackageDemo{public static void main(String[] args){DemoC c=new DemoC();//直接写类名即可;}}
import packb.haha.heihei.*;//*表示所有文件;当前目录下的所有类导入到文件中;
但是比较占内存,不建议这样用。那怎么办呢?
建议不要写*,用哪个就导入哪个;
用eclipse不用写package,也不用写import,都可以自动导入;快捷键:ctrl+shift+o;
导入了两个包,但是这两个包里有重名的类,普通的建立对象的方法是不允许的,一编译会告诉你搞不清楚这个类到底是属于谁的;
怎么办?
建立对象的时候,必须加包名;
为了不让包名重复,定义包名的方式是:
可以使用url来完成定义,因为URL是唯一的。
www.itcast.cn
package cn.itcast.demo
package cn.itcast.test
Jar包:Java的压缩包
1.方便项目的携带;
2.方便于使用,只要在classpath设置jar路径即可;
3.数据库驱动,SSH框架等都是以jar包体现的。
jar包的建立需要使用jdk中的工具jar.exe;
package pack;import pack.*;class JarDemo{public static void main(String[] args){//创建A的对象;DemoA a=new DemoA();a.show();System.out.println("Hello jar package");}}编译:
javac -d c:\myclass DemoA.java
设置classpath:
set classpath=c:\myclass
编译JarDemo.java:
javac -d c:\myclass JarDemo.java
运行:
Java pack.JarDemo
压缩成jar包:
jar回车
jar -cf haha.jar packa pack
查看jar包中的文件:
jar -tf haha.jar
(jar包在创建的时候会自动生成一个文件夹,里面存放的是配置清单文件,这个文件可以被改动,改动之后jar包会具备特殊的意义或者操作方式。)
(jar包在图形化界面上可以被双击执行,类似于.exe)
删除myclass中的这两个文件之后,它们的父目录就不再是myclass而是jar包。
设置classpath=c:\myclass\haha.jar
当jar包中的文件很多时,可以使用下面的命令编辑成记事本文档来保存:(数据重定向)
jar -tf haha.jar >c:\1.txt
rt.jar:是Java的类库,Java的对象都在这里。
tools.jar:编译所属的类,如果删除了,编译就挂了。
src.zip:java的所有类的源文件。
native关键字:修饰本地方法;这个方法是看不到方法体的,因为它在调用windows系统的东西
(是哪个类型的虚拟机,就调用哪个类型的系统,先找虚拟机,虚拟机找系统)
0 0
- 黑马程序员----包(package)
- 黑马程序员---包(package)笔记
- 30.黑马程序员-包package
- 黑马程序员 Java面向对象——包(package)
- 黑马程序员学习(七) 练习题心得、包Package
- 黑马程序员:package、import、jar包介绍
- 黑马程序员-day10-面向对象(包package)
- 黑马程序员 Java面向对象——包(package) Object 类
- 黑马程序员_ java面对对象——包package
- 黑马程序员——其他2:package包
- 黑马程序员—— 9,包package相关知识点
- 黑马程序员—package
- 黑马程序员—Java面向对象(异常处理机制、package包、import导入包、jar包)
- 黑马程序员——第10天——(面向对象)包package,包与包之间的访问,导入import
- 黑马程序员-浅谈个人理解,oracle procedure-存储过程、Function-函数、 package-包
- 黑马程序员_面向对象三(异常Exception,包package,String类,StringBuffer)
- 黑马程序员_面向对象3_(异常Exception、包package、String类、StringBuffer类)
- 黑马程序员-JAVASE入门(异常,包)
- 修改linux系统默认启动级别
- VirtualBox中centos安装增强功能报错解决办法
- Linux系统使用iptables防火墙控制系统端口的方法
- maven中的坐标和仓库
- 当js中出现 a() is not a function
- 黑马程序员----包(package)
- hdu 1588
- 8.String to Integer (atoi)
- JAVA实现的单例模式
- 数字二进制表示中1的个数
- Andorid 如何监听app是否安装或卸载
- 数据测试读取和传输问题
- 数据存储结构
- manacher算法