——包的定义及导入3.6封装本节目标了解多人开发的问题掌握包的作用及定义掌握包的导入语法及导入限制了解系统常用包掌握Java新特性——静态导入掌握jar命令的使用掌握四种访问控制权限的作用多人开发在Java中,可以将一个大型项目中的类分别独立出来,分门别类地存到文件里,再将这些文件一起编译执行,如此的程序代码将更易于维护。多人开发的问题如果有多个开发人员共同开发同一个项目的时候,则肯定会出现类名称相同的情况。那么这样一来就会比较麻烦包的定义package是在使用多个类或接口时,为了避免名称重复而采用的一种措施,直接在程序中加入package关键字即可。包的定义格式:package包名称.子包名称;为程序打包packageorg.chj.demo08;//定义一个包classDemo{//定义Demo类publicStringgetInfo(){//返回信息returnHelloWorld!!!;}}publicclassPackageDemo01{publicstaticvoidmain(String[]args){System.out.println(newDemo().getInfo());//实例化本包对象}}程序编译:javac-d.PackageDemo01.javaimport语句之前所讲解的程序,两个类是存放在同一个包中的,因此代码与之前没有什么根本的不同,但是如果几个类存放在不同的包中,则在使用类的时候就必须通过import语句导入。语法:import包名称.子包名称.类名称;手工导入所需要的类import包名称.子包名称.*;由JVM自动加载所需要的类/*Demo.java*/packageorg.chj.demo08.a;//定义一个*.a包classDemo{//定义Demo类publicStringgetInfo(){//返回信息returnHelloWorld!!!;}}/*ImportDemo.java*/packageorg.chj.demo08.b;//放在不同的包中importorg.chj.demo08.a.Demo;//导入不同包中的Demo类publicclassImportDemo01{publicstaticvoidmain(String[]args){System.out.println(newDemo().getInfo());//实例化本包对象}}关于“publicclass”与“class”声明类的完整补充在本书的一开始,曾经讲解过,如果一个类声明为publicclass则文件名称必须与类名称一致,而且在一个类中只能有一个publicclass,而如果使用class声明一个类,则文件名称可以与类名称不一致,但是执行的时候必须执行生成的class文件名称。除了这些之外,publicclass和class还在包的访问上有所限制,如果一个类只在本包中访问,不需要被外包访问,则直接声明成class即可,而如果一个类需要被外包访问,则必须声明为publicclass。包导入的两种方式importorg.chj.demo08.a.*;importorg.chj.demo08.a.Demo;系统常见包No.包名称作用1java.lang此包为基本的包,像String这样的类就都保存在此包之中,在JDK1.0的时候如果想编写程序,则必须手工导入此包,但是随后的JDK解决了此问题,所以此包现在为自动导入。2java.lang.reflect此包为反射机制的包,是java.lang的子包,在Java常用类库中会介绍。3java.util此包为工具包,一些常用的类库、日期操作等等都在此包之中,如果把此包掌握精通各种设计思路都好理解。4java.text提供了一些文本的处理类库。5java.sql数据库操作包,提供了各种数据库操作的类和接口。6java.net完成网络编程。7java.io输入、输出处理。8java.awt包含了构成抽象窗口工具集(abstractwindowtoolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。9javax.swing此包用于建立图形用户界面,此包中的组件相对于java.awt包而言是轻量级组件。JAVA新特性——静态导入在JDK1.5之后提供了静态导入功能,那么什么叫静态导入呢?如果一个类中的方法全部是使用static声明的静态方法,则在导入的时候就可以直接使用“importstatic”的方式导入,导入的格式如下:importstatic包.类.*;jar命令的使用当开发者为客户开发出了一套JAVA类之后,肯定要把这些类交给用户使用,但是如果所有的类是直接通过*.class的格式给用户,则会比较麻烦,所以一般情况下会将这些*.class文件压缩成一个文件交付给客户使用,那么这样的文件就称为jar文件(JavaArchiveFile),如果要想生成jar文件,直接使用JDK中bin目录里的jar.exe就可以将所有的类文件进行压缩。Jar命令中的主要参数:“c”创建新的文档“v”生成详细的输出信息“f”指定存档的文件名将下面的程序打成jar包packageorg.chj.demo01.demo;publicclassHello{publicStringgetInfo(){returnHello;}}将其打包编译:javac–d.Hello.java将其打成jar包:jar–cvfmy.jarorg如何使用jar包packageorg.chj.demo01;importorg.chj.demo01.demo.Hello;publicclassImportJarDemo{publicstaticvoidmain(Stringargs[]){Hellohello=newHello();System.out.println(hello.getInfo());}}setclasspath=.;e:\my.jar;访问控制权限Java中存在四种访问权限:private访问权限default(默认)访问权限protected访问权限public访问权限范围privatedefaultprotectedpublic同一类同一包中的类不同包的子类其他包中的类下一节内容封装性本节目标掌握封装的产生目的掌握封装的实现掌握setter和getter方法的定义为什么要有封装classPerson{Stringname;//声明姓名属性intage;//声明年龄属性publicvoidtell(){//取得信息的方法System.out.println(姓名:+name+,年龄:+age);}}publicclassEncDemo01{publicstaticvoidmain(Stringargs[]){Personper=newPerson();//声明并实例化对象per.name=张三;//为name属性赋值per.age=-30;//为age属性赋值per.tell();//调用方法}}封装的实现为属性封装:private属性类型属性名称;为方法封装:private方法返回值方法名称(参数列表){}classPerson{privateStringname;//声明姓名属性privateintage;//声明年龄属性publicvoidtell(){//取得信息的方法System.out.println(姓名:+name+,年龄:+age);}}publicclassEncDemo02{publicstaticvoidmain(Stringargs[]){Personper=newPerson();per.name=张三;//错误,无法访问封装属性per.age=-30;//错误,无法访问封装属性per.tell();}}访问封装的内容需要编写setter方法和getter方法例如privateStringname;setter(设置):publicvoidsetName(Stringn){}getter(取得):publicStringgetName(){}setter及getterclassPerson{privateStringname;privateintage;publicvoidtell(){System.out.println(姓名:+getName()+,年龄:+getAge());}publicStringgetName(){returnname;}publicvoidsetName(Stringn){name=n;}publicintgetAge(){returnage;}publicvoidsetAge(inta){age=a;}}加入验证可以在setter方法中对设置的内容进行验证publicvoidsetAge(inta){//设置年龄if(a=0&&a150){//在此处加上验证代码age=a;}}封装的类图表示Person--nameage:String:int+++++tell()getName()setName(Stringn)getAge()setAge(inta):void:String:void:int:void