《面向对象编程基础优秀PPT.ppt》由会员分享,可在线阅读,更多相关《面向对象编程基础优秀PPT.ppt(75页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、面向对象编程基础面向对象编程基础第一页,本课件共有75页对对象的特征象的特征属性属性属性属性对象具有的各种特征对象具有的各种特征,用变量来存储用变量来存储 每个对象的每个属性都拥有特定值每个对象的每个属性都拥有特定值例如:王小红和朱小雨的体重不一样例如:王小红和朱小雨的体重不一样 体重:体重:60kg姓名:王小红姓名:王小红属性属性 年龄:年龄:35岁岁收银员小王收银员小王 第二页,本课件共有75页对对象的特征象的特征方法方法方法方法对象执行的操作对象执行的操作,描述对象的行为描述对象的行为 打单打单 收银收银 方法方法 刷卡刷卡 收银员王小红收银员王小红第三页,本课件共有75页类:从对象抽取
2、出类类:从对象抽取出类顾客类轿车类 类概括了同类对象共有的性质:属性和方法类概括了同类对象共有的性质:属性和方法类是对象的类型类是对象的类型不同于不同于int类型:具有方法类型:具有方法 各种口味的球状冰淇淋各种口味的球状冰淇淋 球状冰淇淋模子球状冰淇淋模子第四页,本课件共有75页类和对象有什么区别呢?类和对象有什么区别呢?类是模板,比如说:类是模板,比如说:“人人”对象是类的一个实例,比如:对象是类的一个实例,比如:“小布什小布什”小布什小布什普京普京克林顿克林顿“人人”类类特征(属性)特征(属性)姓名姓名性别性别年龄年龄体重体重行为(方法)行为(方法)衣衣食食住住行行第五页,本课件共有75
3、页Java类模板类模板class class 类名类名 /成员变量部分成员变量部分 变量声明变量声明1;1;变量声明变量声明2;2;变量声明变量声明n;n;/定义方法部分定义方法部分 方法方法1;1;方法方法2;2;方法方法m;m;第六页,本课件共有75页Java类的例子类的例子public class Circle public class Circle private double radius;/private double radius;/成员变量成员变量radiusradius代表圆的半径代表圆的半径 /构造方法,用来初始化新对象构造方法,用来初始化新对象public Circle(
4、double radius)public Circle(double radius)this.radius=radius;this.radius=radius;/取得圆的半径取得圆的半径public double getRadius()public double getRadius()return radius;return radius;/设置圆的半径设置圆的半径public void setRadius(double radius)public void setRadius(double radius)this.radius=radius;this.radius=radius;/计算圆的面
5、积计算圆的面积public double getArea()public double getArea()return Math.PI*radius*radius;return Math.PI*radius*radius;第七页,本课件共有75页成员变量成员变量public class Circle public class Circle private double radius;private double radius;/构造方法,用来初始化新对象构造方法,用来初始化新对象public Circle(double radius)public Circle(double radius)th
6、is.radiusthis.radius=radius;=radius;/取得圆的半径取得圆的半径public double getRadius()public double getRadius()return return radiusradius;/设置圆的半径设置圆的半径public void setRadius(double radius)public void setRadius(double radius)this.radiusthis.radius=radius;=radius;/计算圆的面积计算圆的面积double getArea()double getArea()return
7、 Math.PI*return Math.PI*radiusradius*radiusradius;修饰符修饰符 类型类型 变量名变量名 =初值初值;成员变量在所在类的所有方法中都是有效的成员变量在所在类的所有方法中都是有效的成员变量可以和局部变量重名,成员变量可以和局部变量重名,这时访问成员变量要使用这时访问成员变量要使用this.this.成员变量名成员变量名P42P42第八页,本课件共有75页方法方法double getArea()double getArea()return Math.PI*return Math.PI*radiusradius*radiusradius;返回类型返回类
8、型方法名称方法名称(类型类型 参数名,类型参数名,类型 参数名参数名)非非voidvoid方法中,方法中,returnreturn语句是语句是必需必需的!的!voidvoid方法可以没有方法可以没有returnreturn语句,也可以有不带任何值的语句,也可以有不带任何值的returnreturn语句,语句,仅用于终止方法仅用于终止方法,返回调用处返回调用处P42P42第九页,本课件共有75页方法重载方法重载public class TestMethodOverloading public class TestMethodOverloading public static void main(
9、String args)public static void main(String args)System.out.println(max(3,4);System.out.println(max(3,4);System.out.println(max(3.0,5.4);System.out.println(max(3.0,5.4);System.out.println(max(3.0,5.4,10.14);System.out.println(max(3.0,5.4,10.14);public static int public static int max(int num1,int num
10、2)max(int num1,int num2)if(num1 num2)if(num1 num2)return num1;return num1;else else return num2;return num2;public static double public static double max(double num1,double num2)max(double num1,double num2)if(num1 num2)if(num1 num2)return num1;return num1;else else return num2;return num2;public sta
11、tic double public static double max(double num1,double num2,double num3)max(double num1,double num2,double num3)return max(max(num1,num2),num3);return max(max(num1,num2),num3);同一个类中的两个或多个同一个类中的两个或多个方法具有相同的名称,方法具有相同的名称,但有不同的参数列表。但有不同的参数列表。Java Java 使用参数的类型、使用参数的类型、数量和顺序决定实际调用数量和顺序决定实际调用重载方法的哪个版本重载方法的
12、哪个版本第十页,本课件共有75页11什么是构造方法什么是构造方法构造方法负责对象成员的初始化工作,为成员变量赋予合适的初始值构造方法负责对象成员的初始化工作,为成员变量赋予合适的初始值构造方法必须满足以下语法规则:构造方法必须满足以下语法规则:1 1、方法名与类名相同、方法名与类名相同2 2、没有返回类型,没有、没有返回类型,没有voidvoidpublic class Circle public class Circle private double radius;private double radius;public Circle(double radius)public Circle(
13、double radius)this.radius=radius;this.radius=radius;public class Test public class Test public static void main(String args)public static void main(String args)Circle c1=new Circle(2);/Circle c1=new Circle(2);/创建创建CircleCircle对象,半径是对象,半径是2 2 Circle c2=new Circle(5);/Circle c2=new Circle(5);/创建创建Circ
14、leCircle对象,半径是对象,半径是5 5 使用使用newnew关键字调用构造方法关键字调用构造方法,创建对象创建对象P43P43第十一页,本课件共有75页什么是构造方法什么是构造方法 class Welcomeclass Welcome public static void main(String args)public static void main(String args)System.out.println(System.out.println(“welcome to Java!welcome to Java!”););这个类有构造方法吗?这个类有构造方法吗?如何创建一个如何创建
15、一个WelcomeWelcome对象?对象?类可以不声明构造方法,在这种情况下,类中隐含地声明了一个类可以不声明构造方法,在这种情况下,类中隐含地声明了一个方法体为空的无参构造方法方法体为空的无参构造方法,这个构造方法称为,这个构造方法称为默认构造方法。默认构造方法。只有当类中只有当类中没有明确声明构造方法时,默认构造方法才会自动生成。没有明确声明构造方法时,默认构造方法才会自动生成。创建创建WelcomeWelcome对象对象:Welcome w=new Welcome();/:Welcome w=new Welcome();/调用无参构造方法创建对象调用无参构造方法创建对象第十二页,本课件
16、共有75页如何创建对象如何创建对象1 1、声明变量:类名、声明变量:类名 对象名对象名;2 2、使用、使用newnew创建对象创建对象:new new 构造方法构造方法(实参实参)3 3、两个步骤同时:、两个步骤同时:类名类名 对象名对象名 =new=new 构造方法构造方法(实参实参););c1=new Circle(5);c1=new Circle(5);c2=new Circle(6);c2=new Circle(6);Circle c1;Circle c1;Circle c2;Circle c2;CircleCircle c1=new Circle(5);c1=new Circle(5
17、);CircleCircle c2=new Circle(6);c2=new Circle(6);P44P44第十三页,本课件共有75页JavaJava语言将数据类型分成两类:语言将数据类型分成两类:基础数据类型:基础数据类型:bytebyte,shortshort,intint,longlong,floatfloat,doubledouble,booleanboolean,charchar引用类型:类、数组、接口引用类型:类、数组、接口F基础数据类型变量存放的是数据值基础数据类型变量存放的是数据值Fint i=10;int i=10;Fint j=12;int j=12;F引用变量包含对象或
18、者数组的引用地址引用变量包含对象或者数组的引用地址FCircle c;Circle c;Fc=new Circle(5.0);c=new Circle(5.0);对象的内存模型对象的内存模型1010i:i:j:j:1212c:c:0 x34AC00 x34AC0c:c:radiusradius:CircleCircle对象,内存对象,内存地址地址0 x34AC00 x34AC05.05.0第十四页,本课件共有75页对象的内存模型对象的内存模型Circle c1=new Circle(5);Circle c1=new Circle(5);Circle c2=new Circle(6);Circl
19、e c2=new Circle(6);c1=c2c1=c2;c1:0 x34AB6c2:radiusradius:CircleCircle对象,内存地对象,内存地址址0 x34AC00 x34AC05.0radiusradius:CircleCircle对象,内存地对象,内存地址址0 x34AB60 x34AB66.0如果一个对象没有任何引用指向它,该对象就成为无用对象(半径为如果一个对象没有任何引用指向它,该对象就成为无用对象(半径为5 5的圆),的圆),可以被垃圾回收,可以被垃圾回收,JavaJava虚拟机会自动回收无用对象,释放空间虚拟机会自动回收无用对象,释放空间0 x34AC00 x
20、34AB6无用对象,垃圾无用对象,垃圾第十五页,本课件共有75页使用对象使用对象使用对象的一般形式:使用对象的一般形式:对象名对象名.成员变量成员变量对象名对象名.方法名方法名(实参实参)public class Test public class Test public static void main(String args)public static void main(String args)Circle c1=new Circle(2);/Circle c1=new Circle(2);/创建创建CircleCircle对象,半径是对象,半径是2 2 Circle c2=new Ci
21、rcle(5);/Circle c2=new Circle(5);/创建创建CircleCircle对象,半径是对象,半径是5 5 double area=double area=c1.getArea();c1.getArea();System.out.println(System.out.println(“c1c1的面积是:的面积是:”+area);+area);System.out.println(System.out.println(“c2c2的半径是:的半径是:”+c2.getRadius()c2.getRadius(););P45P45第十六页,本课件共有75页类的包含关系类的包含关
22、系class B class B int b1;int b1;int b2;int b2;B(int x,int y)B(int x,int y)b1=x;b1=x;b2=y;b2=y;void write()void write()System.out.print(System.out.print(“B B类的输出!类的输出!”););class A class A B b;B b;int a;int a;A(int x,int y,int z)A(int x,int y,int z)b=new B(x,y);b=new B(x,y);a=z;a=z;b.write();b.write();
23、class Example class Example public static void main(String args)public static void main(String args)A obj =new A(1,2,3);A obj =new A(1,2,3);P57P57第十七页,本课件共有75页thisthis关键字关键字thisthis指的是当前对象,指的是当前对象,thisthis的用途有下面三种:的用途有下面三种:在实例方法或构造方法内部引用成员变量在实例方法或构造方法内部引用成员变量在实例方法或构造方法内部调用方法在实例方法或构造方法内部调用方法在构造方法内部调用
24、本类的其它构造方法在构造方法内部调用本类的其它构造方法P57P57第十八页,本课件共有75页使用使用this引用成员变量引用成员变量public class Circle public class Circle private double radius;private double radius;public Circle(double radius)public Circle(double radius)this.radius=radius;this.radius=radius;public double getRadius()public double getRadius()return
25、 radius;return radius;public void setRadius(double radius)public void setRadius(double radius)this.radius=radius;this.radius=radius;double getArea()double getArea()return return Math.PI*radius*radiusMath.PI*radius*radius;因为参数和成员变量重名,因为参数和成员变量重名,这里使用这里使用this.radiusthis.radius表示表示成员变量成员变量radiusradius实
26、例成员变量前面隐含实例成员变量前面隐含thisthis一般省略,这里相当于:一般省略,这里相当于:Math.PI*this.radius*this.radiusMath.PI*this.radius*this.radiusP56P56第十九页,本课件共有75页使用使用this调用本类的方法调用本类的方法public class Circle public class Circle private double radius;private double radius;public Circle(double radius)public Circle(double radius)this.set
27、Radius();this.setRadius();public double getRadius()public double getRadius()return radius;return radius;public void setRadius(double radius)public void setRadius(double radius)this.radius=radius;this.radius=radius;double getArea()double getArea()return Math.PI*radius*radius;return Math.PI*radius*rad
28、ius;实例方法前面隐含实例方法前面隐含thisthis,一般省略,一般省略P56P56第二十页,本课件共有75页this调用构造方法调用构造方法public class Circle public class Circle private double radius;private double radius;public Circle()public Circle()this(1.0);this(1.0);public Circle(double radius)public Circle(double radius)this.radius=radius;this.radius=radius
29、;public double getArea()public double getArea()return Math.PI*radius*radius;return Math.PI*radius*radius;调用本类的其他构造方法调用本类的其他构造方法不能使用构造方法名称,例如不能使用构造方法名称,例如Circle(1.0)Circle(1.0)只能使用只能使用this(this(实参实参)thisthis必须是构造方法第一句必须是构造方法第一句P57P57第二十一页,本课件共有75页public class Rectangle public class Rectangle int x,y,
30、width,height;int x,y,width,height;public Rectangle(int w,int h)public Rectangle(int w,int h)this(1,1,w,h);/this(1,1,w,h);/必须写在第一句必须写在第一句 /Rectangle(1,1,w,h);it /Rectangle(1,1,w,h);its wrongs wrong public Rectangle(int x,int y,int w,int h)public Rectangle(int x,int y,int w,int h)this.x=x;this.x=x;thi
31、s.y=y;this.y=y;this.width=width;this.width=width;this.height=height;this.height=height;Rectangle r=new Rectangle(2,4);Rectangle r=new Rectangle(2,4);第二十二页,本课件共有75页实例变量和类变量实例变量和类变量(静态变量静态变量)public class Circle public class Circle static double PI=3.14;static double PI=3.14;double radius;double radius
32、;public Circle(double radius)public Circle(double radius)this.radius=radius;this.radius=radius;double getArea()double getArea()return Math.PI*radius*radius;return Math.PI*radius*radius;使用使用staticstatic修饰的是类变量修饰的是类变量没有没有staticstatic修饰的是实例变量修饰的是实例变量P46P46第二十三页,本课件共有75页Circle c1=new Circle(5);Circle c1
33、=new Circle(5);Circle c2=new Circle(2.5);Circle c2=new Circle(2.5);c1c1c2c2实例变量(非实例变量(非staticstatic)属于对象,其值存储于对象的空间,必)属于对象,其值存储于对象的空间,必须须通过对象名通过对象名来访问。来访问。double r1=double r1=c1.radiusc1.radius;double r2=double r2=c2.radiusc2.radius;radiusradius:5.0radiusradius:2.5P46P46第二十四页,本课件共有75页Circle c1=new C
34、ircle(5);Circle c1=new Circle(5);Circle c2=new Circle(2.5);Circle c2=new Circle(2.5);c1c1c2c2staticstatic变量存储于类的公共内存,被此类的所有对象共享,变量存储于类的公共内存,被此类的所有对象共享,既可以用对象名访问,也可以直接用类名访问既可以用对象名访问,也可以直接用类名访问double p1=c1.PI;double p1=c1.PI;double p2=c2.PI;double p2=c2.PI;double p3=Circle.PI;double p3=Circle.PI;radiu
35、sradius:5.0radiusradius:2.5PIPI:3.143.14P46P46第二十五页,本课件共有75页public class TestClass public class TestClass static int ts;static int ts;int i;int i;public static void main(String args)public static void main(String args)TestClass a=new TestClass();TestClass a=new TestClass();TestClass b=new TestClass(
36、);TestClass b=new TestClass();a.i=3;a.i=3;b.i=5;b.i=5;a.ts=12;a.ts=12;b.ts+=5;b.ts+=5;TestClass.ts+=7;TestClass.ts+=7;System.out.print(b.i);System.out.print(b.i);System.out.print(TestClass.ts);System.out.print(TestClass.ts);第二十六页,本课件共有75页public class Circle public class Circle double radius;double r
37、adius;static int static int numberOfObjectsnumberOfObjects=0;=0;Circle()Circle()radius=1.0;radius=1.0;numberOfObjects+;numberOfObjects+;Circle(double newRadius)Circle(double newRadius)radius=newRadius;radius=newRadius;numberOfObjects+;numberOfObjects+;double getArea()double getArea()return radius*ra
38、dius*Math.PI;return radius*radius*Math.PI;第二十七页,本课件共有75页实例方法和类方法实例方法和类方法public class Circle public class Circle static double PI=3.14;static double PI=3.14;double radius;double radius;public Circle(double radius)public Circle(double radius)this.radius=radius;this.radius=radius;double getArea()double
39、 getArea()return Math.PI*radius*radius;return Math.PI*radius*radius;static void meth()static void meth()public static void main(String args)public static void main(String args)使用使用staticstatic修饰的是类方法修饰的是类方法没有没有staticstatic修饰的是实例方法修饰的是实例方法P46P46第二十八页,本课件共有75页实例方法和类方法实例方法和类方法实例方法可以接收实例方法可以接收this(this(
40、当前对象当前对象),并可以在其内部使用,并可以在其内部使用thisthis引用实例成引用实例成员,实例方法只能通过对象名来调用。员,实例方法只能通过对象名来调用。public class Circle public class Circle static double PI=3.14;static double PI=3.14;double radius;double radius;public Circle(double radius)public Circle(double radius)this.radius=radius;this.radius=radius;double getAre
41、a()double getArea()return PI*radius*radius;/radiusreturn PI*radius*radius;/radius前隐含前隐含thisthis Circle c1 =new Circle(5);Circle c1 =new Circle(5);c1.getArea();/c1.getArea();/此次调用的此次调用的thisthis指的是指的是c1c1,计算,计算3.14*5*53.14*5*5P46P46第二十九页,本课件共有75页实例方法和类方法实例方法和类方法staticstatic方法方法不能接收不能接收this(this(当前对象当前
42、对象),方法内部,方法内部不能使用不能使用thisthis,静态方法可以用对象名,静态方法可以用对象名来调用,但通常用类名调用,例如来调用,但通常用类名调用,例如Math.random()Math.random()。public class Circle public class Circle static double PI=3.14;static double PI=3.14;double radius;double radius;public Circle(double radius)public Circle(double radius)this.radius=radius;this.
43、radius=radius;double getArea()double getArea()return PI*radius*radius;return PI*radius*radius;static void meth()static void meth()double area=PI*radius*radius;double area=PI*radius*radius;这句语句有什么错?这句语句有什么错?不能在不能在staticstatic方法内部直接访问实例成员变量!方法内部直接访问实例成员变量!不能在不能在staticstatic方法内部直接访问实例方法!方法内部直接访问实例方法!P4
44、6P46第三十页,本课件共有75页包的声明和使用包的声明和使用JavaJava的每个类都属于一个包,要把一个类放入包中,只需在的每个类都属于一个包,要把一个类放入包中,只需在javajava文件文件的最前端加上的最前端加上packagepackage语句,格式为:语句,格式为:pacakge pacakge 包名包名;package graphics;package graphics;public class Circle public class Circle double radius;double radius;public Circle(double radius)public Cir
45、cle(double radius)this.radius=radius;this.radius=radius;double getArea()double getArea()return PI*radius*radius;return PI*radius*radius;package graphics;package graphics;public class Columne public class Columne class Triangle class Triangle class Rectangle class Rectangle 多个多个javajava文件开头有相同的包声明,这些
46、文件中所有的类都属于这个包文件开头有相同的包声明,这些文件中所有的类都属于这个包P31P31第三十一页,本课件共有75页包的声明和使用包的声明和使用如果一个文件的首行没有包声明,那么这个文件里的所有类都属如果一个文件的首行没有包声明,那么这个文件里的所有类都属于默认包于默认包(无名包无名包)。包是有包是有层层次关系的,因此包的命名也要有次关系的,因此包的命名也要有层层次,例如:次,例如:java.lang java.lang javax.swing javax.swing java.awt.event java.awt.eventP31P31第三十二页,本课件共有75页访问外包中的类访问外包中
47、的类package cn.edu.njcit;package cn.edu.njcit;import java.util.Date;import java.util.Date;Import java.text.SimpleDateFormat;Import java.text.SimpleDateFormat;public class MyClass public class MyClass public static void main(String args)public static void main(String args)Date d=new Date();/Date d=new
48、Date();/获取当前系统的时间获取当前系统的时间SimpleDateFormat s=new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);SimpleDateFormat s=new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);String dateStr=s.format(d);String dateStr=s.format(d);package cn.edu.njcit;package cn.edu.njcit;public class MyClass public class MyClass public static
49、void main(String args)public static void main(String args)java.util.Datejava.util.Date d=new java.util.Date();d=new java.util.Date();/获取当前系统的时间获取当前系统的时间 java.text.SimpleDateFormat s=java.text.SimpleDateFormat s=new java.text.SimpleDateFormat(yyyy-MM-dd HH:mm:ss);new java.text.SimpleDateFormat(yyyy-M
50、M-dd HH:mm:ss);String dateStr=s.format(d);String dateStr=s.format(d);使用包名使用包名.类名访问类名访问使用使用import import 包名包名.类名类名第三十三页,本课件共有75页访问外包中的类访问外包中的类package cn.edu.njcit;package cn.edu.njcit;import java.util.*;import java.util.*;Import java.text.*;Import java.text.*;public class MyClass public class MyClass