资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级, 包的定义及导入,3.6 封 装,1,本节目标,了解多人开发的问题,掌握包的作用及定义,掌握包的导入语法及导入限制,了解系统常用包,掌握Java新特性 静态导入,掌握jar命令的使用,掌握四种访问控制权限的作用,2,多人开发,在Java中,可以将一个大型项目中的类分别独立出来,分门别类地存到文件里,再将这些文件一起编译执行,如此的程序代码将更易于维护。,3,多人开发的问题,如果有多个开发人员共同开发同一个项目的时候,则肯定会出现类名称相同的情况。那么这样一来就会比较麻烦,4,包的定义,package是在使用多个类或接口时,为了避免名称重复而采用的一种措施,直接在程序中加入package关键字即可。,包的定义格式:,package 包名称.子包名称 ;,5,为程序打包,package,org.chj.demo08;/ 定义一个包,class,Demo/ 定义Demo类,public,String getInfo()/ 返回信息,return,Hello World! ;,public,class,PackageDemo01 ,public,static,void,main(String args) ,System.,out,.println(,new,Demo().getInfo() ;/ 实例化本包对象,程序编译:javac -d . PackageDemo01.java,6,import语句,之前所讲解的程序,两个类是存放在同一个包中的,因此代码与之前没有什么根本的不同,但是如果几个类存放在不同的包中,则在使用类的时候就必须通过import语句导入。,语法:,import 包名称.子包名称.类名称 ;,手工导入所需要的类,import 包名称.子包名称.* ;,由JVM自动加载所需要的类,7,/*Demo.java*/,package org.chj.demo08.a; / 定义一个*.a包,class Demo/ 定义Demo类,public String getInfo()/ 返回信息,return Hello World! ;,8,/*ImportDemo.java*/,package org.chj.demo08.b; / 放在不同的包中,import org.chj.demo08.a.Demo; /导入不同包中的Demo类,public class ImportDemo01 ,public static void main(String args) ,System.out.println(new Demo().getInfo() ;/ 实例化本包对象,9,关于“public class”与“class”声明类的完整补充,在本书的一开始,曾经讲解过,如果一个类声明为public class则文件名称必须与类名称一致,而且在一个类中只能有一个public class,而如果使用class声明一个类,则文件名称可以与类名称不一致,但是执行的时候必须执行生成的class文件名称。除了这些之外,public class和class还在包的访问上有所限制,如果一个类只在本包中访问,不需要被外包访问,则直接声明成class即可,而如果一个类需要被外包访问,则必须声明为public class。,10,包导入的两种方式,import org.chj.demo08.a.*;,import org.chj.demo08.a.Demo;,11,系统常见包,12,JAVA新特性 静态导入,在JDK 1.5之后提供了静态导入功能,那么什么叫静态导入呢?如果一个类中的方法全部是使用static声明的静态方法,则在导入的时候就可以直接使用“import static”的方式导入,导入的格式如下:,import static 包.类.* ;,13,jar命令的使用,当开发者为客户开发出了一套JAVA类之后,肯定要把这些类交给用户使用,但是如果所有的类是直接通过*.class的格式给用户,则会比较麻烦,所以一般情况下会将这些*.class文件压缩成一个文件交付给客户使用,那么这样的文件就称为jar文件(Java Archive File),如果要想生成jar文件,直接使用JDK中bin目录里的jar.exe就可以将所有的类文件进行压缩。,14,Jar 命令中的主要参数:,“c” 创建新的文档,“v”生成详细的输出信息,“f”指定存档的文件名,15,将下面的程序打成jar包,package org.chj.demo01.demo;,public class Hello,public String getInfo(),return Hello;,将其打包编译:,javac d . Hello.java,将其打成,jar,包 :,jar cvf my.jar org,16,如何使用jar包,package org.chj.demo01;,import org.chj.demo01.demo.Hello;,public class ImportJarDemo,public static void main(String args),Hello hello=new Hello();,System.out.println(hello.getInfo();,set classpath=.;e:my.jar;,17,访问控制权限,Java中存在四种访问权限:,private访问权限,default(默认)访问权限,protected访问权限,public访问权限,18,下一节内容,封装性,19,本节目标,掌握封装的产生目的,掌握封装的实现,掌握setter和getter方法的定义,20,为什么要有封装,class Person ,String name;/ 声明姓名属性,int age;/ 声明年龄属性,public void tell() / 取得信息的方法,System.,out,.println(姓名: + name + ,年龄: + age);,public class EncDemo01 ,public static void main(String args) ,Person per = new Person();/ 声明并实例化对象,per.name = 张三;/ 为name属性赋值,per.age = -30;/ 为age属性赋值,per.tell();/ 调用方法,21,封装的实现,为属性封装:private 属性类型 属性名称 ;,为方法封装:private 方法返回值 方法名称(参数列表),class Person ,private String name;/ 声明姓名属性,private int age;/ 声明年龄属性,public void tell() / 取得信息的方法,System.,out,.println(姓名: + name + ,年龄: + age);,public class EncDemo02 ,public static void main(String args) ,Person per = new Person();,per.name = 张三;/ 错误,无法访问封装属性,per.age = -30;/ 错误,无法访问封装属性,per.tell();,22,访问封装的内容,需要编写setter 方法和getter方法,例如,private String name;,setter(设置):,public void setName(String n) ,getter(取得):,public String getName() ,23,setter及getter,class,Person ,private,String name;,private,int,age;,public,void,tell() ,System.,out,.println(姓名: + getName() + ,年龄: + getAge();,public,String getName() ,return,name;,public,void,setName(String n) ,name = n;,public,int,getAge() ,return,age;,public,void,setAge(,int,a) ,age = a;,24,加入验证,可以在setter方法中对设置的内容进行验证,public,void,setAge(,int,a) / 设置年龄,if,(a = 0 & a 150) / 在此处加上验证代码,age = a;,25,封装的类图表示,26,
展开阅读全文