Java day13【第二十三章】包的定义及使用
【第二十三章】包的定义及使用
三.包的静态导入:
假如现在有这么一个类,这个类中的全部方法都是static方法,那么按照原始的做法肯定要导入程序所在的包,而后才可以通过类名称调用这些静态方法;
范例:定义一个MyMath
package cn.mldn.util; public class MyMath{ public static int add(int...args){ int sum = 0; for (temp : args ){ sum += temp; } return sum; } public static int sub(int x ,int y){ return x - y; } }
范例:传统调用
package cn.mldn.test; import cn.mldn.util.*; public class TestMath{ public static void main(String args[]){ System.out.println(MyMath.add(10,20,30)); System.out.println(MyMath.sub(10,20)); } }
从JDK1.5开始,对于类中全部由静态方法提供的特殊类是可以采用静态导入形式的。
范例:静态导入处理:
package cn.mldn.test; import static cn.mldn.util.MyMath.*; public class TestMath{ public static void main(String args[]){ System.out.println(add(10,20,30)); System.out.println(sub(10,20)); } }
可以由主方法直接调用
四.Jar命令
当一个项目开发完成之后一定会存在有大量的*.class文件,对于这些文件的管理,我们往往使用Jar压缩打包处理
下面通过程序具体演示来实现jar的使用与配置
1.
package cn.mldn.util; public class Message{ public String getContent(){ return "www.mldn.com"; } }
2.对程序进行编译与打包处理:
(1.)对程序打包编译:
javac -d . Message.java
(2.)此时会形成cn的包,现在将其打包为mldn.jar
jar -cvf mldn.jar cn
|- ”-c“:创建一个新的jar文件
|- “-v”:得到一个详细输出
|- ”-f“:设置要生成jar文件的名称
3.每一个*.jar文件都是一个独立的程序路径,如果要想在java程序之中使用此路径,则必须通过classpath进行配置。
比如我已经定义了一个Message.java类,现在要用TestMessage进行测试,就必须在TestMessage中设置classpath
4.随后就可以正常进行TestMessage类。
如果程序出现:java.lang.NoClassDefFoundError,那么一定是*.jar包没用配置正确。
五.系统常见包:
Java语言自身的支持类库:
1.java自身提供的(除了JDK提供的类库之外还有一些标准)
2.是由第三方厂商提供的Java支持类库,可以完成你所需要的功能
JDK之中以后大量的类库,这些类库都是封装在不同的开发包中的
1.java.lang:像String、Number、Object等这个包里面,这个包在1.1之后默认导入
2.java.lang.reflect:反射机制处理包,所有的设计从此开始
3.java.util:工具类的定义,包括数据结构的定义;
4.java.io:进行输入与输出流操作的程序包
5.java.net:网络程序开发的程序包
6.java.sql:进行数据库编程的开发包
7.java.applet:java最原始的使用形式。直接嵌套在网页上执行的程序类 ;
|-现在的程序已经以Application为主了(有主方法的程序);
8.java.awt、javax.swing:java的图形界面开发包(GUI),其中awt是属于重量级的组件,swing是轻量级的组件
六.访问控制权限:
对于封装而言主要的实现依靠的就是访问的控制权限,而访问控制权限有四种:private、default、protected、public
NO | 访问范围 | private | default | protected | public |
1 | 同一包中的同一类 | √ | √ | √ | √ |
2 | 同一包中的不同类 | √ | √ | √ | |
3 | 不同包的子类 | √ | √ | ||
4 | 不同包的所有类 | √ |
在整个访问控制权限的处理之中,只有protected(受保护)的权限是一个比较新的概念。下面对这个权限进行说明:
1.cn.mldn.a.Message类:提供有protected访问权限
2.cn.mldn.b.NetMessage类:直接访问protected属性
范例:定义Message类
package cn.mldn.a; public class Message{ protected String info = "www.mldn.com"; } }
范例:定义子类,与子类不在同一个包中:
package cn.mldn.b; import cn.mldn.a.Message; public class NetMessage extends Message{ public void print(){ System.out.println(super.info); } }
范例:编写测试类,通过子类实现:
package cn.mldn.test; import cn.mldn.b.*; public class TestMessage{ public static void main(String args[]){ new NetMessage().print(); } }
错误范例:在测试类中直接访问Message的属性
package cn.mldn.test; import cn.mldn.a.*; public class TestMessage{ public static void main(String args[]){ System.out.println(new Message().info); } }
在程序封装一共有三个对应的访问权限:private、default、protected,但是如果每次在使用的时候在区分会比较麻烦所以可以给出一个参考的选择方案(90%):
1.只要是进行属性的定义,全部使用private;
2.只要是进行方法的定义,全部使用public;