1 包机制
问题:当定义了多个类的时候,可能会发生类名的重复问题。
在java中采用包机制处理开发者定义的类名冲突问题。
怎么使用java的包机制呢?
- 使用package 关键字。
- package 包名。
问题:
- javac PackDemo1.java编译没有问题。
- java PackDemo1 运行出错。
错误原因分析:
在当前目录下找不到有pack目录,更加找不到pack目录下面的PackageDemo1.java文件。
解决办法:
- 自己在当前目录下新建一个pack目录。
- 执行Java pagk.PackageDemo1命令。(包其实就是文件夹).
存在的问题:使用包机制的话,我们是否每次都要自己创建一个文件夹呢?
解决:
在编译的时候则可以指定类文件存放的文件夹了。
javac -d . PackageDemo1.java -d 后面跟着就是包名,指定包存放的路径。
包的优点
- 防止类文件冲突。
- 使源文件与类文件分离,便已软件最终发布。
注意细节
- 一个java类只能定义在一个包中。
- 包语句肯定是描述类的第一条语句。
包机制引发的问题
有了包之后访问类每次都需要把包名和类名写全。
解决:使用import语句。
格式: import 包名.类名 ;
注意细节:
- 如果想使用一个包中的许多类时,这时不需要多条的导入语句,使用 “*”号通配符代表所有的类。
- 使用*时不能导入包中的子类包的class文件。
- import语句可以是多条.
2 访问修饰符
访问修饰符是用来控制类、属性、方法的可见性的关键字称之为访问修饰符。
- public 一个类中,同一包中,子类中,不同包中
- protected 一个类中,同一包中,子类中
- default 一个类中,同一包中
- private 一个类中
- (修饰类成员)类成员
- 成员使用private修饰只在本类中使用。
- 如果一个成员没有使用任何修饰符,就是default,该成员可以被包中的其
- 他类访问。
- protected成员被protected修饰可以被包中其他类访问,并且位于不同
- 包中的子类也可以访问。
- public修饰的成员可以被所有类访问。
- (修饰类)类
- 类只有两种public和默认(成员内部类可以使用private))
- 父类不可以是private和protected,子类无法继承
- public类可以被所有类访问
- 默认类只能被同一个包中的类访问
3 Jar包
1:jar就是打包文件
jar文件时一种打包文件java active File,与zip兼容,称之为jar包
开发了很多类,需要将类提供给别人使用,通常以jar包形式提供.当项目写完之后,需要及将class字节码文件打包部署给客户。如何打包?可以使用jar命令.
2:jar命令
1:jar工具存放于jdk的bin目录中(jar.exe)
2:jar工具:主要用于对class文件进行打包(压缩)
3:dos中输入jar查看帮助
3:案例使用jar命令
将day10中的cn文件打包为名字为test.jar文件(cn 文件是使用javac -d 编译带包的class文件夹)
jar cvf test.jar cn
详细命令:
1:jar cf test.jar cn 在当前目录生成test.jar 文件,没有显示执行过程
2:jar cvf test.jar cn 显示打包中的详细信息
3:jar tf test.jar 显示jar文件中包含的所有目录和文件名
4:jar tvf test.jar 显示jar文件中包含的所有目录和文件名大小,创建时间详
细信息
5:jar xf test.jar 解压test.jar到当前目录,不显示信息
6:jar xvf test.jar 解压test.jar到当前目录,显示详细信息
7:可以使用WinRaR进行jar解压
8;将两个类文件归档到一个名为 test2.jar 的归档文件中:
jar cvf test2.jar Demo3.class Demo4.class
9:重定向
1:tvf可以查看jar文件内容,jar文件大,包含内容多,dos看不全。
2:查看jdk中的rt.jar 文件 jar tvf rt.jar
3:jar tvf rt.jar>d:\rt.txt
4 模板设计.
设计模式就是为了解决某类事情提出的解决方法。
案例:计算一段程序的执行时间
存在问题:
- 计算的程序的可变的。
- 把会改变的程序抽取出来单独做一个方法。
- 但是该方法不能确定运行的代码,声明为抽象的方法。
- 创建实现类继承并实现父类的未实现的函数。
- 为了避免子类重写父类的模版代码,需要将模版代码修饰为final
案例二:炒菜做饭