资源预览内容
第1页 / 共42页
第2页 / 共42页
第3页 / 共42页
第4页 / 共42页
第5页 / 共42页
第6页 / 共42页
第7页 / 共42页
第8页 / 共42页
第9页 / 共42页
第10页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
面向对象程序设计基础(下),类变量(静态变量),类变量为类的各实例共享的变量。 static 静态变量 ; 位于类的内存区域中,为该类的各个对象共享. 无此限定符的变量是实例变量。 class ex int i ; static int j ; static final int k=10 ; - 为节省空间, final 常量可同时 定义为static,类ex j k=10,对象1 i : 3,对象2 i : 5,类变量(静态变量),实现各实例之间的通讯。 跟踪创建的实例数。 public class Count private int serial ; /成员变量 private static int counter = 0 ; /类变量 public Count() counter+; serial = counter ; 静态变量类似于某些语言中的全局变量。,类变量(静态变量),非private 的静态变量无须创建实例就可以从类的外部访问。 public class StaticVar public static int x ; public class test public void m() int m = StaticVar.x ; ,1,类变量(静态变量),class PhoneCard200 static final String connectNumber = “200”; static double additoryFee; long cardNumber ; int password; boolean connected; double balance; ,2,类变量(静态变量),public class a public static void main(String args) PhoneCard200 my200_1 = new PhoneCard200(); PhoneCard200 my200_2 = new PhoneCard200(); PhoneCard200.additoryFee = 0.1; System.out.println(“第一张200卡的接入号码:” + my200_1.connectNumber); System.out.println(“200卡接入号码:” + PhoneCard200.connectNumber); System.out.println(“第二张200卡的附加费: ” + my200_2.additoryFee); System.out.println(“200卡类的附加费:” + PhoneCard200.additoryFee); ,类方法( 静态方法),类方法: static 方法名() 使用类方法不用创建类的对象。调用这个方法时,应该使用类名做前缀,而不是某一个具体的对象名。 非static的方法是对象方法(或称实例方法)。 类方法中不能访问实例变量,而只能访问类变量(static方法 static域)和自己的方法参数。 类方法中不能直接使用本类中的实例方法,只能使用其他的static方法。 类方法中没有this值。,类方法( 静态方法),public class a public static void main(String args) System.out.println(Math.round(3.54); String s = to_char(2.718); System.out.println(“e=“ + s ); static String to_char(double x) return Double.toString(x); ,3,类方法( 静态方法),main方法是静态方法,这是为了系统在没有任何实例化对象之前可以运行一个应用程序。 如果main方法要调用本类的其它方法: 将这些方法设计成静态方法, 创建对象,使用对象方法。 一个静态方法不能被一个非静态方法所覆盖。,类的初始化-静态初始化器,由关键字static引导的一对大括号括起的语句组。用来完成类的初始化的工作, 与构造方法的区别: 构造方法是对每个新创建的对象初始化,而静态初始化器是对类自身进行初始化; 构造方法是在用new运算符产生新对象时由系统自动执行,而静态初始化器则是在它所属的类加载入内存时由系统调用执行; 不同于构造方法,静态初始化器不是方法,没有方法名、返回值和参数列表。,4,小结类与对象,面向对象的数据和方法: 一个类的对象虽然具有相同的属性,但对象却各不相同(属性值不同)。 一个类的对象方法虽然具有相同的代码,但表现不同,因为方法所操作的对象(数据)不同。 共享的数据和方法: 类属性 在同一类的实例中共享数据(该数据不属于一个对象,而属于一个类)。 类方法 不需要实例就能使用静态的方法和数据,虽然它们也能通过实例来访问。,小结类与对象,类名.域名 静态域,在类的空间里,是该类对象共享的单元 类名.方法名 静态方法 类方法的调用 类方法及域也可以用对象名调用,但最好用类名 对象名.属性名 实例变量 。提倡通过方法操作属性。 对象名.方法名 方法调用又称“消息传递”,实际上就是给指定对象发送消息:告诉它做什么,向它要信息(方法的返回值)。,小结类与对象,访问一个类: 创建该类的对象,并使用该类对象的可见属性与方法。 调用该类的可见静态方法,访问该类的可见静态属性。 继承该类。 final final类不能被继承。 final 方法不能被覆盖。 final 域不能被修改。,包(package),在操作系统中,目录用来组织文件,设置权限。 Java利用包来组织相关的类,并控制访问权限。 包是一种松散的类的集合。一般不要求处于同一个包中的类有明确的相互关系,如包含、继承等等。 由于同一包中的类在缺省情况下可以互相访问,所以为了方便编程和管理,通常把需要在一起工作的类放在一个包里。 利用包来管理类,可实现类的共享与复用(类库)。,编译单元,一个java源代码文件称之为一个编译单元。 一个编译单元中只能有一个public类,该类名与文件名相同。编译单元中的其他类是该主public类的支撑类。 经过编译,编译单元中的每个类都产生一个 .class文件。 java的工作程序是一串.class文件, JAVA解释器负责寻找、加载和解释这些文件。 (不象其它语言最终生成一个.exe的可执行文件),类的名字空间,所有类成员的名字都是相互隔离的。类A中的方法m1与类B中的方法m1互不相干,但类名就有冲突的问题了。 在一个Java程序运行过程中,某些类会从internet上自动下载,而用户并不知晓。所以在java中需要名字空间的完全控制,以便可以建立一个唯一的类名。 包用于类的名字空间管理。 作为包的设计人员,利用包来划分名字空间以避免类名冲突(package 和 import),包与目录,一个包要放在指定目录下。classpath 指定搜寻包的路径。 一个包可以包含若干个类文件,还可包含若干包。 包名本身又对应一个目录(用一个目录表示)。 包名可以有层次,以小数点分割。包名一般全小写(类名第一个字母大写) 。,p3,p2,d1,d2,类,classpath = d:d1; d:d1d2,p1,包,编译单元与包,对象三步曲: 打开包(import,package) 加载类(程序中只有类定义的一份拷贝) 建对象(用new运算符可以创建一个类的若干实例),编译 单元,当前包 package,其他包,其他包 import,编译单元与当前包,显式指定编译单元的当前包。 package 包名 ; 编译单元对当前包可以读写。 在一个编译单元中,只能有一个package语句,且为第一个语句。 如果编译单元中无package语句,则隐含的当前包是一个无名包(放在当前目录下)。 无名包中 的类是为了局部应用。 不管“当前包”是显式指定还是采用隐含值,总是当前名字空间的一部分。,使用其他包中的类,import语句将指定包中的类引入当前的名字空间,即告诉编译到哪去找程序中使用的类。 import语句不加载包中的类。 import语句必须出现在所有类定义之前。 例:import java.util.* ; 该语句引入整个utility 类库(标准Java库的一部分) 例:import java.util.Vector ; 该语句只引入Vector类,但utility类库中的其他类不可用。,从包中加载类,当程序需要建立一个类的对象,或是第一次访问类的静态成员时,会动态加载类文件。 JAVA解释器加载类过程: 将环境变量CLASSPATH包含的一个或多个目录作为起始目录。 解释器取出包名,将小数点换成斜杠,产生以CLASSPATH目录为起点的查找路径。 查找目录下的 .class文件 import p1.p2.* 转换为 p1p2*.class 或 p1/p2/*.class (取决于操作系统),创建包、添加类,package mypk ; public class myc,javac d d: myc.java 会在指定目录下建包,import mypk.* ; public class testa public static void main(String args) myc c = new myc() ; . ,set CLASSPATH=.;d:; %CLASSPATH%,5,jar文件,jar cf j.jar *.class 建立jar文件 jar tf j.jar 列表jar文件 java -cp j.jar test 执行jar文件中的类,访问控制符,访问控制符是一组起到限定类、域或方法是否可以被程序里的其他部分访问和调用的修饰符 。 类访问控制符 公共类 :public 类名 一般类 一个包中的类只能访问另一个包中的public类。 一般类只能在同一包中使用,一个包中的类不用说明可相互访问。 把常在一起协同工作的类放在一个包里是很自然的。,一个类作为整体对程序的其他部分可见,并不能代表类内的所有域和方法也同时对程序的其他部分可见,前者只是后者的必要条件 域和方法的可见性,域和方法的访问限定符,6,域和方法的访问限定符,为了使对象具有良好的封装性,一般将类的实例变量设计成私有。 为了使其它类或对象能够访问私有实例变量,本类必须提供访问私有变量的方法(公共方法)。 按照惯例,读私有变量的方法取名为get 写私有变量的方法取名为 set,接口,“接口”是抽象类的概念。 接口中的方法都是没有方法体的抽象方法。 接口中只能定义 static final 属性 。 接口定义的仅仅是实现某一特定功能的一组方法的对外接口和规范,而并没有真正地实现这个功能。 接口的功能实现是在“继承”了这个接口的各个类中完成的,由这些类来具体定义接口中所有抽象方法的方法体。 通常把对接口的“继承”称为“实现”。,接口的实现,Object,类,Abstract class,class,final class,接口,class,java单重继承,继承,实现,接口的定义,public interface 接口名 extends 父接口名列表 / 常量域声明 public static final 域类型 域名 = 常量值; / 抽象方法声明 public abstract 返回值类型 方法名( 参数列表 ) ; 接口是由常量和抽象方法组成的特殊类。,接口的实现,public class MyApplet extends Applet impl
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号