《面向对象程序设计基础下精选文档.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计基础下精选文档.ppt(76页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、面向对象程序设计基础下本讲稿第一页,共七十六页包(package)n在操作系统中,目录用来组织文件,设置权限。nJava利用包来组织相关的类,并控制访问权限。n包是一种松散的类的集合。一般不要求处于同一个包中的类有明确的相互关系,如包含、继承等等。n由于同一包中的类在缺省情况下可以互相访问,所以为了方便编程和管理,通常把需要在一起工作的类放在一个包里。n利用包来管理类,可实现类的共享与复用(类库)。本讲稿第二页,共七十六页编译单元n一个java源代码文件称之为一个编译单元。n一个编译单元中只能有一个public类,该类名与文件名相同。编译单元中的其他类是该主public类的支撑类。n经过编译,
2、编译单元中的每个类都产生一个.class文件。njava的工作程序是一串.class文件,JAVA解释器负责寻找、加载和解释这些文件。(不象其它语言最终生成一个.exe的可执行文件)本讲稿第三页,共七十六页类的名字空间n所有类成员的名字都是相互隔离的。类A中的方法m1与类B中的方法m1互不相干,但类名就有冲突的问题了。n在一个Java程序运行过程中,某些类会从internet上自动下载,而用户并不知晓。所以在java中需要名字空间的完全控制,以便可以建立一个唯一的类名。n包用于类的名字空间管理。n作为包的设计人员,利用包来划分名字空间以避免类名冲突(package和import)本讲稿第四页,
3、共七十六页包与目录n一个包可以包含若干个类文件,还可包含若干包。n一个包要放在指定目录下。nCLASSPATH环境变量指定搜寻包的路径。n包名本身又对应一个目录(用一个目录表示)。p3 p2d:d1d2类classpath=d:d1;d:d1d2 p1包对应的目录本讲稿第五页,共七十六页编译单元与当前包n显式指定编译单元的当前包。package包名;n编译单元对当前包可以读写。n在一个编译单元中,只能有一个package语句,且为第一个语句。n包名可以有层次,以小数点分割。n包名一般全小写(类名第一个字母大写)。n如果编译单元中无package语句,则隐含的当前包是一个无名包(放在当前目录下)
4、。n实际编程中不提倡在无名包中定义类。本讲稿第六页,共七十六页包和源文件的存储位置n多数开发工具会按照包名对应的目录结构存储源文件。下面的图右侧显示了在NetBeans工程中,源文件和编译生成的类文件所在的目录结构。package bo;public class Login /实现代码hrMgnsrcbuildclassesboboLogin.javaLogin.class本讲稿第七页,共七十六页使用包中的类nimport语句将指定包中的类引入当前的名字空间,即告诉编译到哪去找程序中使用的类。nimport语句必须出现在所有类定义之前,但应在包声明之后。例:importjava.util.*;
5、该语句引入整个utility类库(标准Java库的一部分)例:importjava.util.Vector;该语句只引入Vector类,但utility类库中的其他类不可用。本讲稿第八页,共七十六页从包中加载类n当程序需要建立一个类的对象,或是第一次访问类的静态成员时,会动态加载类文件。nJAVA解释器加载类过程:=将环境变量CLASSPATH包含的一个或多个目录作为起始目录。=解释器取出包名,将小数点换成斜杠,产生以CLASSPATH目录为起点的查找路径。=查找目录下的.class文件nimportp1.p2.*转换为p1p2*.class或p1/p2/*.class(取决于操作系统)本讲稿
6、第九页,共七十六页编译单元与包n不管“当前包”是显式指定还是采用隐含值,总是当前名字空间的一部分。nimport语句是将其他包的类引入当前的名字空间。n对象三步曲:=打开包(import)=加载类(程序中只有类定义的一份拷贝)=建对象(用new运算符可以创建一个类的若干实例)编译单元当前包 package其他包其他包 import本讲稿第十页,共七十六页使用javac创建包对应的目录packagemypk;publicclassTestPkjavacdd:TestPk.java会在该d:下建包目录importmypk.*;publicclassTestpublicstaticvoidmain(
7、Stringargs)TestPk tp=newTestPk();.setCLASSPATH=d:;%CLASSPATH%1本讲稿第十一页,共七十六页jar文件njar是JDK提供的一个实用工具,可将多个类文件压缩在一个文件中,生成的文件的扩展名为.jar,默认的压缩算法为zip。njar的用法:jarcfj.jar*.class建立jar文件jartfj.jar列出jar文件中包含的所有文件njar文件将类文件打包成一个文件,方便了类文件的分发,jar文件也被称为类库文件本讲稿第十二页,共七十六页互联网上的jar文件n互联网上有很多类库供开发者使用,其中Apache组织的JakartaCom
8、mons项目包含了许多实用类库,可在http:/commons.apache.org下载这些类库。Jakarta commons类库下载页面Manning出版社的Jakarta Commons书本讲稿第十三页,共七十六页d:liblib1.jar;d:liblib2.jar;%classpath%jar文件和CLASSPATH环境变量n如果在编译或运行时需要使用jar类库提供的类,可以将jar文件列入在classpath环境变量中,这样javac和java这两个指令在执行时都会在classpath所指定的jar文件中搜索需要的类文件。n例如,假设某2个jar文件分别为lib1.jar和lib2
9、.jar,存放d:lib目录中,如果在编译或运行Java程序时需要引用这两个jar文件中的类,则可在控制面板-系统对话框中将classpath环境变量的值设置为:本讲稿第十四页,共七十六页类变量(静态变量)n类变量为类的各实例共享的变量。static静态变量;n位于类的内存区域中,为该类的各个对象共享.n无此限定符的变量是实例变量。classexinti;staticintj;staticfinalintk=10;-n为节省空间,final常量可同时定义为static类exjk=10对象1i :3对象2i :5本讲稿第十五页,共七十六页类变量(静态变量)n实现各实例之间的通讯。n跟踪创建的实例
10、数。publicclassCountprivateintserial;/成员变量privatestaticintcounter=0;/类变量publicCount()counter+;serial=counter;n静态变量类似于某些语言中的全局变量。本讲稿第十六页,共七十六页类变量(静态变量)n非private的静态变量无须创建实例就可以从类的外部访问。publicclassStaticVarpublicstaticintx;publicclasstestpublicvoidm()intm=StaticVar.x;2本讲稿第十七页,共七十六页类变量(静态变量)class PhoneCard2
11、00static final String connectNumber=“200”;static double additoryFee;long cardNumber;int password;boolean connected;double balance;3本讲稿第十八页,共七十六页类变量(静态变量)publicclassapublicstaticvoidmain(Stringargs)PhoneCard200my200_1=newPhoneCard200();PhoneCard200my200_2=newPhoneCard200();PhoneCard200.additoryFee=0.
12、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);本讲稿第十九页,共七十六页类方法(静态方法)n类方法:static方法名()n使用类方法不用创建类的对象。调用这个方法时,应该使用类名做
13、前缀,而不是某一个具体的对象名。n非static的方法是对象方法(或称实例方法)。n类方法中不能访问实例变量,而只能访问类变量(static方法static域)和自己的方法参数。n类方法中不能直接使用本类中的实例方法,只能使用其他的static方法。n类方法中没有this值。本讲稿第二十页,共七十六页类方法(静态方法)publicclassapublicstaticvoidmain(Stringargs)System.out.println(Math.round(3.54);Strings=to_char(2.718);System.out.println(“e=“+s);staticStri
14、ngto_char(doublex)returnDouble.toString(x);4本讲稿第二十一页,共七十六页类方法(静态方法)nmain方法是静态方法,这是为了系统在没有任何实例化对象之前可以运行一个应用程序。n如果main方法要调用本类的其它方法:=将这些方法设计成静态方法,=创建对象,使用对象方法。n一个静态方法不能被一个非静态方法所覆盖。本讲稿第二十二页,共七十六页静态导入nJDK1.5引入了静态导入:importstatic包名.类名.静态属性或方法名;或importstatic包名.类名.*;n通过静态导入,使用类中的静态成员时,可以省略成员前的类名。n例:importsta
15、ticjava.lang.Math.*;/导入Math类所有静态成员importstaticjava.lang.Math.sin;/明确导入Math的sin方法/doubler1=Math.sin(2*Math.PI);/以前的调用方式doubler2=sin(2*PI);/静态导入后,简化的调用方式本讲稿第二十三页,共七十六页类的初始化-静态初始化器n由关键字static引导的一对大括号括起的语句组。用来完成类的初始化的工作,n与构造方法的区别:=构造方法是对每个新创建的对象初始化,而静态初始化器是对类自身进行初始化;=构造方法是在用new运算符产生新对象时由系统自动执行,而静态初始化器则是
16、在它所属的类加载入内存时由系统调用执行;=不同于构造方法,静态初始化器不是方法,没有方法名、返回值和参数列表。5本讲稿第二十四页,共七十六页小结类与对象n面向对象的数据和方法:=一个类的对象虽然具有相同的属性,但却各不相同(属性值不同)。=一个类的对象方法虽然具有相同的代码,但表现不同,因为方法所操作的对象(数据)不同。n共享的数据和方法:=类属性在同一类的实例中共享数据(该数据不属于一个对象,而属于一个类)。=类方法不需要实例就能使用静态的方法和数据,虽然它们也能通过实例来访问。本讲稿第二十五页,共七十六页小结类与对象n类名.属性名静态属性,在类的空间里,是该类对象共享的单元n类名.方法名静
17、态方法类方法的调用n类方法和属性也可以用对象名调用,但最好用类名=通过静态导入,可以直接使用静态属性名或静态方法名(JDK1.5)n对象名.属性名实例变量。提倡通过方法操作属性。n对象名.方法名方法调用又称“消息传递”,实际上就是给指定对象发送消息:告诉它做什么,向它要信息(方法的返回值)。本讲稿第二十六页,共七十六页小结类与对象n访问一个类:=创建该类的对象,并使用该类对象的可见属性与方法。=调用该类的可见静态方法,访问该类的可见静态属性。=继承该类。nfinal=final类不能被继承。=final方法不能被覆盖。=final属性不能被修改。本讲稿第二十七页,共七十六页访问控制符n访问控制
18、符是一组起到限定类、域或方法是否可以被程序里的其他部分访问和调用的修饰符。n类访问控制符=公共类:public类名=一般类n一个包中的类只能访问另一个包中的public类。n一般类只能在同一包中使用,一个包中的类不用说明可相互访问。n把常在一起协同工作的类放在一个包里是很自然的。本讲稿第二十八页,共七十六页n一个类作为整体对程序的其他部分可见,并不能代表类内的所有域和方法也同时对程序的其他部分可见,前者只是后者的必要条件n属性和方法的可见性属性和方法的访问限定符public公共属性和公共方法,可被任何类使用。protected可被同包中其他类使用。可被子类继承(包括位于不同包中的子类)不同包,
19、只能被继承,不能使用无访问限定符 可被同包中其他类使用。不同包,不能使用,也不能继承private只限在本类内使用。本讲稿第二十九页,共七十六页属性和方法的访问限定符n为了使对象具有良好的封装性,一般将类的非静态属性设计成私有。n为了使其它类或对象能够访问这些私有属性,本类必须提供访问私有属性的方法(公共方法)。n按照惯例,读私有属性的方法取名为get写私有属性的方法取名为set,get/set后面跟上属性的名称,其中属性的第一个字母要大写。这些方法在术语上叫做Setter/Getter方法。本讲稿第三十页,共七十六页接口n“接口”和抽象类有些类似。n接口中的方法都是没有方法体的抽象方法。n接
20、口中只能定义 static final 属性。n接口定义的仅仅是实现某一特定功能的一组功能的对外接口和规范,而并没有真正地实现这个功能。n接口的功能实现是在“继承”了这个接口的各个类中完成的,由这些类来具体定义接口中所有抽象方法的方法体。n通常把对接口的“继承”称为“实现”。本讲稿第三十一页,共七十六页接口的实现Object类Abstract class classfinal class接口classjava单重继承继承实现本讲稿第三十二页,共七十六页接口的定义 public interface 接口名 extends 父接口名列表 /常量域声明 public static final 域类型
21、 域名=常量值;/抽象方法声明 public abstract 返回值类型 方法名(参数列表);n接口是由常量和抽象方法组成的特殊类。本讲稿第三十三页,共七十六页接口的实现public class MyApplet extends Applet implements Runnable,MouseListener n一个类只能有一个父类,但是它可以同时实现若干个接口。如果把接口理解成特殊的类,那么这个类利用接口实际上就获得了多个父类,即实现了多继承。ninstanceof运算符可用来判断一个对象的类是否实现了某个接口。本讲稿第三十四页,共七十六页接口例interfaceCalAreadouble
22、pi=3.14;doublecalRArea(doubler);classCalAreaImpimplementsCalAreapublicdoublecalRArea(doubler)returnpi*r*r;publicvoidmain(Stringargs)CalAreaImpimp=newCalAreaImp();if(impinstanceofCalArea)/此处返回trueSystem.out.println(imp.calRArea(5);6本讲稿第三十五页,共七十六页接口的规定n类定义中使用implements指定实现某一接口n类中必须具体实现该interface中定义的抽象
23、方法。n实现的方法必须指定为public限定符。n实现接口的类要实现接口的全部方法。如果不需要某个方法,也要定义成一个空方法体的方法。public方法名()本讲稿第三十六页,共七十六页接口类型的变量和实现类的实例n可以声明接口类型的变量和接口类型的参数。n接口的实现类和接口之间的存在着类型兼容性,由于这个原因,所以:=接口类型的变量可以接受传递给它的实现类的实例=接口类型的参数可以接受传递给它的实现类的实例n利用接口类型的变量或参数存储实现类的实例,是面向对象编程的重要方法多态本讲稿第三十七页,共七十六页接口类型变量和参数示例interface I void doSome();class IC
24、1 implements I/接口I的实现类IC1 public void doSome()System.out.println(IC1 impl);class IC2 implements I/接口I的另一个实现类 public void doSome()System.out.println(IC2 impl);class Test static void testI(I i)/接口类型的参数 i.doSome();/见下页本讲稿第三十八页,共七十六页接口类型变量和参数示例(续)/接上页 public static void main(String s)/接口类型的变量i,赋予IC1的实例
25、I i=new IC1();i.doSome();/此时调用IC1中的实现方法 /将IC2的实例赋予i i=new IC2();i.doSome();/此时调用IC2中的实现方法 /将i作为参数传递 testI(i);/此时直接将IC1的实例作为实参传递给testI testI(new IC1();/main/Test7本讲稿第三十九页,共七十六页利用接口n声明多个类必须实现的方法。=编程者可以把用于完成特定功能的方法组织成相对独立的集合体接口。凡是需要实现这种特定功能的类,都必须实现这个接口。n利用接口模拟多继承。=java程序中的类层次结构是树状结构,这种树状结构在处理某些复杂问题时会显得
26、力不从心。=接口在保持单继承优点的前提下,使Java程序的类层次结构更加合理,更符合实际情况。n只说明对象的编程接口,而不揭示实际的类体。=类库分发本讲稿第四十页,共七十六页系统定义的接口publicinterfaceActionListenerextendsEventListenerpublicabstractvoidactionPerformed(ActionEvente);n该接口代表了监听并处理动作事件的功能,它包含了一个抽象方法 actionPerformedn所有希望能够处理动作事件(如单击按钮、在文本框中回车等)的类都必须具有ActionListener接口定义的功能,也就是要实
27、现这个接口,本讲稿第四十一页,共七十六页内部类(inner class)n在某个类的内部定义的类称之内部类。n内部类的定义方法=定义命名的内部类:定义命名的内部类:可以在类中(甚至方法中)定义内部类,并在类的内部多次使用(创建多个对象)。=定义匿名内部类(一次性类)定义匿名内部类(一次性类):可以在new关键字后定义内部类,以立即创建一个对象n内部类的类文件命名方法设外层类名为Myclass,则该类的内部类名为:Myclass$c1.class(c1为命名内部类名)Myclass$1.class(表示类中定义的第一个匿名内部类)本讲稿第四十二页,共七十六页类中的内部类n在类中如同使用其他类一样
28、使用自己的内部类。n内部类拥有对在外层类中定义的所有属性和方法的访问权。n其他类如果要使用一个类的内部类时,要使用类前缀。8-Parcel2本讲稿第四十三页,共七十六页类中的内部类n一般类只能是public和非public,而内部类可以指定为private和protected。n如果内部类为private,只有本类可以使用它。n如果内部类为protected,只有外层类、与外层类处于同一包中的类、以及外层类的子类可以访问它。n内部类可以实现接口及抽象类中的抽象方法。n外层类可以将上述实现细节、乃至内部类都隐藏起来,通过方法的返回值向外界提供一个实现了基类或接口的实例。8-Parcel3本讲稿第
29、四十四页,共七十六页在类的外部使用内部类n如果想在一个类的外部使用该类中声明的内部类的实例,需要按照以下方式进行:=构造一个外层类的变量=通过该变量,用new关键字建立内部类的实例,注意,内部类的类型应按外层类.内部类的方式进行说明n例:classAclassBclassTestpublicstaticvoidmain(Stringargs)Aa=newA();A.Bb=a.newB();/内部类B的类型说明为A.B本讲稿第四十五页,共七十六页方法中的内部类n内部类还可以定义在一个方法里,其作用域仅限于该方法的范围内(进一步隐藏),在其它方法里定义也没有名字冲突问题。=实现一个接口,方法返回一
30、个该内部类的对象。=在一编写好的代码中加一个类,但又不想公开化。8-Parcel4本讲稿第四十六页,共七十六页条件分支中的内部类n在条件分支中的内部类并不表示有条件的建立,同其他类一样,在编译时就一道解决了,内部类只是限定它的作用域(在条件分支中使用)。if(e)类定义8-Parcel5本讲稿第四十七页,共七十六页匿名内部类n匿名内部类是在一个类内部定义的,没有名称的一种特殊的类。n由于匿名内部类没有名字,它的定义和它的实例必须同时声明,格式为:new父类或父接口(传递给父类构造方法的实参列表)属性定义方法定义;n以上代码在定义匿名内部类的同时,也声明了该内部类的一个实例n匿名内部类的实例可用
31、于属性或变量的初始化、方法调用过程中的实参传递、return语句的返回值等处。本讲稿第四十八页,共七十六页匿名内部类的应用场景8-Parcel6n当你想从一个父类派生一个子类;或想用一个类实现一个接口,而该子类或实现类的实例只使用一次时,就可以通过将该类声明为匿名内部类,把类的定义和实例放在一起,从而简化代码。本讲稿第四十九页,共七十六页匿名内部类例n前面讨论了系统中的这个接口:publicinterfaceActionListenerextendsEventListenerpublicabstractvoidactionPerformed(ActionEvente);n如果我们某个方法只需要
32、返回实现了该接口的类的一个实例,则可以这样写return语句:/方法中其他代码returnnewActionListener()publicvoidactionPerformed(ActionEvente)/实现代码;本讲稿第五十页,共七十六页等价的有名内部类n前面的代码相当于在方法中定义了一个有名内部类,然后返回该内部类的一个实例。n对等的有名内部类的代码如下:/方法中其他代码classResultClassimplementsActionListenerpublicvoidactionPerformed(ActionEvente)/实现代码returnnewResultClass();本讲
33、稿第五十一页,共七十六页枚举n在JDK1.5之前,Java中定义常量都是通过在类或接口中声明静态属性n如果常量有限定的取值范围,比如,扑克牌的花色只有4种,静态属性自身无法直接对这种取值进行限定,为此,JDK1.5引入了枚举:访问修饰符enum枚举类型名枚举常量1,/注意每个常量的分隔符为逗号枚举常量2,枚举常量n;/若常量后没有其他成员,分号可省略本讲稿第五十二页,共七十六页枚举类型可用的方法n枚举类型实际是java.lang.Enum类的子类,该类中2个常用静态方法如下:=values()该方法返回对应枚举类型中定义的所有常量构成的集合,可以使用JDK1.5中引入的新for循环取出返回的集
34、合中存储的枚举常量。=valueOf(字符串)该方法可以将给定的字符串转换为对应的枚举类型的数据。如果给定的字符串和枚举中定义的常量名称都对应不上,则该方法会报告错误。njava.lang.Enum只供Java内部使用,程序员不能直接定义继承该类的子类本讲稿第五十三页,共七十六页枚举示例enumSuitspade,diamond,club,heartclassTestSuitpublicstaticvoidmain(Stringargs)/通过for循环,打印Suit中定义的枚举常量for(Suits:Suit.values()System.out.println(s);Scannerread
35、er=newScanner(System.in);/声明一个枚举类型的变量suit,并从键盘读入枚举值Suitsuit=Suit.valueOf(reader.nextLine();switch(suit)casespade:/case后必须直接使用枚举中的常量名/这样的格式是错误的:Suit.spade本讲稿第五十四页,共七十六页枚举示例(续)/*在switchcase语句之外,使用枚举常量的格式为:枚举类型名.常量名可以使用等值运算符(=)判定枚举型变量的值是否等于枚举中的常量值,或者使用equals方法*/if(suit.equals(Suit.spade)/等同于if(suit=Sui
36、t.spade)/枚举类型不能实例化,枚举变量只能通过枚举常量赋值suit=Suit.spade;/OKsuit=newSuit();/Error本讲稿第五十五页,共七十六页枚举构造方法n枚举类型不能用new进行实例化,枚举类型的变量取值必须为该枚举类型中声明的常量n枚举中还可声明其他类型的数据成员。枚举的构造方法主要用于声明枚举常量时,对枚举类型中的其他数据成员进行赋值。n例:enumTrafficLight/声明枚举常量,同时提供构造方法实际参数Red(30),Amber(10),Green(40);/注意此处要用分号privatefinalintduration;/枚举的私有成员/枚举的
37、构造方法TrafficLight(intduration)this.duration=duration;本讲稿第五十六页,共七十六页枚举中的抽象方法n枚举中也可以定义其他方法,甚至可以定义抽象方法。n定义了抽象方法后,必须在声明每一个枚举常量的同时,利用类似匿名内部类的形式,对抽象的方法加以实现,具体格式如下:枚举常量1(构造方法的实参)抽象方法的具体实现,枚举常量2(构造方法的实参)抽象方法的具体实现,本讲稿第五十七页,共七十六页枚举抽象方法实现示例enumTrafficLight/每个枚举常量必须都要提供抽象方法的实现Red(30)TrafficLightnext()returnGreen
38、;,Amber(10)TrafficLightnext()returnRed;,Green(40)TrafficLightnext()returnAmber;privatefinalintduration;/枚举的私有成员TrafficLight(intduration)this.duration=duration;intgetDuration()returnduration;/普通方法abstractTrafficLightnext();/抽象方法本讲稿第五十八页,共七十六页枚举抽象方法实现示例classTestpublicstaticvoidmain(Stringargs)TrafficL
39、ightlight=TrafficLight.Red;intduration=light.getduration();/调用普通的枚举方法light=light.next();/调用枚举中实现的抽象方法/*ordinal方法继承自Enum,返回值为该枚举常量在枚举中的定义次序(第一个枚举常量的次序为0,其余在此基础上递增)*/intord=light.ordinal();9本讲稿第五十九页,共七十六页附录NetBeans中对面向对象编程的支持功能本讲稿第六十页,共七十六页利用NetBeans的包向导创建包在NetBeans的工程视图中,选中Source Pakages下面的default pa
40、ckage,点击右键,选择New-Java Package菜单会弹出包向导对话框输入包名,NetBeans会自动创建对应的目录。本讲稿第六十一页,共七十六页利用NetBeans的类生成向导创建包除去利用包向导可以创建包之外,利用类向导创建类时,在Package框中输入类所在的包名,NetBeans也会自动建立包名对应的目录本讲稿第六十二页,共七十六页在NetBeans中更改包名由于NetBeans会创建包名对应的目录,更改包名时,也要同时修改对应的目录的名称。为此,可在工程视图中选中要更改的包名,单击或按F2键,输入新包名后回车,NetBeans会弹出改名的对话框点击Refactor按钮,就可
41、同时修改包名和对应的目录名称。本讲稿第六十三页,共七十六页在NetBeans中更改类所在的包更改类所在的包时,不要直接pacakge语句中的包名。如果要更改成的新包名在工程视图中还没有出现,请先在源文件编辑器中点击包名,然后右键调出Refactor-Rename菜单,在改名对话中输入新包名即可。本讲稿第六十四页,共七十六页在NetBeans中更改类所在的包如果在工程视图中,要更改成的包名已经存在,请在工程视图中选中要更改包名的类,然后用鼠标左键把它拖动到目标的包中即可。注意:此时不要通过点击源文件中的包名,选右键菜单中的Refector-Rename修改类所在的包名,这样做NetBeans会提
42、示“包名已存在”的错误。本讲稿第六十五页,共七十六页NetBeans对import语句的支持在定义数据时,如果NetBeans找不到我们声明的类型,它会在代码编辑器的对应行的左侧提示一个灯泡的图标,点击该图标,NetBeans会提示我们该类型可在那些包中找到,选择对应的项目,即可生成相应的import语句。本讲稿第六十六页,共七十六页Fix Imports右键菜单在编辑器中点右键,选择Fix Imports菜单,弹出的Fix All Imports对话框也可帮助我们生成import语句本讲稿第六十七页,共七十六页NetBeans中对jar文件的支持nNetBeans的工程均可生成jar文件。点
43、击NetBeans工具栏中的build按钮,即可生成以当前主工程为名的jar文件,该jar文件位于工程的dist目录中。n如果该工程包含可运行的主类,还可以直接在命令行窗口中使用如下指令直接运行该文件:javajarjar文件全名点击NetBeans的工程属性对话框左侧的Run节点,就可以指定生成的jar文件在执行时的主类文件本讲稿第六十八页,共七十六页在NetBeans工程引用jar文件n如果在NetBeans工程中要引用某个jar文件作为类库,需要在工程视图的libraries节点上点右键,选择addJAR/Folder菜单,在弹出的文件选择对话框中选择需要引用的jar文件即可。注意:注意
44、:NetBeans在编译和运行工程时,在默认设定下,除去在当前工程的Library节点中设定的jar文件或文件夹中寻找需要的类文件之外,它还会在控制面板-系统对话框中设定的classpath环境变量中寻找需要的类和jar文件。本讲稿第六十九页,共七十六页NetBeans的工程属性对话框n除去在工程视图的Library节点可以指定编译和运行当前项目所需要的jar文件之外,在NetBeans的工程属性对话框中也可以指定工程所需的jar文件和类文件所在的文件夹。点击Libraries节点,就可以为当前工程指定编译和运行时需要的jar文件该复选框指定了在编译时要在classpath环境变量中寻找jar
45、或类文件本讲稿第七十页,共七十六页NetBeans的库(Library)管理n为了让编程人员更方便地在工程中引用jar文件,NetBeans还提供了对jar文件的管理机制,这就是“库”(Library)的概念n库是指一个或多个jar文件的组合,可以在NetBeans中先建一个库,然后把几个jar文件加入这个库中,以后,需要为工程添加jar文件时,就可以不用一个一个添加对应的jar文件,只需要添加一个库就可以了,这在jar文件位于不同的目录中时非常方便。本讲稿第七十一页,共七十六页NetBeans中的库(Library)管理n在工程视图的Libraries节点上点右键,就可以看到Librarie
46、s菜单;在工程属性对话框中,点击Libraries节点,也可以看到AddLibraries按钮。按下图的次序依次点击,就可建立jar的管理库。12345点击New Library,输入库名称,确认后再点击Add JAR/Folder,就可为当前的库加入jar文件本讲稿第七十二页,共七十六页NetBeans对Setter/Getter方法的支持在编辑器中点击右键,选Refactor-Encapsulate Fields菜单,就可调出生成Setter/Getter方法对的对话框选中这些复选框,即可生成对应属性的Setter/Getter方法本讲稿第七十三页,共七十六页NetBeans对接口实现的帮
47、助在编辑器中,书写类定义时,用implements实现了一个接口后,编辑器的左侧会出现一个灯泡型的图标,点击该图标,就可生成接口中需要实现的方法。本讲稿第七十四页,共七十六页上机作业5n实现如下位于包school中的两个具有继承关系的Public类:Student、ClassStudent(其中除了className外,其余属性为private,方法为public)n在类Test中,使用这两个类输出如下信息,并统计输出其中最高分、最低分和平均分。属性:nameno方法:setName,getNamesetNo,getNoStudentClassStudent属性:static classNamegrade方法:setClassName,getClassNamesetGrade,getGrade姓名学号课程成绩王刚1009Java87刘林林1076Java90石磊1054Java62本讲稿第七十五页,共七十六页上机作业6n定义一个接口图形,其中有两个方法面积(),周长();n在分别定义三个类:三角形、正方形、圆形,继承自接口图形,并实现面积(),周长();n然后测试这些类的这些方法。本讲稿第七十六页,共七十六页
限制150内