尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第03章_面向对象听课笔记09.12.5-byLoveXForce1第三章.面向对象编程一、面向对象编程思想:从现实世界中客观存在的事物出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式面向对象更加强调运用人类在日常的思维逻辑中经常才赢的思想方法与原则,如抽象分类,继承,聚合,多态二、对象和类的概念1.对象用计算机语言对问题域中食物的描述,对象通过“属性(attribute)”和“方法(method)”来分别对应事物所具有的静态属性和动态属性对象是属性(成员变量)和方法的集合。{一类事物的具体的某一个东西(符合这类事物的具体特征的某个东西)叫对象}2.类是同种对象的集合与抽象,类中定义了这一类对象所应具有的静态和动态属性。关系:类可以看成一类对象的模板,对象可以看成该类的一个具体实例,瓶子是一个类,某个瓶子就是对象三、面向对象设计思想和步骤:(1)分析问题中有哪些类那些对象(2)分析这些对象中应该具有的属性和方法(3)分析类与类之间的关系四、Java与面向对象1.对象是Java程序的核心,在java程序中“万事万物皆对象”。2.对象可以看成静态属性(成员变量)和动态属性(方法)的封装体3.类是用来创建统一类型的对象的“模板”,在一个类中定义了该类对象所应具有的成员变量以及方法4.J2SDK提供了很多类供编程人员使用,编程人员也可以自定义自己的类五、Java类的定义类的定义主要由成员变量和方法组成声明成员变量:[modifiers]typeattr_name[=defaultValue]例如:privateintid;privateintage=20;声明方法:[modifiers]modifiersteturn_typename([argu_list]){[statements]}实体类对象实体对象类车轮车窗……int轮车char窗……代码实体职员A职员-姓名-年龄-目前工资+显示姓名()+显示年龄()+修改姓名()+领取工资()职员A:职员姓名=A年龄=30目前工资=800职员B:职员姓名=B年龄=350目前工资=900认识过程:分析过程尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第03章_面向对象听课笔记09.12.5-byLoveXForce2例如:publicintgetAge(){returnage;}publicclassPerson{intid;intage=20;voidPerson(int_id,int_age){id=_id;age=_age;}publicstaticvoidmain(String[]args){Persontom=newPerson();tom.Person(1,25);//Personjerry=newPerson();Pointp=newPoint();}}classPoint{Point(){}intx;inty;}六、成员变量成员变量可以使用java语言中任何一种数据类型(包括基本类型和引用类型),作用范围为整个类体注意:局部变量必须赋初试值才可以使用成员变量不用初始化,java系统会给你赋初始值Byte,short,int-----0Long-----0Lchar-----’\u0000’float-----0.0Fdouble-----0.0Dbloolean-----false所有引用类型-----Null七、引用类型(C中的指针,占两块内存)除了java语言中基本类型以外的变量类型Java中的对象是通过引用对其操作的内存值/*声明string类型的引用变量,但是没使它指向一个对象*/Stringsnull/*使用new语句创建一个String类型的对象并用S指向它,以后可以通过S完成对其的操作*/S=newString(“helloworld!”);0X3a123b0X3a123b堆内存…………尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第03章_面向对象听课笔记09.12.5-byLoveXForce3如何在内存中区分类和对象?类是静态的概念,代码区独享是new出来的,位于堆内存,类的每个成员变量在不同的对象中都有不同的值(除了静态变量)而方法只有一份,执行的时候才占用内存八、对象的创建和使用1.必须使用new关键字创建对象2.使用:对象(引用).队员变量来引用对象的成员变量3.使用:对象(引用).方法(参数列表)来调用对象的方法4.同一对象的每个对象有不同的成员变变量存储空间5.同一类的每个对象共享该类的方法九、Java的方法定义Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,声明格式为:[修饰符1修饰符2…..]返回值类型方法名(形式参数列表){Java语句;………}语法解释:1.形式参数:在方法被调用时用于接收外界输入的数据。2.实参:调用方法时实际传给方法的数据。3.返回值:方法在执行完毕后返回给调用它的环境的数据。4.返回值类型:事先约定的返回值的数据类型,无返回值,必须给出返回类型viod。A.Java语言中使用下述形式调用方法:对象名.方法名(实参列表)B.实参的数目、数据类型和次序必须和所调用方法声明的形式列表匹配。C.return语句中止方法的运行并指定要返回的数据。Java中进行函数调用中传递参数时,遵循传递的原则:基本类型传递的是该数据本身,引用类型传递的是对象的引用,不是对象本身十、类和对象关系(内存中)03_JAVA中的面向对象与内存解析_1.avi04_JAVA中的面向对象与内存解析_2.avi类C的代码(codeseg)(heapseg)XXXXXXXXXXXXXXXXC1.iC1.jC2.iC2.jC1C2ClassC{inti;intj;….main…{Cc1=newC();Cc2=newC();}}尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第03章_面向对象听课笔记09.12.5-byLoveXForce4十一、构造函数2009-12-913:4404_JAVA中的面向对象与内存解析_2.avi构造函数是定义在java类中的一个用来初始化对象的函数1.构造函数名字与类的名字相同,大小写也保持一致2.使用new+构造方法创建一个新的对象3.构造函数与类同名切没有返回值。即便是void也不能写4.注意:当无指定构造函数时,编译器为类自动添加形为:类名(){}的构造方法例如:Person类的构造函数publicclassPerson{intid;intage=20;Person(int_id,int_age){Id=_idAge=_age;}}Publicstaticvoidmain(String[]agrs){Persontom=newPerson(1,25);Personjrry=newPerson(1,27);}内存详细过程详解:堆内存Tom:xxx_id:1_age:25调用构造函数(方法局部变量)new一个Person对象调用完成后方法、局部变量消失Id:1age:25TOMjrryXXXXX####堆内存125127尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第03章_面向对象听课笔记09.12.5-byLoveXForce5十二、约定俗成的命名规则类名的首字母大写变量名和方法名的首字母小写运用驼峰标示十三、内存分析过程视频:J2SE_5.0_第03章_面向对象06_内存解析_1.avi07_内存解析_2.avi源码:TestBirthdate\Test.javaclassBirthDate{privateintday;privateintmonth;privateintyear;publicBirthDate(intd,intm,inty){day=d;month=m;year=y;}publicvoidsetDay(intd){day=d;}publicvoidsetMonth(intm){month=m;}publicvoidsetYear(inty){year=y;}publicintgetDay(){returnday;}publicintgetMonth(){returnmonth;}publicintgetYear(){returnyear;}publicvoiddisplay(){System.out.println(day+-+month+-+year);}}publicclassTest{publicstaticvoidmain(Stringargs[]){Testtest=newTest();intdate=9;BirthDated1=newBirthDate(7,7,1970);BirthDated2=newBirthDate(1,1,2000);test.change1(date);test.change2(d1);test.change3(d2);System.out.println(date=+date);d1.display();d2.display();}publicvoidchange1(inti){i=1234;}publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);}publicvoidchange3(BirthDateb){b.setDay(22);}}尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第03章_面向对象听课笔记09.12.5-byLoveXForce6调用过程演示(1)调用过程演示(2)栈内存d2d1maindatetest堆内存Testtest=newTest();intdate=9;BirthDated1=newBirthDate(7,7,1970);BirthDated2=newBirthDate(1,1,2000);@test.change1(date);test.change2(d1);test.change3(d2);…..………………publicvoidchange1(inti){i=1234;}publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);}publicvoidchange3(BirthDateb){b.setDay(22);}7719701120001109259587934354752栈内存change1id2d1maindatetest堆内存Testtest=newTest();intdate=9;BirthDated1=newBirthDate(7,7,1970);BirthDated2=newBirthDate(1,1,2000);test.change1(date);test.change2(d1);test.change3(d2);…..………………publicvoidchange1(inti){@i=1234;}publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);}publicvoidchange3(BirthDateb){b.setDay(22);}77197011200011092595879343547529尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第03章_面向对象听课笔记09.12.5-byLoveXForce7调用过程演示(3)调用过程演示(4)栈内存change1id2d1maindatetest堆内存Testtest=newTest();intdate=9;BirthDated1=newBirthDate(7,7,1970);BirthDated2=newBirthDate(1,1,2000);test.change1(date);test.change2(d1);test.change3(d2);…..………………