Java语言程序设计6

上传人:zhan****gclb 文档编号:231398716 上传时间:2023-09-03 格式:PPT 页数:92 大小:347.50KB
返回 下载 相关 举报
Java语言程序设计6_第1页
第1页 / 共92页
Java语言程序设计6_第2页
第2页 / 共92页
Java语言程序设计6_第3页
第3页 / 共92页
亲,该文档总共92页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第六章 面向对象的程序设计概念n类的概念n类的定义n对象n类的成员变量n方法的引用和修饰在面向对象的程序设计中,把所有事务都作为对象来处理,本章就主要讲解什么是类、什么是对象,以及它们之间的关系。6-1 类的概念类(CLASS)为“man class”对对象进行抽象为类对类进行实例化翠花下面定义了人这样一个类这些显示的是类的属性是类的静态特征表现为对象的状态类中包含有:这些是类的方法是类的行为特征n类是对象的抽象描述,一个类中定义的方法可以被类的对象调用,对象方法的每一次调用被称作发送一个消息给对象。对象间是相互独立,只有接收消息的对象才会对该消息起作用,对象之间可以发送消息相互影响。n例如创建一个电视机类,它包含有:将TV类中的属性和方法定义为程序代码如下:class TV int size;int style;int factory;void open();void close();void enjoy();使用这个类就可以对家中的电视机创建它的对象,并且将具体电视机的信息赋值给它:TV mytv=new TV();/创建TV类的对象mytv mytv.open()/引用mytv对象的open()方法n但是对于具体的电视机,可能有等离子、背投、画中画等功能,这样利用已定义的类就不能很好地描述实际情况。这时候就可以利用面向对象的继承功能,在原有电视机的基础上增加新电视机类的属性和方法。继承是在原有类的属性和方法仍旧保留不变的情况下,来定义新的类。n如构造新型电视机的功能:class NEWTV extend TV /继承了TV类 void setTimeon();void setTimeoff();flash_frequency=100MHz;picture_in_picture=true;plasma=true;类是对对象的抽象,但是类不能完全体现出每一个对象的“特性”,如果要表述具体对象,可以在类的实现中添加新的属性和方法。如果对象的“特性”有所改变时,可以通过继承方式对类增加新的属性和方法。6-2 类的定义n在Java中,用户自己定义一个类的一般形式为:class 类名 数据成员.成员方法 可见,定义类的结构包含有类的说明和类的定义实体两部分。类的说明部分由class和类名组成;类的实体是声明中花括号包含的部分,它由数据成员和方法组成,是类的主体部分,它包括变量说明、方法的定义与实现两个部分。n下面根据几何中的坐标位置,定义一个point类。class Point/定义Point类 private int x,y;/类的成员变量 public void setPoint(int a,int b)/类的方法 x=a;y=b;public int getX()return x;/类的方法 public int getY()return y;/类的方法 public String toString()/类的方法 return+x+y+;在该例子中定义了Point类,其中第一个字母要大写,包含在两个红色大括号之间的就是类的实体(类体)。其中,x,y为两个私有变量;setPoint(.)、getX()、getY()和toString()都是公共方法,可以通过后面的对象来引用。6-3 对象n类是对象的模板,对象是类的实例,在“纯粹”的面向对象的程序设计语言中,所有的东西都是对象,对象如同是一种新型变量,通过赋值语句对其变量进行初始化操作。n一、创建对象n在Java语言中,对象是通过类的实例化来创建的。要创建新对象,需要使用new操作符,创建对象的一般形式为:类名 对象变量=new 类名(参数1,参数2,);或者 类名 对象变量;对象变量=new 类名(参数1,参数2,);其中new是运算符,当使用new运算符时,一定要清楚下面几件事:(1)首先在指定的类上创建一个对象。(2)接着为该对象分配内存空间(类似于数组分配内存空间)。(3)最后执行由指定类所定义的构造方法。不能直接对类进行操作,其操作是转化到对对象的操作上来。n二、对象的引用 创建对象实例从本质上来讲就是获得操作对象的句柄,而使用new操作符就是让对象句柄与新对象连接起来,使其指向新对象,而把对象分配给变量,或者把对象作为参数传递给方法,实际上就是对象的引用,而对象引用就是操作对象实例。当一个对象创建后,这个对象就拥有自己的成员变量和方法,我们可以通过引用对象的成员变量和方法的形式来引用对象。n(1)引用成员变量的一般形式 对象名.成员变量名n(2)引用方法的一般形式 对象名.方法名(参数表)class S6_2 float r;final double PI=3.14159;public double area()return PI*r*r;float setR(float x)r=x;return r;public double perimeter()return 2*PI*r;public static void main(String args)double x,y;S6_2 cir=new S6_2();cir.setR(12.35f);x=cir.area();y=cir.perimeter();System.out.println(圆面积=+x+n圆周长=+y);定义S6_2类的成员变量r和常量PI以及多种方法,通过创建对象实例来引用这些方法。三、对象的初始化和构造方法n类中含有成员变量和方法,在方法中,除了一般的方法外,还可以定义构造方法,这是一种特殊的方法,是在创建对象时自动调用对对象进行初始化操作。n构造方法是一个类方法名与类名相同的类方法,当使用new关键字创建一个对象时,Java系统将自动调用构造方法去初始化这个新建对象,构造方法是类方法中的特殊方法。构造方法的特点为:n(1)构造方法的第一个字母是大写,且构造方法的名字与类名相同。构造方法不需要调用,它是当用户使用Java的new关键字创建对象时,会自动为对象分配一个存储区域并调用构造方法为对象进行初始化操作。如果没有定义构造方法,Java会使用缺省值(数值为0,对象为null,布尔值为false,字符为0)来初始化实例变量。n(2)构造方法是类的一种方法,它的主要作用是初始化对象的成员变量n(3)构造方法属于特殊的一种方法,没有返回值,也不是void。n(4)由于使用不同数量、不同类型的参数对类对象进行初始化操作,会同时拥有多个构造方法,这体现出方法的重载。n(5)构造方法可以继承,也就是子类可以继承父类构造方法。定义Triangle类并定义它的构造函数,通过构造函数对Triangle类对象进行初始化class S6_3 static class Triangle/定义Triangle类 int x,y,z;public Triangle(int i,int j,int k)/定义Triangle类的构造方法 x=i;y=j;z=k;public static void main(String args)Triangle t1;/创建Triangle对象t1 t1=new Triangle(3,4,5);/引用带参数的类构造器 if(judge(t1)/引用judge方法 System.out.println(这是一个直角三角形);else System.out.println(这不是一个直角三角形);public static boolean judge(Triangle m)/Triangle对象m作参数 if(Math.sqrt(m.x*m.x+m.y*m.y)=Math.sqrt(m.z*m.z)return true;else return false;n下面的例子一个是没有构造器的,还有一个是带有构造器的,请看看它们的不同。n(1)没有构造器的程序class Student static long sum=0;/类的成员变量 String name;/成员变量 String address;/成员变量 String grade;/成员变量 static int score;/类的成员变量 public static long collect()sum+=score;return sum;public void getMessage(String x1,String x2,String x3)/方法 name=x1;address=x2;grade=x3;public void getScore(int y)/方法 score=y;public static void main(String args)Student zhang=new Student();/创建Student类的对象zhang zhang.getMessage(张三,大庆市发展路18号,2005级工程硕士);zhang.getScore(90);zhang.collect();Student wang=new Student();/创建Student类的对象wang wang.getMessage(王五,大庆市东风新村24号,2004级信管);wang.getScore(85);wang.collect();System.out.println(zhang.name+zhang.address+zhang.grade);System.out.println(wang.name+wang.address+wang.grade);System.out.println(总成绩是+sum);该程序中引用getMessage()方法对Student类进行初始化,引用getScore()方法对Student类的score数据进行累加计算。n(2)下面采用构造方法实现上述功能。class Student1 static long sum=0;String name;String address;String grade;static int score;public static long collect()sum+=score;return sum;Student1(String x1,String x2,String x3,int y)/定义构造方法 name=x1;address=x2;grade=x3;score=y;public void getScore(int y)score=y;public static void main(String args)Student1 zhang;zhang=new Student1(张三,大庆市发展路18号,2005级工程硕士,90);zhang.collect();Student1 wang;wang=new Student1(王五,大庆市东风新村24号,2004级信管,85);wang.collect();System.out.println(zhang.name+zhang.address+zhang.grade);System.out.println(wang.name+wang.address+wang.grade);System.out.println(总成绩是+sum);使用new创建对象时,Java系统自动调用与类同名构造方法当类使用new创建对象时,自动调用与类名相同的构造方法,同时将参数带入初始化类的成员变量。6-4 类的成员变量n1.成员变量的声明 成员变量是包含在类的内部、方法定义的外部所定义的变量,其作用域是整个类,也就是说同以类中的所有方法都可以对其进行访问,并可简单地通过名字来引用,在方法体中定义的变量是方法变量,它的作用域仅仅只能在方法体内。例如:class Sampleclass public int i;/成员变量i method()int j;/一个方法中的变量 成员变量定义的一般形式为:访问权限符 static final 类型 变量名 在定义变量时还要指定变量的属性,包括:变量的访问权限,变量是类变量还是实例变量,变量是否为常数等。n2.成员变量的权限修饰n(1)public:该变量可以被任何包里的类访问。n(2)protected:该变量可以被该类及其子类、与该类在同以包中的类访问。n(3)private:该变量只能被该类的方法访问。另外变量的修饰符主要有:n(1)static:它说明该变量是一个静态变量或者称为类变量,而一个静态变量由该类的所有实例对象共享。在编译时,静态变量保存在为类声明的存储单元中,同时我们访问静态变量时也无需事先初始化它所在的类。n(2)final:说明该变量是一个最终变量,即该变量在程序运行中不能改变,所以final必须带有一个初始值。一般用来定义一个常量。n3.使用static修饰的成员变量 被static修饰的成员变量称为静态变量,它是类的成员变量,而不是任何一个类对象的成员变量,这样任何一个类对象在访问它时都会获得相同的数值。如果访问此成员变量时,需要通过类名加上点操作符和成员变量来访问。同时任何一个类对象对类的成员变量进行修饰后,其他类的对象会得到修饰过的值,而且所得数据是相同的。n定义一个学生档案类,包括有学生姓名、性别和所在学校。class Student String name;String sex;static String school=大庆某个大学;/类变量 public class S6_5 public static void main(String args)Student my=new Student();Student you=new Student();my.name=陈明;my.sex=男;you.name=刘若英;you.sex=女;Student.school=大庆石油学院;/对类的成员变量赋值。System.out.println(my.name+my.sex+my.school);System.out.println(you.name+you.sex+you.school);n对上面程序的说明:n(1)如果要访问类变量,采用的形式为:类名.类变量名或实例名.类变量名,本程序采用的是前者。对于两个对象my、you,它们的成员变量school的值是相同的,都是“大庆石油学院”。n(2)在程序的main方法中,为student创建了一个实例my“Student my new Student;”,对于类变量和实例变量,那么my.school和my.name它们之间的区别在哪里?在程序中有类变量school和实例变name、sex,类变量不需要对类进行实例化而可以直接进行访问,但实例变量要先进行实例化后方能进行访问。n例如:my.name=陈明;Student.school=大庆石油学院;n4.最终成员变量 最终成员变量一般是在声明时进行初始化,一旦最终成员被赋值,则它在整个程序执行过程中不能改变。在Java中创建一个成员变量为常数时,在变量说明总用关键字final。例如:final double PI=3.1415926;6-5 方法的引用和修饰n方法描述了对象所具有的功能或操作,反映对象的行为。一个类或对象可以有多个方法,对象通过引用它的方法对消息进行响应,完成特定功能。n1.方法的引用class S6_6 private double r;final double PI=3.1415926;void area(double r)double x;x=PI*r*r;System.out.println(Area=+x);public static void main(String args)S6_6 dd=new S6_6();/定义类对象 dd.area(12.3);/引用类中的area()方法 类方法的调用形式:(1)在程序中直接调用;(2)类中的方法作为另一个方法的参数(递归);(3)通过对象来引用方法(本程序就是采用这种方法)n2.使用this关键字修饰的方法class S6_7 private int x,y;public void setPoint(int a,int b)x=a;y=b;public int getX()return x;public int getY()return y;public String toString()return+this.getX()+,+this.getY()+;/引用类的方法 public static void main(String args)int i,j;i=Integer.parseInt(args0);j=Integer.parseInt(args1);S6_7 dot=new S6_7();dot.setPoint(i,j);System.out.println(dot.toString();3.static静态方法 经过static修饰符修饰的类成员变量是一个静态变量或者称为类变量,一个静态变量由该类的所有实例对象共享。同样,用static修饰符修饰的方法称为静态方法或称为类方法,属于整个类的方法,而不用static修饰符修饰的方法,是属于某个具体实例对象的方法。静态方法可以被由该类创建的所有实例对象使用,也可以被其他类引用。在任何地方都可以使用静态方法而不必对类进行实例化操作。定义静态方法时要使用static关键字,如:static abs(int x)方法体 定义类方法的意义在于,对于类方法不需要对其进行实例化操作,能够被其他类所使用。一般情况下,类方法可以定义为一种通用工具被其他类或类的实例所调用。下面例子讲解的是如何使用类方法。class S6_8 int width,height;public static double area(int width,int height)return width*height;public static void main(String args)int i,j;double f;i=Integer.parseInt(args0);j=Integer.parseInt(args1);f=S6_8.area(i,j);System.out.println(Area=+i+*+j+=+f);在调用static方法时,可以使用“类名.方法名”的方式,而不用像非static方法使用“对象名.方法名”的方法,因为非static方法必须要首先创建对象。import javax.swing.JOptionPane;public class S6_9 static double sum=0;static int score;public static void count(int ss)sum+=ss;public static void main(String args)int Number=0;for(int i=1;iy)?x/y:y/x;return m;class S7_5 public static void main(String args)int result;Max ss=new Max();result=ss.play(5,45);/引用protected方法 System.out.println(result=+result);n5.friendlyn如果在成员变量或方法名前都没有加public、private等访问权限关键字,则通常称为此成员变量或方法为friendly,就意味着这些成员变量或方法对于包内的所有类而言他们是可以访问的,但对于包外的类,则不能对他们进行访问。public class X1 X1()/X1类构造器 System.out.println(This is a construct);void doing()System.out.println(Could you tell me);使用方法的默认访问权限,如何来引用方法将上面的文件保存为X1.javaimport X1;/引用X1类public class S7_6 static void store()System.out.println(This is a store processing);public static void main(String args)X1 y=new X1();y.doying();store();由于类X1与类X2在编译后系统自动将它们放在一个包内。对于X1类中的doing()方法而言,如果不进行访问权限设定,则通过“import X1”方法引入,使得X1类对象 y可以调用 doing方法,即“y.doing();”。但是如果在X1类中对doing()方法强加private访问权限(如:private void doing();),则当使用y对象调用doing方法时,编译时,会出现错误提示信息。7-2 多态机制n多态是面向对象程序设计中的又一个重要特征,它的特点是采用同名方式,根据调用方法时传送的多少以及传送参数类型的不同,调用不同的方法,这样对于类的编制而言,可以采用同样的方法获得不同的行为特性。在面向对象程序设计中采用多态,有助于隐藏对象内部的细节,可以简化程序的复杂程度,提高程序的抽象程度。nJava中提供两种多态机制:重载与覆盖。n一、方法的重载n所谓方法重载,就是在类中创建了多个方法,它们具有相同的名称,但有不同的参数和不同的定义。方法重载使得Java类的实例对各种对象都有一个统一的接口,不必为相同的操作定义不同的方法,而调用方法的不同是由该方法的参数决定。Java执行方法名、参数个数和参数类型完全相同的方法体。方法的重载是对已有同名方法的重新定义。n例7-7 在S7_7类中定义了多个abs方法,看是如何引用的。public class S7_7 public static int abs(int x)int y;y=x;if(y0)y=-y+5;return y;public static double abs(double x)double y;y=x;if(y=0?r:0);public double getRadius()return radius;public double area()return Math.PI*radius*radius;public String toString()return Center=+super.toString()+Radius=+radius;/引用父类的toString()方法 public String getName()return Circle;Circle类定义(用Circle.java文件名保存)public class Cylinder extends Circle protected double height;public Cylinder(double h,double r,int a,int b)super(r,a,b);setHeight(h);public void setHeight(double h)height=(h=0?h:0);public double getHeight()return height;public double area()return 2*super.area()+2*Math.PI*radius*height;public double volume()return super.area()*height;public String toString()return super.toString()+height=+height;public String getName()return Cylinder;Cyclinder类定义(用Cyclinder.java文件名保存)import javax.swing.JOptionPane;public class S8_2 public static void main(String args)Point point=new Point(7,11);/创建point对象并引用Point类带参数的构造方法 Circle circle=new Circle(3.5,22,8);/创建Circle对象并引用带参数的构造方法 Cylinder cylinder=new Cylinder(10,3.3,10,10);Shape arrayofShapes=new Shape3;/定义抽象类Shape的3个数组对象 arrayofShapes0=point;/将point对象的值赋给 arrayofShapes1=circle;/将circle对象的值赋给 arrayofShapes2=cylinder;/将cylinder对象的值赋给 String output=point.getName()+:+point.toString()+n+circle.getName()+:+circle.toString()+n+cylinder.getName()+:+cylinder.toString();/分别输出point类、Circle类和Cylinder类的名称及参数值 JOptionPane.showMessageDialog(null,output,Demonstrating Polymorphism ,JOptionPane.INFORMATION_MESSAGE);/在屏幕上输出结果 System.exit(0);/退出系统 实现前面定义的类(文件名为S8_2.java)8-2 接口n接口定义的关键字为interface,中文意思是界面。实际上它是用来实现类间多重继承的结构模式。n一、概念n多重继承是指一个子类可以有多个直接父类,该子类可以全部或部分继承所有直接父类的数据成员及成员方法。例如,冷藏车既是一种汽车,也是一种制冷设备,所以它是汽车的子类也是制冷设备的子类。自然界中这种多继承结构到处可见。n 在面向对象的程序设计语言中,有些语言(如C+)提供了多继承机制。而Java出于安全性、简化程序结构的考虑,不支持类间的多继承而只支持单继承。然而在解决实际问题的过程中,在很多情况下仅仅依靠单继承不能将复杂的问题描述清楚。为了使Java程序的类间层次结构更加合理,更符合实际问题的本质,Java语言提供接口来实现多重继承机制。n二、定义接口n接口实际上是一个特殊的类,所以接口的定义与类的定义很相似,由两部分组成:接口说明和接口体,其形式是:访问权限 interface 接口名 extends 父接口名1,父接口名2,/接口体程序n其中包括:接口名、接口关键字interface、接口的访问权限。在可选项extends后面列出多个父接口。实际上完全可以把接口理解为一种特殊的类,是由常量和抽象方法组成的特殊类。在Java中,一个类只能有一个父类,而接口定义中extends后面却是可以同时继承多个接口。如果将接口理解为类,那么这个类利用接口实际上就获得了多个父类,也就实现了多重继承。n接口的访问权限与类的访问权限不同,接口的访问权限只有两种,public和缺省状态,使用public修饰符修饰的接口可以被所有的类和接口使用,而缺省状态只能被同一包中的其他接口和类使用。n三、接口的特点和实现n接口的特点:n(1)接口与类比较有其特殊性。接口可以定义多继承,如果是多继承可以通过使用extends后面的多个父接口来定义。n(2)接口允许没有父接口,即接口不存在最高层,与类的最高层是object类是不同的。n(3)接口中的方法只能被生明为public和abstract,如果不声明,则默认为public abstract;接口中的成员变量只能用public、static和final来定义,如果不声明,则默认为public static final。例如:static double PI=3.14159;系统默认为public static final double PI=3.14159;n(4)接口中的方法都是使用abstract修饰的方法。在接口中只给出方法名、返回值和参数表,而不能定义方法体。n接口块的实现:class 类名 implements 接口块1,接口块2,n其中:在类中使用implements关键字实现接口,而且对于一个类而言,可以实现多个接口;如果实现某个接口类不是abstract抽象类,则必须要实现指定接口的所有抽象方法;对于抽象类的方法在实现时要设定为public属性,否则会产生访问权限错误。n例8-3 例8-1中的程序是使用抽象类来编制程序,现在使用接口来完成以上功能,查看与原有抽象类有什么区别。interface Book/定义接口 /int bookPage;/接口中不允许定义变量,只允许使用final static定义变量 /float discount;/double price;abstract void show();/定义抽象方法,显示图书种类 abstract double getPrice(int bookPage,float discount);/定义抽象方法计算价格 /public void show_price()/System.out.println(This books price is+price);/class Science_book implements Book int bookPage;/图书页码 float discount;/图书折扣 double price;public Science_book(int bookPage,float discount)this.bookPage=bookPage;this.discount=discount;public void show()System.out.println(The books kind is science);public double getPrice(int bookPage,float discount)return bookPage*0.1*discount;public void show_price()/显示价格 System.out.println(This books price is+price);class Literature_book implements Book int bookPage;float discount;double price;public Literature_book(int bookPage,float discount)this.bookPage=bookPage;this.discount=discount;public void show()System.out.println(The books kind is literature);public double getPrice(int bookPage,float discount)return bookPage*0.08*discount;public void show_price()System.out.println(This books price is+price);class Teaching_book implements Bookint bookPage;float discount;double price;public Teaching_book(int bookPage,float discount)this.bookPage=bookPage;this.discount=discount;public void show()System.out.println(The books kind is teachings book);public double getPrice(int bookPage,float discount)return bookPage*0.05*discount;public void show_price()System.out.println(This books price is+price);public class S8_3 public static void main(String args)Science_book bb=new Science_book(530,0.7f);/创建科技书对象 bb.price=(int)bb.getPrice(530,0.7f);/引用科技书类方法 bb.show();bb.show_price();/引用父类方法 Literature_book ll=new Literature_book(530,0.7f);ll.price=(int)ll.getPrice(530,0.7f);ll.show();ll.show_price();Teaching_book tt=new Teaching_book(530,0.7f);tt.price=(int)tt.getPrice(530,0.7f);tt.show();tt.show_price();n程序解析:分析与例8-1的区别n(1)接口中定义的成员变量应该全部使用final static修饰符修饰的变量,也就是常量。n(2)接口中不允许有程序体,如:show_price();,接口中定义的方法都是抽象方法。n(3)接口不是类,所有接口中不能定义构造方法。n所以按照以上要求,对程序进行修改,不能在接口中定义的方法,都增加了每一个类定义中;同样对于成员变量也是在每一个类中进行定义,作为类中的成员变量使用,只不过这些类中的成员变量名称是相同的。n例8-4 下面用汽车的例子再对接口进行讲解n通过下面的图可以看出Little_car、Big_car及Jeep通过实现Automobile接口而形成一个普通的类,使用extends关键字对Big_car类进行扩展,定义两个新类Microbus和Bus。Interface 越野车(Jeep)加速 void accelent()维修 void maintain()前进String forward()后退 String reverse()Interface 汽车类(Automobile)加速 void accelent()维修 void maintain()前进 Stringforward()后退 String reverse()Interface 小轿车(Little_car)加速 void accelent()维修 void maintain()前进 String forward()后退 Stringreverse()Interface 大轿车(Big_car)加速 void accelent()维修 void maintain()前进 Stringforward()后退 String reverse()Interface 汽车类(Automobile)加速 void accelent()维修 void maintain()Interface 汽车类(Automobile)前进 String forward()维修 String reverse()ImplementImplementImplementExtendsExtendsimport java.util.*;interface Automobile int i=5;void accelent();void maintain();String forward();String reverse();class Little_car implements Automobile public void accelent()System.out.println(Little_car.accelent();public void maintain()public String forward()return Little_car forward;public String reverse()return Little_car reverse;class Big_car implements Automobile public void accelent()System.out.println(Big_car.accelent();public void maintain()public String forward()return Big_car forward;public String reverse()return Big_car reverse;class Jeep implements Automobilepublic void accelent()System.out.println(Jeep.accelent();public void maintain()public String forward()return Jeep forward;public String reverse()return Jeep reverse;class Microbus extends Big_car public void accelent()System.out.println(Microbus.accelent();public void maintain()System.out.println(Microbus.maintain();class Bus extends Big_car public String forward()return Bus forward;public String reverse()return Bus reverse;public class S8_4 public static void main(String args)Automobile cars=new Automobile5;int i=0;carsi+=new Little_car();carsi+=new Big_car();carsi+=new Jeep();carsi+=new Microbus();carsi+=new Bus();for(i=0;icars.length;i+)carsi.accelent();8-3 包n一、概念n包是Java语言提供的组织类和接口的工具,即包是一组相关类和接口的集合。Java语言与其他编程语言一样,经过大量的编程,获得相当的定义和编码,而通过继承可以获得代码复用,这样编程变得越来越简单。但是随着程序规模的扩大,如何来管理这些已有的类模块成为当务之急,这时Java引入包的概念,而包的概念类似于其他语言的函数库,Java语言利用包将类进行分类,将其相关类放在一个包中进行管理。nJava的系统类都包含在相应的包中,如java的swing包、AWT包等。我们经常会使用“import javax.swing.*;”,就是将一组Java类和接口提供给应用程序来调用,类似于C语言中的include,同时Java语言逐渐成为Internet上受欢迎的开发和编程语言,其程序模块是动态装载的,为了防止名字空间的冲突,Java对其成员变量和方法采用类似于Internet上的命名方式来定义。由于成员变量和方法是类的重要成分在类中定义,而每个类又都是包的一部分,这样就可以通过包名、类名和类成员这样的层次结构来定义。n二、包的定义n把下面源代码归入某个包的方法是用package来实现的。package语言的一般形式是:package 包名称;如:package mypackage;public class classname n在源文件中,package是源程序的第1条语句,一个包内的Java代码可以访问该包的所有类及类中那些非私有变量或方法。n三、存放位置nJava语言对包内的方法通过类似于域名命名方式进行有效定义,那么java编译器和执行时的解释器也希望采用这种命名方法。这样Jva建议每一个Java的类都存放在一个独立的、不同的源文件内,然后把属于同一包的所有类都放在以该包命名的目录下面。按照约定,上面例子中mypackage包应该放在当前Java运行目录下的mypackage子目录下。例8-5 定义包axtpackage axt;/定义awt包public class Point1 protected int x,y;public Point()setPoint(0,0);public Point(int a,int b)setPoint(a,b);public void setPoint(int a,int b)x=a;y=b;public int getX()return x;public int getY()return y;public String toString()return+x+,+y+;以上是定义Point1类文件,将此源文件通过编译器编译后得到的字节码文件Point1.class放到package定义的位置,这里将Point1.class文件放置在Java当前运行目录下的axt子目录下。n四、包的引用n在Java语言中,当执行System.out.println(.)等操作时,系统自动引入java.lang包,该包中有最常用的类文件,然后当用户自己定义的包要让应用程序调用时,就要使用import关键字引入。n例8-6引用8-5中定义的axt中定义的axt包。import javax.swing.JOptionPane;import axt.Point1;public class S8_6 public static void main(String args)Point1 p=new Point1(72,115);String output;output=X coordinate is+p.getX()+nY cordinate is+p.getY();p.setPoint(10,10);output+=nnThe new location of p is+p;JOptionPane.showMessageDialog(null,output,Demostrating Class Point1,JOptionPane.INFORMATION_MESSAGE);System.exit(0);n五、实例:将多个相互独立的类放入同一个包中。n例8-7 创建指定的包bag,将两个类文件X1和X2放入这个包中。package bag;/创建包bag,将类放入bag中public class X1 int x,y;public X1(int i,int j)this.x=i;this.y=j;System.out.println(x=+x+y=+y);public void show()System.out.println(This class is a X1);定义X1类,将此类放入bag包中。n定义X2类,将此类放入bag包中。package bag;/创建包bag,将类放入bag包中public class X2 int m,n;public X2(int i,int j)this.m=i;this.n=j;System.out.println(m=+m+n=+n);public void show()System.out.println(This class is a X1);对X1和X2类分别进行编译,将得到的class文件存放在bag文件夹中。n对bag包的引用import bag.X1;/引用类X1import bag.X2;/引用类X2public class S8_7 public static void main(String args)X1 aa=new X1(4,5);aa.show();X2 bb=new X2(10,20);bb.show();
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!