Java面向对象基础_第1页
Java面向对象基础_第2页
Java面向对象基础_第3页
Java面向对象基础_第4页
Java面向对象基础_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java面向对象基础1面向对象概述Java面向对象基础2目录 理解对象和类 理解抽象和封装 对象与类 掌握包的创建和导入Java面向对象基础3面向对象编程OOP旨在在计算机程序中模拟现实世界中的概念在 OOP 中,现实世界的所有事物全都被视为对象能够在计算机程序中用类似的实体模拟现实世界中的实体设计和实现软件系统的方法Java面向对象基础4对象对对 象象面向对象编程的核心为计算机应用程序提供实用基础完成特定任务表示现实世界中的实体“对象是存在的具体实体,具有明确定义的状态和行为。对象是存在的具体实体,具有明确定义的状态和行为。”Java面向对象基础5对象的示例收银员对象顾客对象顾客姓名:朱丽叶

2、年龄:28体重:52千克操作:购买商品状态状态姓名:布兰尼职衔:收银员年龄:35体重:60千克操作:收款打印帐单行为行为Java面向对象基础6类类以共同特性和操作定义实体类是用于组合各个对象所共有操作和属性的一种机制形状类形状类动物类动物类汽车类汽车类类的示例类的示例“类是具有相同属性和行为的一组对象的集合类是具有相同属性和行为的一组对象的集合”Java面向对象基础7类和对象的示例雇员雇员收银员系统管理员仓库管理员促销员采购经理Java面向对象基础8属性事物的特性在类中表示为变量每个对象的每个属性都拥有其特有的值属性名称由类的所有实例共享住址住址姓名姓名属性属性年龄年龄“在类中表示对象或实体拥

3、有的特性时称为属性在类中表示对象或实体拥有的特性时称为属性 ”促销员对象促销员对象Java面向对象基础9方法方法方法操作的实际实现如何执行所请求的操作的规范方法指定操作对象数据的方式在得到操作请求时指定如何做的算法“对象执行的操作称为方法。对象执行的操作称为方法。”Java面向对象基础10方法的示例缝衣服的步骤缝衣服的步骤量尺寸量尺寸得到工具得到工具缝衣服缝衣服方法方法缝制衣服裁缝Java面向对象基础11类和对象的区别 类是概念模型, 定义对象的所 有特性和所需 的操作对象是真实的模型类和对象类定义实体对象是实际的实体类是对象的原型类是对象的原型所有属于同一个类所有属于同一个类的对象都具有相同

4、的对象都具有相同的特性和操作的特性和操作Java面向对象基础12封装信息隐藏,隐藏对象的实现细节,不让用户看到将东西包装在一起,然后以新的完整形式呈现出来 例如,两种或多种化学药品组成一个胶囊 将方法和属性一起包装到一个单元中,单元以类的形式实现“隐藏属性、方法或实现细节的过程称为封装。隐藏属性、方法或实现细节的过程称为封装。”Java面向对象基础13封装的示例 3-1接口 采购经理罗杰斯先生法拉力公司.迪斯尼汽车公司.市场经理雪莉女士 要求Java面向对象基础14 封装的示例 3-2有选择地提供数据法拉力公司迪斯尼汽车公司公共电话号码电子邮箱产品种类私有备件的制造方法备件库存备件的制造成本公

5、共电话号码电子邮箱汽车种类私有汽车的组装方法汽车库存汽车的组装成本Java面向对象基础15封装的示例 3-3 实体法拉力公司实体迪斯尼汽车公司 Auti Ltd.Buto Ltd.属性电话号码电子邮箱产品种类现有存货数量雇员详情所需物料详情属性电话号码电子邮箱汽车种类汽车规格雇员详情库存详情经销商详情方法接收订单备件的制造方法计算备件的制造成本计算利润率方法发出订单汽车的组装方法计算汽车的组装成本计算工资发出订单编制必要报告Java面向对象基础16抽象处理事物复杂性的方法处理事物复杂性的方法只关注事物的重要细节,而忽略事物的次要细节。Java面向对象基础17抽象的示例属性NameStudent

6、NOSeatNumber方法getName()getStudentNO()Student 类类getSeatNumber()Java面向对象基础18类的定义类的定义格式如下: 修饰符 class 类名 extends 父类名 implements 接口名1,接口名2,类属性声明;类方法声明; 其中以 括起的内容表示定义时可以没有。以大括号括起的内容称类体,之前部分称类头,修饰符 class 类名 extends 父类名 implements 接口名部分就是类头。Java面向对象基础191. 类头说明 类头中关键词class表示类定义的开始,后面紧跟的是类名。 修饰符用来说明类的特殊性质,如前面

7、程序中的public等。 private(私有): 修饰的类只能被同一包名中的类访问,这是Java默认方式; public(公共): 修饰的类能被所有的类访问; abstract(抽象): 修饰的类不能被实例化不能被实例化,它包含有未实现的方法。 final(最终): 修饰的类不能被继承,即不能有不能有子类子类。 关键词extends表示该类是个子类,它的父类名紧跟在extends后。 关键词iplements表示该类实现了哪些接口,后面就是接口名。 Java面向对象基础202. 类体说明类体中定义了该类所有的成员变量和该类所支持的方法,其形式说明如下: 类体类体 成员变量说明成员变量说明 构

8、造方法说明构造方法说明 静态初始化说明静态初始化说明 方法说明方法说明 类体由成员变量说明、构造方法说明、静态初始化说明和方法说明构成,它们都是可选的成员变量:修饰符 变量的数据类型 变量名= 初始值 ;/类属性为简单变量时修饰符 类名 对象名= new 类名(参数列表); /类属性为对象时Java面向对象基础21成员变量说明成员变量说明 Java中成员变量说明形式如下: 修饰符 成员变量类型 成员变量名列表; 成员变量的修饰符有以下几种:缺省访问修饰符、public、protected、private、final、static、transient和volatile。 (1) 缺省访问修饰符

9、缺省访问修饰符的成员变量可以被同一包(package)中的任何类访问。 (2) public(公共) public修饰的成员变量可以被项目文件中的任何方法所访问。由于public成员变量不受限制, 这易使类的对象引起不希望的修改,建议成员变量尽量不要使用public修饰符。 (3) protected (受保护) protected修饰的成员变量可以被有继承关系的类自由访问,即子类可以访问它。 Java面向对象基础22成员变量说明成员变量说明 (4) private (私有) private修饰的成员变量只能在同一个类中使用。这种方式通常是最为安全的。 (5) static(静态):(类变量)

10、 static修饰的成员变量又称为类变量。不加static修饰的成员变量又叫对象变量。对象变量依附于具体的对象实例,它的值因具体对象实例的不同而不同,而类变量为该类的所有对象共享,它的值不因类的对象不同而不同。 (6) final(最终):(常量) final修饰的成员变量叫最终成员变量。一开始创建该变量时将其设定了一个值,在以后程序的运行过程当中,变量的值将一直保持这个值不变。最终变量又称为常量。 Java面向对象基础23类的属性Public void setName(String na)name=na;Public void getName(String na)return na;上面代码

11、所对应的属性为name,setName是name属性的写操作器getName是name属性的读操作器读写操作器和属性之间的关系:属性的首字母大写,在前面加上get或者set前缀Eclipse中提供了非常方便的get/set功能Java面向对象基础24构造方法一个新对象的初始化的最终步骤是去调用一个叫做构造函数的方法。它具有以下两个规则: 方法名称必须与类名称完全相匹配; 对于构造函数方法,不要声明返回类型; 创建一个类的新对象时,系统会自动调用该类的构造函数方法,为该对象初始化。构造方法分为缺省的构造方法(不带参数)和带参数的构造方法 缺省的构造方法 如果类的定义没有编制构造方法,Java语言

12、会自动为用户提供。这个由Java自动提供的构造方法就是所谓的缺省构造方法。缺省的构造方法确保每个Java类都至少有一个构造方法,该方法应符合类的定义。带参数的构造方法 带有参数的构造方法能够实现这样的功能:当构造一个新对象时,类构造方法可以按需要将一些指定的参数传递给构造方法。 public Point(int x,int y) this.x=x; this.y=y; Java面向对象基础25方法方法的形式如下: 方法修饰符方法修饰符 返回值类型返回值类型 方法名(方法名(形参列表形参列表)throws异常列表异常列表 方法修饰符方法修饰符包括以下几种: public 修饰的方法可以由其他类访

13、问; protected 修饰的方法只能由继承关系的类访问; private 修饰的方法只能由说明该方法的类访问; static 修饰的方法为静态方法,又叫类方法; 无static修饰的方法为对象方法。 类方法是该类的所有对象共享的方法。 abstract 修饰的方法为抽象方法,无其方法体; final 修饰的方法为最终方法,不能由子类改变; synchronized(同步) 修饰的方法执行之前给方法设置同步机制,实现线程同步; native 修饰的方法为本地方法,即方法实现与本机系统有关Java面向对象基础26方法的参数传递传值和传址 传值:基本数据类型的参数传递Class PassValu

14、ePublic static void main(String args)Int x=5;Change(x);System.out.println(x);Public static int Change(int x)x=3;Return xJava面向对象基础27方法的参数传递传址:引用数据类型的参数传递Class PassRefint x;public static void main(String args)PassRef obj=new PassRef();obj.x=5;change(obj);System.out.println(obj.x);Public static void c

15、hange(PassRef obj)obj.x=3;Java面向对象基础28方法的重载Overload方法的重载指的是在同一个类中允许同时存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可public class Testpublic static void main(String args)int isum;double fsum;isum=add(3,5);isum=add(3,5,6);fsum=add(3.2,6.5); public static int add(int x,int y)reutrn x+y;public static int add(int x,int

16、y,int z)return x+y+z;public static double add(double x,double y)return x+y;Java面向对象基础29构造方法的重载 和一般的方法重载一样,重载的构造方法具有不同个数或不同类型的参数,编译器就可以根据这一点判断出用new 关键字产生对象时,该调用哪个构造方法了。产生对象的格式是:new 类名(参数列表) ; 重载构造方法可以完成不同初始化的操作, 如:p3=new Person(“Tom”,18);语句,会做这样几件事:创建指定类的新实例对象,在堆内存中为实例对象分配内存空间,并调用指定类的构造方法,最后将实例对象的首地址

17、赋值给引用变量p3。 Java面向对象基础30类方法的调用 类方法直接和类联系在一起,它不能通过类的实例来调用,类方法中不能有对类的对象变量的操作。 类方法调用形式如下: 类名类名 . 类静态方法名类静态方法名(实参列表实参列表) 对象方法调用形式如下: 类对象名类对象名 . 类非静态方法名类非静态方法名(实参列表实参列表)Java面向对象基础31static静态变量 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。我们有时候希望无论是否产生了对象或无论产生了多少对象的情

18、况下,某些特定的数据在内存空间里只有一份,例如所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的实例对象中都单独分配一个用于代表国家名称的变量。编写使用静态变量统计一个类产生的实例对象的个数的程序Java面向对象基础32例子1/*01*/public class static_demo/*02*/*03*/ public static int i=0;/*04*/ public int j=0;/*05*/ public void show()/*06*/ /*07*/System.out.println(i);/*08*/System.out.println(j

19、);/*09*/ /*10*/*11*/*12*/class test/*13*/*14*/ public static void main(String args)/*15*/ /*16*/ static_demo obj1=new static_demo();/*17*/ obj1.i=100;/*18*/ obj1.j=200;/*19*/ obj1.show();/*20*/ static_demo obj2=new static_demo();/*21*/ obj2.show();/*22*/ /*23*/Java面向对象基础33/*01*/public class classNum

20、berDemo /*02*/*03*/ public static int objNum=0;/*04*/ public classNumberDemo()/*05*/ /*06*/ classNumberDemo.objNum+;/*07*/ /*08*/ public void show()/*09*/ /*10*/ System.out.println(the No.+classNumberDemo.objNum);/*11*/ /*12*/ /*13*/public static void main(String args)/*14*/*15*/ classNumberDemo p=n

21、ull;/*16*/ p=new classNumberDemo();/*17*/ p.show();/*18*/ p=new classNumberDemo();/*19*/ p.show();/*20*/ p=new classNumberDemo();/*21*/ p.show(); /*22*/ /*23*/例子2Java面向对象基础34静态代码块 一个类中可以使用不包含在任何方法体中的静态代码块(static block ),当类被载入时,静态代码块被执行,且只被执行一次,静态块经常用来进行类属性的初始化。 类中的静态代码块被自动执行,尽管我们产生了类的多个实例对象,但其中的静态代码

22、块只被执行了一次。当一个程序中用到了其他的类,类是在第一次被使用的时候才被装载,而不是在程序启动时就装载程序中所有可能要用到的类。 Java面向对象基础35例子 /*01*/public class static_block /*02*/ /*03*/static /*04*/ System.out.println(hello block); /*05*/ /*06*/public static void main(String args) /*07*/ /*08*/System.out.println(hello main); /*09*/ /*10*/Java面向对象基础36/*01*/p

23、ublic class classNumberDemo1 /*02*/*03*/ public static int objNum=0;/*04*/ static/*05*/ /*06*/ /以前已经创建了100个对象;/*07*/ classNumberDemo1.objNum=100;/*08*/ /*09*/ public classNumberDemo1()/*10*/ /*11*/ classNumberDemo1.objNum+;/*12*/ /*13*/ public void show()/*14*/ /*15*/ System.out.println(the No.+clas

24、sNumberDemo1.objNum);/*16*/ /*17*/ /*18*/public static void main(String args)/*19*/*20*/ classNumberDemo1 p=null;/*21*/ p=new classNumberDemo1();/*22*/ p.show();/*23*/ p=new classNumberDemo1();/*24*/ p.show();/*25*/ p=new classNumberDemo1();/*26*/ p.show(); /*27*/ /*28*/Java面向对象基础37static静态方法在静态方法里只

25、能直接调用同类中其它的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。 静态方法不能以任何方式引用this和super关键字。与上面的道理一样,因为静态方法在使用前不用创建任何实例对象,当静态方法被调用时,this所引用的对象根本就没有产生。 main() 方法是静态的,因此JVM在执行main方法时不创建main方法所在的类的实例对象,因而在main()方法中,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员,这种情况,我

26、们在以后的例子中会多次碰到。Java面向对象基础38静态构造方法Java面向对象基础39对象的创建对象的创建 要使用某一个类所定义的属性或方法时,必须先定义并创建这个类的一个对象,并用对象调用属性或方法,而不能直接用类去调用属性和方法。 定义对象的格式如下: 类名 对象名,对象名,;例如: Car myCar1,myCar2,myCar3;Person p1 = new Person();执行完后的内存状态Java面向对象基础40创建对象称为类的实例化,它的格式如下:对象名 = new 类名();例如: myCar1 = new Car(); /创建对象myCar1 定义和创建对象放在同一个语

27、句,格式如下:类名 对象名 = new 类名();例如: Car myCar4 = new Car();/定义并创建对象myCar4Java面向对象基础41对象的销毁 Java中对象的创建由程序来实现,而对象的删除和回收则不能通过程序来实现 垃圾回收过程分析 垃圾收集器是Java虚拟机中运行着的一个程序,该程序不停地检查堆Heap内存中对象的使用情况,并将无用的对象从中删除 但什么时间回收,回收的过程及次序则独立于当前程序的,完全由Java系统决定,程序开发人员没法来干涉 c+中的析构方法 java中的finalize()方法 System.gc的作用 Car myCar4 = new Car

28、();/定义并创建对象myCar4myCard4=null;/myCard4称为没有变量引用的对象,将被GC回收Java面向对象基础42包包允许将类组合成较小的单元(类似文件夹),使其易于找到和使用相应的类文件有助于避免命名冲突。在使用许多类时,类和方法的名称很难决定。有时需要使用与其他类相同的名称。包基本上隐藏了类并避免了名称上的冲突包允许在更广的范围内保护类、数据和方法,可以在包内定义类,而在包外的代码不能访问该类 “包将类名空间划分为更加容易管理的块, 包既是命名机制也是可见度控制机制 ”Java面向对象基础43创建包package mypackage;public class Calc

29、ulate public double volume(double height, double width, double depth) 声明包Java面向对象基础44导入包imporlculate;public class PackageDemo public static void main(String args) Calculate calc=new Calculate( ); 导入包Java面向对象基础45继 承 在Java编程语言中,通过继承可利用已有的类,并扩展它的属性和方法。这个已有的类可以是语言本身提供的、其他程序员编写的或程序员原来编写的。继承性在Java中无所不在。 如

30、果我们在声明类A时,指明类A继承了类B(类B是一个已定义了的类),则类A通常就拥有了类B的成员变量和方法。 此时,类B称为类A的超类(superclass),超类也称为基类; 类A称为类B的子类(subclass),子类也称为派生类。 Object类是Java中所有类的超类,也就是说Java中的类直接或间接由Object类派生而来。 Java面向对象基础46继 承 继承是面向对象编程的一个主要优点之一,它对如何设计Java类有着直接的影响。继承有如下几点好处: (1)它可以利用已有的类来创建自己的类,只需要指出自己的类和已有的其他的类有什么不同即可,而且还可以动态访问其他有关的类中的信息。 (

31、2)通过继承,可以利用Java类库所提供的丰富而有用的类,这些类都已经被很好地实现。 (3)当设计很大的程序时,继承可以使程序组织得更加层次清晰,有利于程序设计和减少错误的发生。 类继承语法形式 类继承语法形式如下: classSubClassName extends SupperClassNameJava面向对象基础47BasicCalculator /*01*/public class BasicCalculator /*02*/ public int add(int a, int b) /*03*/ /*04*/ return a+b; /*05*/ /*06*/ public int

32、minus(int a,int b) /*07*/ /*08*/ return a-b; /*09*/ /*10*/Java面向对象基础48AdvancedCalculator /*01*/public class AdvancedCalculator extends BasicCalculator /*02*/ public int multify(int a, int b) /*03*/ /*04*/ return a*b; /*05*/ /*06*/ public int devided(int a,int b) /*07*/ /*08*/ return a/b; /*09*/ /*10*/Java面向对象基础49/*01*/public cla

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论