资源预览内容
第1页 / 共29页
第2页 / 共29页
第3页 / 共29页
第4页 / 共29页
第5页 / 共29页
第6页 / 共29页
第7页 / 共29页
第8页 / 共29页
第9页 / 共29页
第10页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
项目4 :学生基本信息管理 任务4-5 实现访问控制 主要内容n包n设置类的访问权限n设置类成员的访问权限n方法中不同变量的作用域 n垃圾回收与finalize( )成员方法 包( package)n利用面向对象技术开发系统时,通常需要 定义许多类共同工作,为了更好地管理这 些类,JAVA中引入了包的概念。n像文件夹把各种文件组织在一起一样, JAVA中的包把各种类组织在一起,使得程 序功能清楚,结构更分明。n由于同一包中的类在缺省情况下可以互相 访问,通常把需要在一起工作的类放在一 个包里。 包(package)n包中定义的类必须通过包名访问,这样,尽 管同一包中的类不能同名,但不同包中可以 有同名的类。 n包还参与了Java的访问控制机制。类的成员 可以声明为包私有的,使得包中的其它类能 够访问,而包外的代码无法访问。这样,包 在类的外层定义了另一种封装的实现形式。 n利用包来管理类,可实现类的共享与复用( 类库)。包与目录n一个包可以包含若干个类文件,还可包含若干包。形 成嵌套的层次结构的包,嵌套时包名之间用小数点. 分 隔。n包名一般全小写(类名第一个字母大写)。n层次结构的包必须创建层次结构的目录。包a.b.c对应 目录abc。包名本身对应一个目录(用一个目录表 示)。n环境变量classpath 指定搜寻包的路径。定义包nJava所有的类都属于某个包。如果定义 类的时候没有指定包,就放置在默认包 中,默认包没有名字。n可以在类定义的顶部使用package语句 指定类所属的包。 package语句的格式 为:package 包名;Eclipse里创建包n菜单:File New Package,创建新的包n或新建类的时候,所指定并创建新的包。导入类n使用同一个包中的其他类,可直接 使用。n使用其他包中的类,可有两种方式 :n在引用类之前冠以包名作前缀(麻烦) java.util.Date today = new java.util.Date( ); n用import 语句将此包中的某些或所有类导入当前程 序:import语句nimport语句将指定包中的类引入当前的程序中,即告诉 编译到哪去找程序中使用的类。n import语句必须出现在所有类定义之前,package语句 之后。例:import java.util.* ; 该语句引入整个utility 类库(标准Java库的一部分) 例:import java.util.Vector ; 该语句只引入Vector类,utility类库中的其他类不可用。n导入整个包会存在两个弊端:n导入整个包时,JVM会保存包中所有元素的名字,这必然会使用额外 的RAM来存贮这些类和方法名,对于内存很小的小型设备就会降低性 能;n最大的弊端是涉及到Internet的带宽。当导入不在本地计算机上的整个 包时,浏览器不得不等到整个包中所有类都从网上下载过来之后才能 工作,浪费资源。 不能直接导入默认包中的类,要导入默认包的类,需先将其放入某个包中!例:定义和访问指定包中的类 n问题:n定义一个表示书本的类Book,包含在名为pack1 的包中。在默认包中定义类Example4_11,访问 类Book。n分析:nBook在pack1包中,因此,类Book的定义中必须 有package语句。类Example4_11在默认包中, 不需要package语句,但Example4_11访问类 Book,因此必须使用import导入Book。 程序源代码:/ Book.java package pack1; public class Book String title; double price; public Book(String t, double p) title = t; price = p; public void show() System.out.println(title); System.out.println(price); n/ Example4_11.javanimport pack1.Book; /导入pack1包中的类Booknpublic class Example4_11 nnpublic static void main(String args) nn Book b = new Book(“Java Guide“,23.5);n b.show();nnn程序运行结果:nJava Guiden23.5访问权限n类成员的权限修饰符:Java类成员有三个访问权限修饰符,用于设置类成员 的不同访问权限,分别为public、protected和private, 没有这些修饰符时,成员使用默认的访问控制权限。n类的权限修饰符:以上三个修饰符中,只有public可以用来修饰类。 类的访问权限 n定义类时,可以不使用权限修饰符,也可以用public将类 设置成公有的,类不能用另外两个权限修饰符。n使用public修饰的公有类对所有类都是可见的,既可以被 同一个包中的类访问,也可以被其它包中的类访问。n不用public修饰符的类仅仅在包内具有可见性,即只能被 同一个包中的类访问,不能被其它包中的类访问。练习:类的public修饰符、无修饰符的区别问题:n定义一个表示书本的类Book1,所有成员无权限修饰 符,包含在名为pack2的包中。在pack2包中另定义 类Example4_12,访问类Book1。然后将 Example4_12放到默认包中,观察出现什么错误。 分析:n本例子中,Example4_12访问Book1的成员,两个类 在同一包中时,Book1的成员用public、protected、 无修饰符时均能被Example4_12访问,两者不在同 一个包中时,Book1的成员只有用public修饰符才能 被Example4_12访问。类成员的访问权限 n与修饰类时一样: 用public修饰的成员 对所有类(包内和包外)都可见,无修 饰符的成员仅仅在包内具有可见性。n private修饰的私有成员仅仅在类的内 部具有可见性,不能被类以外的代码访 问。protected修饰的成员在包内具有 可见性,在其它包中,只能被该类的子 类继承。类成员的访问权限修饰饰符类类内包内其它包的子类类 内所有类类private是 否否否无是 是否否protected是 是是(注意:在不同包中, 只能在子类内访问,不 能在子类外访问)否public是 是是是示例:访问权限-1package test; public class Demo1 private int priInt; protected int proInt; int defInt; public int pubInt; void test() priInt=1; proInt=1; defInt=1; pubInt=1; 在这个例子中,同一个类内可以访 问任何访问权限的变量。示例:访问权限-2package test; public class Demo2 void test() Demo1 dm1=new Demo1(); dm1.priInt=1; /错误 dm1.proInt=1; dm1.defInt=1; dm1.pubInt=1; Demo2和Demo1在同一个包下,但 Demo2对Demo1中的private成员没 有访问权限。示例:访问权限-3package test; public class Demo3 extends Demo1 void test() this.priInt=1; /错误 this.proInt=1; this.defInt=1; this.pubInt=1; Demo3是Demo1的子类,而且在同 一个包下,Demo3也没有对Demo1 中的private成员没有访问权限。示例:访问权限-4package test.t1; import test.Demo1; public class Demo4 void test() Demo1 dm1=new Demo1(); dm1.priInt=1; /错误 dm1.proInt=1;/错误 dm1.defInt=1;/错误 dm1.pubInt=1; Demo4是和Demo1在不同包下,且 不是Demo1的子类,因此Demo4只 能访问Demo1中的public成员。示例:访问权限-5package test.t1; import test.Demo1; public class Demo5 extends Demo1 void test() /this.priInt=1;/错误 this.proInt=1; /this.defInt=1;/错误 this.pubInt=1; Demo5是Demo1在不同包下的子类,因此 与Demo4不同,它除了拥有对Demo1中的 public成员有访问权限外,还拥有对 Demo1的protected成员有访问权限。父类对象在子类中,只有public成员可见!方法中不同变量的作用域 n成员方法的定义中,方法体内的代码中可以出现 下列变量:类的成员变量,即域变量。形式参数列表中的变量,称为参变量。方法内部声明的变量,称为局部变量。n其中,成员变量在类中定义,可以被同一个类的 所有成员方法访问。参变量的作用域是这个变量 所在的方法,在这个方法外,参变量不可见。局 部变量的作用域是定义局部变量的语句块,语句 块外,局部变量不可见。方法中不同变量的作用域 n当参变量和类成员变量同名时,参变量的 作用域优先可见,要想使用类成员变量, 需要加this关键字。/如自动生成setters和getters垃圾回收与finalize( )成员方法 nJava使用new运算符把空闲的内存空间分配给对 象。Java通过垃圾回收(garbage collection) 自动 释放程序中不再被引用的对象的内存空间。n垃圾回收系统在后台自动回收对象,不需要程序 员的干预。它的工作方式是:当不存在对某对象 的任何引用时,该对象就被认定为没有存在的必 要了,它所占的内存就要被释放。垃圾回收与finalize( )成员方法 例如:Date d = new Date( );d = new Date( );d = null;第一行代码中,d引用第一个对象。第二 行代码中,d引用第二个对象,这时第一个对 象就无法引用到了,成了废弃的对象。同样 ,第三行代码中把null赋给d后,第二个对象 也无法引用到了。垃圾回收系统能够自动回 收这两个对象的内存空间。垃圾回收与finalize( )成员方法 n类的定义中,可以定义一个名为finalize( )的 成员方法,格式如下:protected void finalize( ) / 方法体n垃圾回收以前,如果有finalize( )方法,系统 自动调用对象的finalize( )方法。如果对象使 用了其它资源,例如打开文件或使用数据库 连接,可以在finalize( )方法中释放这些资源 。 小结n对象的生命周期有3个阶段:创建对象、使 用对象、删除对象对象的创建对象的使用对象的清除n对象创建时,若有构造方法,则系统自动调用 构造方法。对象清除时,若有finalize( )方法,则 系统自动调用finalize( )方法。作业n定义一个类表示学生,要求如下:n成员变量分别为String型的姓名、 String型的学号、int型的年龄、 MyDate型的入学日期,(MyDate类的 成员变量包括年、月、日)n为各类设置适当的成员方法。n练习在学生类中对MyDate类的调用。体会 不同的访问权限。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号