版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章. 面向对象编程一、 面向对象编程思想:从现实世界中客观存在的事物出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式面向对象更加强调运用人类在日常的思维逻辑中经常才赢的思想方法与原则,如抽象分类,继承,聚合,多态二、 对象和类的概念1. 对象用计算机语言对问题域中食物的描述,对象通过“属性(attribute)”和“方法(method)”来分别对应事物所具有的静态属性和动态属性对象是属性(成员变量)和方法的集合。一类事物的具体的某一个东西(符合这类事物的具体特征的某个东西)叫对象2. 类是同种对象的集合与抽象,类中定义了这一类对象所应具有的静态和动态属性。关系:类可以看成一
2、类对象的模板,对象可以看成该类的一个具体实例,瓶子是一个类,某个瓶子就是对象实体类对象实体对象类车 轮车 窗 int轮车 char窗 代码实体职员A职员-姓名-年龄-目前工资+显示姓名()+显示年龄()+修改姓名()+领取工资()职员A:职员姓名 = A年龄 = 30目前工资= 800职员B:职员姓名 = B年龄 = 350目前工资= 900认识过程:分析过程三、 面向对象设计思想和步骤:(1) 分析问题中有哪些类那些对象(2) 分析这些对象中应该具有的属性和方法(3) 分析类与类之间的关系四、 Java与面向对象1. 对象是Java程序的核心,在java程序中“万事万物皆对象”。2. 对象可
3、以看成静态属性(成员变量)和动态属性(方法)的封装体3. 类是用来创建统一类型的对象的“模板”,在一个类中定义了该类对象所应具有的成员变量以及方法4. J2SDK提供了很多类供编程人员使用,编程人员也可以自定义自己的类五、 Java类的定义类的定义主要由成员变量和方法组成声明成员变量: <modifiers> type<attr_name>=defaultValue例如:private int id;private int age = 20;声明方法:<modifiers >< modifiers ><teturn_type><
4、name>(<argu_list>)<statements>例如:public int getAge( ) return age ;public class Person int id;int age = 20;void Person(int _id, int _age) id = _id;age = _age;public static void main(String args) Person tom = new Person();tom.Person(1, 25);/Person jerry = new Person();Point p = new Poin
5、t();class Point Point() int x;int y;六、 成员变量成员变量可以使用java语言中任何一种数据类型(包括基本类型和引用类型),作用范围为整个类体注意: 局部变量必须赋初试值才可以使用 成员变量不用初始化,java系统会给你赋初始值Byte,short,int->0Long ->0Lchar ->u0000float ->0.0Fdouble ->0.0Dbloolean ->false所有引用类型 ->Null七、 引用类型(C中的指针,占两块内存)除了java语言中基本类型以外的变量类型Java中的对象是通过引用对其
6、操作的 内存值/* 声明string类型的引用变量,但是没使它指向一个对象*/String s null/* 使用new语句创建一个String类型的对象并用S指向它,以后可以通过S完成对其的操作*/ 0X3a123b堆内存 S = new String (“hello world!”); 0X3a123b如何在内存中区分类和对象?类是静态的概念,代码区独享是new出来的,位于堆内存,类的每个成员变量在不同的对象中都有不同的值(除了静态变量)而方法只有一份,执行的时候才占用内存八、 对象的创建和使用1. 必须使用new关键字创建对象2. 使用:对象(引用) .队员变量 来引用对象的成员变量3.
7、 使用:对象(引用).方法(参数列表)来调用对象的方法4. 同一对象的每个对象有不同的成员变变量存储空间5. 同一类的每个对象共享该类的方法九、 Java的方法定义 Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,声明格式为:修饰符1 修饰符2 . 返回值类型 方法名( 形式参数列表 )Java 语句; 语法解释:1. 形式参数:在方法被调用时用于接收外界输入的数据。2. 实参:调用方法时实际传给方法的数据。3. 返回值:方法在执行完毕后返回给调用它的环境的数据。4. 返回值类型:事先约定的返回值的数据类型,无返回值,必须给出返回类型viod。A. Java语言中使用下述
8、形式调用方法:对象名.方法名(实参列表)B. 实参的数目、数据类型和次序必须和所调用方法声明的形式列表匹配。C. return语句中止方法的运行并指定要返回的数据。Java中进行函数调用中传递参数时,遵循传递的原则:基本类型传递的是该数据本身,引用类型传递的是对象的引用,不是对象本身十、 类和对象关系(内存中) 03_JAVA中的面向对象与内存解析_1.avi 04_JAVA中的面向对象与内存解析_2.avi类C的代码( code seg)( heap seg)XXXXXXXXXXXXXXXXC1.iC1.jC2.iC2.jC1C2Class Cint i;int j;.mainC c1 =
9、new C( );C c2 = new C( );十一、 构造函数 2009-12-9 13:44 04_JAVA中的面向对象与内存解析_2.avi构造函数是定义在java类中的一个用来初始化对象的函数1. 构造函数名字与类的名字相同,大小写也保持一致2. 使用new+构造方法创建一个新的对象3. 构造函数与类同名切没有返回值。即便是void也不能写4. 注意:当无指定构造函数时,编译器为类自动添加形为: 类名( ) 的构造方法例如:Person类的构造函数public class Personint id;int age = 20;Person(int _id , int _age)Id =
10、 _idTOMjrryAge = _age;125堆内存127XXXXXPublic static void main ( String agrs)Person tom = new Person(1,25);#Person jrry = new Person(1,27);内存详细过程详解:堆内存Tom:xxx_id:1_age:25调用构造函数(方法局部变量)new一个Person对象调用完成后方法、局部变量消失Id:1age:25十二、 约定俗成的命名规则类名的首字母大写变量名和方法名的首字母小写运用驼峰标示十三、 内存分析过程视频: J2SE_5.0_第03章_面向对象 06_内存解析_1
11、.avi 07_内存解析_2.avi 源码: TestBirthdateTest.javaclass BirthDate private int day; private int month; private int year; public BirthDate(int d, int m, int y) day = d; month = m; year = y; public void setDay(int d) day = d; public void setMonth(int m) month = m; public void setYear(int y) year = y; public
12、 int getDay() return day; public int getMonth() return month; public int getYear() return year; public void display() (day + " - " + month + " - " + year); public class Test public static void main(String args) Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7
13、,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(d2); System.out.println("date=" + date); d1.display(); d2.display(); public void change1(int i) i = 1234; public void change2(BirthDate b) b = new BirthDate(22,2,2004); public void change3(Bir
14、thDate b) b.setDay(22); 调用过程演示(1) 栈内存d2d1maindatetest堆内存Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(d2);. public void change1(int i) i = 1234; public void change2(BirthDate b) b
15、 = new BirthDate(22,2,2004); public void change3(BirthDate b) b.setDay(22); 7719701120001109259587934354752调用过程演示(2) 栈内存change1à id2d1maindatetest堆内存Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.chang
16、e2(d1); test.change3(d2);. public void change1(int i) i = 1234; public void change2(BirthDate b) b = new BirthDate(22,2,2004); public void change3(BirthDate b) b.setDay(22); 77197011200011092595879343547529调用过程演示(3) 栈内存change1 à id2d1maindatetest堆内存Test test = new Test(); int date = 9; BirthDat
17、e d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(d2);. public void change1(int i) i = 1234; public void change2(BirthDate b) b = new BirthDate(22,2,2004); public void change3(BirthDate b) b.setDay(22); 77197011200011092595879343
18、547521234调用过程演示(4) 栈内存d2d1maindatetest堆内存Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(d2);. public void change1(int i) i = 1234; public void change2(BirthDate b) b = new BirthDat
19、e(22,2,2004); public void change3(BirthDate b) b.setDay(22); 7719701120001109259587934354752调用过程演示(5) 栈内存->bchange2 d2d1maindatetest堆内存Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.cha
20、nge3(d2);. public void change1(int i) i = 1234; public void change2(BirthDate b) b = new BirthDate(22,2,2004); public void change3(BirthDate b) b.setDay(22); 7719701120001109259587934354752587934调用过程演示(6) 栈内存->bchange2 d2d1maindatetest堆内存Test test = new Test(); int date = 9; BirthDate d1= new Bir
21、thDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(d2);. public void change1(int i) i = 1234; public void change2(BirthDate b) b = new BirthDate(22,2,2004); public void change3(BirthDate b) b.setDay(22); 771970112000110925958793435475258797622
22、22004调用过程演示(7) 栈内存d2d1maindatetest堆内存Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(d2);. public void change1(int i) i = 1234; public void change2(BirthDate b) b = new BirthDate(22
23、,2,2004); public void change3(BirthDate b) b.setDay(22); 7719701120001109259587934354752调用过程演示(8) 栈内存change3>bd2d1maindatetest堆内存Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(d
24、2);. public void change1(int i) i = 1234; public void change2(BirthDate b) b = new BirthDate(22,2,2004); public void change3(BirthDate b) b.setDay(22); 7719701120001109259587934354752354752调用过程演示(9) 栈内存change3>bd2d1maindatetest堆内存Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7
25、,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(d2);. public void change1(int i) i = 1234; public void change2(BirthDate b) b = new BirthDate(22,2,2004); public void change3(BirthDate b) b.setDay(22); 77197022120001109259587934354752354752调用过程演示(10
26、) 栈内存d2d1maindatetest堆内存Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(d2); . public void change1(int i) i = 1234; public void change2(BirthDate b) b = new BirthDate(22,2,2004); pu
27、blic void change3(BirthDate b) b.setDay(22); 7719702212000110925958793435475208_内存解析_3.avitest:xxxdate:9d1:xxxx112000771970D2:xxxx练习: 视频: 09_练习.avi 10_答案.avi 11_内存解析.avi源码:TestPointTestPoint.java class Point double x, y, z;Point(double _x, double _y, double _z) x = _x;y = _y;z = _z;void setX(double
28、_x) x = _x;double getDistance(Point p) return (x - p.x)*(x - p.x) + (y - p.y)*(y - p.y) + (z - p.z)*(z - p.z);public class TestPoint public static void main(String args) Point p = new Point(1.0, 2.0, 3.0);Point p1 = new Point(0.0, 0.0, 0.0);System.out.println(p.getDistance(p1);p.setX(5.0);System.out
29、.println(p.getDistance(new Point(1.0, 1.0, 1.0);内存调用过程见视频stackp1:xxxp:xxxheap5.02.03.00.02009-12-9 19:43:33十四、 方法重载 OverLoad 2009-12-11 10:45:05 方法的重载指一个类中可以定义有相同的名字,但参数个数不同和参数类型不同的多个方法。调用时会根据不同的参数表选择对应方法能被编译器区分的方法既是构成重载 构造函数(方法)也可以重载 见二十三、继承中的构造方法 P20方法重载可以改变返回值的类型。(不知道为什么2009-12-12 21:24:11)例子1 12
30、_方法重载与内存解析.aviTestOverLoad.javapublic class TestOverLoad public static void main(String args) Person p = new Person();Person p1 = new Person(400);Person p2 = new Person(2, 500);();("ok");class Person /定义三个灵活的方法Person() id = 0;age = 20;Person(int _id) id = _id;age = 23;Person(in
31、t _id, int _age) id = _id;age = _age; /成员变量定义 private int id; private int age = 20; /方法定义 public int getAge() return age; public void setAge(int i) age = i; public int getId() return id; void info() System.out.println("my id is : " + id); void info(String t) System.out.println(t + " i
32、d " + id); 例子2 12_方法重载与内存解析.aviTestOverloadtest.javapublic class Test void max(int a , int b) System.out.println( a > b ? a : b );参数类型不同,可以被编译器识别void max(short a , short b) System.out.println("short");System.out.println( a > b ? a : b );void max(float a, float b) System.out.prin
33、tln( a > b ? a : b ); 参数返回类型不同,构成重名不能被编译器识别int max(float a, float b) System.out.println( a > b ? a : b );public static void main(String args) Test t = new Test();t.max(3, 4);short a = 3;short b = 4;t.max(a, b);十五、 对象创建与使用_复习与练习 源码:TestCircle.java 视频:14_TestCircle程序分析_1.avi 15_TestCircle程序分析_2.
34、avi 16_TestCircle程序分析_3.aviclass Point private double x; private double y; Point(double x1, double y1) x = x1; y = y1; public double getX() return x; public double getY() return y; public void setX(double i) x = i; public void setY(double i) y = i; /class Circle private Point o; private double radiu
35、s; Circle(Point p, double r) o = p; radius = r; Circle(double r) o = new Point(0.0, 0.0); radius = r; boolean contains(Point p) double x = p.getX() - o.getX(); double y = p.getY() - o.getY(); if(x*x + y*y > radius * radius) return false; else return true; public void setO(double x, double y) o.se
36、tX(x); o.setY(y); public Point getO() return o; public double getRadius() return radius; public void setRadius(double r) radius = r; public double area() return 3.14 * radius * radius; public class TestCircle public static void main(String args) Circle c1 = new Circle(new Point(1.0,2.0), 2.0); Circl
37、e c2 = new Circle(5.0); System.out.println("c1:("+c1.getO().getX()+"," +c1.getO().getY()+"),"+c1.getRadius(); System.out.println("c2:("+c2.getO().getX() +","+c2.getO().getY()+"),"+c2.getRadius(); System.out.println("c1 area = "+c1
38、.area(); System.out.println("c1 area = "+c2.area(); c1.setO(5,6); c2.setRadius(9.0); System.out.println("c1:("+c1.getO().getX()+"," +c1.getO().getY()+"),"+c1.getRadius(); System.out.println("c2:("+c2.getO().getX()+"," +c2.getO().getY()+&quo
39、t;),"+c2.getRadius(); System.out.println("c1 area = "+c1.area(); System.out.println("c1 area = "+c2.area(); Point p1 = new Point(5.2, 6.3); System.out.println(c1.contains(p1); System.out.println(c1.contains(new Point(10.0,9.0); stackc1:xxxxc2:xxxxp1:xxxheapo5.0o5.00.06.00.05
40、.05.26.3十六、 this关键字定义:在类的方法定义中使用this关键字代表使用该方法的对象引用 使用 this (argument_list) 调用本类的另外的构造方法使用this.xxx = xxx 获取本类另外一个构造方法传来的值构造函数和一般成员函数在继承中的区别的练习使用:当必须指出当前使用方法的对象是谁时要使用this有时使用this可以处理方法中成员变量和参数重名情况this可以看做一变量,它的值是当前对象引用public class Leafint i = 0;leaf (int i )this .i = i ;leaf increament()i+;return thi
41、s;thisvoid print( ) System.ot. println( “i = ”+I );public static void main(String args)Leaf leaf = new Leaf(100);Leaf.increament().increament().print();十七、 Static关键字1. 在类中,使用是static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对该类的所有对象来说,static成员变量只有一份。2. 用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可
42、访问非static的成员。- -静态方法不再是针对某个对象调用,所以不能访问非静态成员3. 可以通过对象引用或者类名(不需实例化)访问静态成员。4. 我觉得就是在使用内部类时使用, 如果不需要内部类队形想与其外围类之间有联系,那么可以将内部类声明为 static,这通常叫 嵌套类. 嵌套类意味着: 1 要创建嵌套类的对象,并不需要其外围类的对象. 2 不能从嵌套类的对象中访问非静态类的外围类对象! 5. 例子 源码:Cat.java 视频:18_static关键字_1.avi 19_static_关键字_2.avipublic class Cat private static int sid
43、= 0; private String name; int id; Cat(String name) = name; id = sid+; public void info() ("My name is "+name+" No."+id); public static void main(String arg) Cat.sid = 100; Cat mimi = new Cat("mimi"); mimi.sid = 2000; Cat pipi = new Cat("pipi"); mimi.
44、info(); (); 十八、 package和import 2009-12-11 15:00:211. java引入包(package)机制提供类的多重类命名空间。2. package语句作为java源文件第一句,指明该文件定义的类所在包。package pkg1.pkg2.pkg3 .; 约定俗成的命名:com.域名.xxx3. java编译器把语句对应于文件系统的目录管理,package语句中使用” . ”点值指明包(目录)层次 如 .sxt; 指的是该文件中所有类位于.comsxt目录下4. Java引入import机制简化包的引入总结:1声明 而编译好的文件xx.c
45、lass必须位于正确目录下 pkgxx. 2 使用包,在另一个类中使用包中的类,必须写全名称, 3 可以用import关键词,在文件开头引入要使用的类,如import com.bjsxt.java.* 4 可以不需要用import语句而直接使用java.lang包中的类 5 其它类访问的飞方式: 写全名 引入import(具体类名 * ) 注意:访问位于同一个包中的类不需要引入 6 必须class文件的最上层包的父目录位于classpath下例子:1最初始使用包的方法在classpath的testpackage目录下 20_package和import语句_1 2 3 4.aviDog.jav
46、apublic class Dog public static void main(String args) com.bjsxt.java140.Cat c = new .Cat();/写全名combjsxtjava140cat.java位于正确的目录下package com.bjsxt.java140;/声明包class Cat 2简化使用包的方法在classpath的testpackage目录下Dog.javaimport com.bjsxt.java140.*;/指定包的位置public class Dog public static void main(String args) Cat c = new Cat();/不需要写全名combjsxtjava140cat.java位于正确的目录下package com.bjsxt.java140;/声明包class Cat J2SDK中主要包的介绍Jdk目录下jrelibrt.jar 里面包含运行时需要的所有class文件:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度婚姻解除协议谈判策略与技巧详解3篇
- 二零二五年度个人健康保险产品定制合同
- 美容行业护肤技术培训总结
- 娱乐休闲行业推广总结
- 二零二五年度个人快递业务承包合同范本8篇
- 科创孵化器服务模式与运营模式
- 二零二五版庭院租赁合同包含庭院内咖啡厅经营许可3篇
- 二零二五年度金融业务授权委托书模板与字号规范6篇
- 二零二五年度农田租赁与农业电商平台合作协议4篇
- 二零二五年度设计公司股权转让与智慧城市建设合同3篇
- 《县域肿瘤防治中心评估标准》
- 做好八件事快乐过寒假-2024-2025学年上学期中学寒假家长会课件-2024-2025学年高中主题班会课件
- (八省联考)云南省2025年普通高校招生适应性测试 物理试卷(含答案解析)
- 调解行业可行性分析报告
- 科创板知识题库试题及答案
- 《血管活性药物静脉输注护理》团体标准解读
- 护理急性支气管炎
- NGS二代测序培训
- 连续铸轧机的工作原理及各主要参数
- 幼儿园中班健康:《小河马的大口罩》 课件
- 专利补正书实例
评论
0/150
提交评论