马士兵JAVA视频教程第03章面向对象.docx

上传人:b****6 文档编号:16248385 上传时间:2023-07-12 格式:DOCX 页数:61 大小:1.96MB
下载 相关 举报
马士兵JAVA视频教程第03章面向对象.docx_第1页
第1页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第2页
第2页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第3页
第3页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第4页
第4页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第5页
第5页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第6页
第6页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第7页
第7页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第8页
第8页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第9页
第9页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第10页
第10页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第11页
第11页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第12页
第12页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第13页
第13页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第14页
第14页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第15页
第15页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第16页
第16页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第17页
第17页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第18页
第18页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第19页
第19页 / 共61页
马士兵JAVA视频教程第03章面向对象.docx_第20页
第20页 / 共61页
亲,该文档总共61页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

马士兵JAVA视频教程第03章面向对象.docx

《马士兵JAVA视频教程第03章面向对象.docx》由会员分享,可在线阅读,更多相关《马士兵JAVA视频教程第03章面向对象.docx(61页珍藏版)》请在冰点文库上搜索。

马士兵JAVA视频教程第03章面向对象.docx

马士兵JAVA视频教程第03章面向对象

第三章.面向对象编程

一、面向对象编程思想:

从现实世界中客观存在的事物出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式

面向对象更加强调运用人类在日常的思维逻辑中经常才赢的思想方法与原则,如抽象分类,继承,聚合,多态

二、对象和类的概念

1.对象用计算机语言对问题域中事物的描述,对象通过“属性(attribute)”和“方法(method)”来分别对应事物所具有的静态属性和动态属性

对象是属性(成员变量)和方法的集合。

{一类事物的具体的某一个东西(符合这类事物的具体特征的某个东西)叫对象}

2.类是同种对象的集合与抽象,类中定义了这一类对象所应具有的静态和动态属性。

关系:

类可以看成一类对象的模板,对象可以看成该类的一个具体实例,瓶子是一个类,某个瓶子就是对象

三、面向对象设计思想和步骤:

(1)分析问题中有哪些类那些对象

(2)分析这些对象中应该具有的属性和方法

(3)分析类与类之间的关系

四、Java与面向对象

1.对象是Java程序的核心,在java程序中“万事万物皆对象”。

(先定义类才有对象)

2.对象可以看成静态属性(成员变量)和动态属性(方法)的封装体

3.类是用来创建统一类型的对象的“模板”,在一个类中定义了该类对象所应具有的成员变量以及方法

4.J2SDK提供了很多类供编程人员使用,编程人员也可以自定义自己的类

5.

五、Java类的定义

类的定义主要由成员变量和方法组成

声明成员变量:

[]type[=defaultValue]

例如:

privateintid;privateintage=20;

声明方法:

[]([]){

[]

}

例如:

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;

}

六、成员变量:

1:

成员变量可以使用java语言中任何一种数据类型(包括基本类型和引用类型);2:

作用范围为整个类体;3:

在定义成员变量时可以对其初始化,如果不对其初始化,,java系统会默认给你赋初始值

注意:

局部变量必须赋初始值才可以使用

Byte,short,int---->0

Long----->0L

char----->’\u0000’

float----->0.0F

double----->0.0D

bloolean----->false

所有引用类型----->Null

 

七、引用类型(C中的指针,占两块内存)

除了java语言中基本类型以外的变量类型

Java中的对象是通过引用对其操作的内存值

/*声明string类型的引用变量,但是没使它指向一个对象*/

Stringsnull

/*使用new语句创建一个String类型的对象并

用S指向它,以后可以通过S完成对其的操作*/

S=newString(“helloworld!

”);0X3a123b

 

如何在内存中区分类和对象?

类是静态的概念,代码区

对象是new出来的,位于堆内存,类的每个成员变量在不同的对象中都有不同的值(除了静态变量)

而方法只有一份,执行的时候才占用内存

八、对象的创建和使用

1.必须使用new关键字创建对象

2.使用:

对象(引用).队员变量来引用对象的成员变量

3.使用:

对象(引用).方法(参数列表)来调用对象的方法

4.同一对象的每个对象有不同的成员变变量存储空间

5.同一类的每个对象共享该类的方法

Java的方法定义

Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,声明格式为:

[修饰符1修饰符2…..]返回值类型方法名(形式参数列表){

Java语句;………

}

语法解释:

1.形式参数:

在方法被调用时用于接收外界输入的数据。

2.实参:

调用方法时实际传给方法的数据。

3.返回值:

方法在执行完毕后返回给调用它的环境的数据。

4.返回值类型:

事先约定的返回值的数据类型,无返回值,必须给出返回类型viod。

A.Java语言中使用下述形式调用方法:

对象名.方法名(实参列表)

B.实参的数目、数据类型和次序必须和所调用方法声明的形式列表匹配。

C.return语句中止方法的运行并指定要返回的数据。

Java中进行函数调用中传递参数时,遵循传递的原则:

基本类型传递的是该数据本身,引用类型传递的是对象的引用,不是对象本身

九、类和对象关系(内存中)

 

一十、构造函数2009-12-913:

44

构造函数是定义在java类中的一个用来初始化对象的函数

1.构造函数名字与类的名字相同,大小写也保持一致

2.使用new+构造方法创建一个新的对象

3.构造函数与类同名且没有返回值。

即便是void也不能写

4.注意:

当无指定构造函数时,编译器为类自动添加形为:

类名(){}的构造方法

例如:

Person类的构造函数

publicclassPerson{

intid;

intage=20;

Person(int_id,int_age){

Id=_id

Age=_age;

}

}

Publicstaticvoidmain(String[]agrs){

Persontom=newPerson(1,25);

Personjrry=newPerson(1,27);

}

内存详细过程详解:

一十一、约定俗成的命名规则

类名的首字母大写

变量名和方法名的首字母小写

运用驼峰标示

一十二、内存分析过程

视频:

J2SE_5.0_第03章_面向对象06_内存解析_1.avi07_内存解析_2.avi

源码:

TestBirthdate\Test.java

classBirthDate{

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);

}

}

 

调用过程演示

(1)

调用过程演示

(2)

调用过程演示(3)

调用过程演示(4)

调用过程演示(5)

调用过程演示(6)

调用过程演示(7)

调用过程演示(8)

调用过程演示(9)

调用过程演示(10)

08_内存解析_3.avi

练习:

视频:

09_练习.avi10_答案.avi11_内存解析.avi

源码:

TestPoint\TestPoint.java

classPoint{

doublex,y,z;

Point(double_x,double_y,double_z){

x=_x;

y=_y;

z=_z;

}

voidsetX(double_x){

x=_x;

}

doublegetDistance(Pointp){

return(x-p.x)*(x-p.x)+(y-p.y)*(y-p.y)+(z-p.z)*(z-p.z);

}

}

publicclassTestPoint{

publicstaticvoidmain(String[]args){

Pointp=newPoint(1.0,2.0,3.0);

Pointp1=newPoint(0.0,0.0,0.0);

System.out.println(p.getDistance(p1));

p.setX(5.0);

System.out.println(p.getDistance(newPoint(1.0,1.0,1.0)));

}

}

内存调用过程见视频

2009-12-919:

43:

33

 

一十三、方法重载OverLoad2009-12-1110:

45:

05

方法的重载指一个类中可以定义有相同的名字,但参数个数不同和参数类型不同的多个方法。

调用时会根据不同的参数表选择对应方法

能被编译器区分的方法既是构成重载构造函数(方法)也可以重载见二十三、继承中的构造方法P20

方法重载可以改变返回值的类型。

(不知道为什么2009-12-1221:

24:

11)

例子112_方法重载与内存解析.avi

TestOverLoad.java

publicclassTestOverLoad{

publicstaticvoidmain(String[]args){

Personp=newPerson();

Personp1=newPerson(400);

Personp2=newPerson(2,500);

p.info();

p.info("ok");

}

}

classPerson{

//定义三个灵活的方法

Person(){

id=0;

age=20;

}

Person(int_id){

id=_id;

age=23;

}

Person(int_id,int_age){

id=_id;

age=_age;

}

//成员变量定义

privateintid;

privateintage=20;

//方法定义

publicintgetAge(){returnage;}

publicvoidsetAge(inti){age=i;}

publicintgetId(){returnid;}

voidinfo(){

System.out.println("myidis:

"+id);

}

voidinfo(Stringt){

System.out.println(t+"id"+id);

}

}

例子212_方法重载与内存解析.avi

TestOverload\test.java

publicclassTest{

voidmax(inta,intb){

System.out.println(a>b?

a:

b);

}参数类型不同,可以被

编译器识别

voidmax(shorta,shortb){

System.out.println("short");

System.out.println(a>b?

a:

b);

}

voidmax(floata,floatb){

System.out.println(a>b?

a:

b);参数返回类型不同,构

}成重名不能被编译器

识别

intmax(floata,floatb){

System.out.println(a>b?

a:

b);

}

publicstaticvoidmain(String[]args){

Testt=newTest();

t.max(3,4);

shorta=3;

shortb=4;

t.max(a,b);

}

}

 

一十四、对象创建与使用_复习与练习

源码:

TestCircle.java视频:

14_TestCircle程序分析_1.avi15_TestCircle程序分析_2.avi16_TestCircle程序分析_3.avi

classPoint{

privatedoublex;

privatedoubley;

Point(doublex1,doubley1){

x=x1;

y=y1;

}

publicdoublegetX(){returnx;}

publicdoublegetY(){returny;}

publicvoidsetX(doublei){x=i;}

publicvoidsetY(doublei){y=i;}

}

//

classCircle{

privatePointo;

privatedoubleradius;

Circle(Pointp,doubler){

o=p;

radius=r;

}

Circle(doubler){

o=newPoint(0.0,0.0);

radius=r;

}

booleancontains(Pointp){

doublex=p.getX()-o.getX();

doubley=p.getY()-o.getY();

if(x*x+y*y>radius*radius)returnfalse;

elsereturntrue;

}

publicvoidsetO(doublex,doubley){

o.setX(x);

o.setY(y);

}

publicPointgetO(){returno;}

publicdoublegetRadius(){returnradius;}

publicvoidsetRadius(doubler){radius=r;}

publicdoublearea(){

return3.14*radius*radius;

}

}

publicclassTestCircle{

publicstaticvoidmain(Stringargs[]){

Circlec1=newCircle(newPoint(1.0,2.0),2.0);

Circlec2=newCircle(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("c1area="+c1.area());

System.out.println("c1area="+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()+"),"+c2.getRadius());

System.out.println("c1area="+c1.area());

System.out.println("c1area="+c2.area());

Pointp1=newPoint(5.2,6.3);

System.out.println(c1.contains(p1));

System.out.println(c1.contains(newPoint(10.0,9.0)));

}

}

一十五、this关键字

定义:

在类的方法定义中使用this关键字代表使用该方法的对象引用

使用this(argument_list)调用本类的另外的构造方法

使用this.xxx=xxx获取本类另外一个构造方法传来的值

构造函数和一般成员函数在继承中的区别的练习

使用:

当必须指出当前使用方法的对象是谁时要使用this

有时使用this可以处理方法中成员变量和参数重名情况

this可以看做一变量,它的值是当前对象引用

publicclassLeaf{

inti=0;

leaf(inti){this.i=i;}

leafincreament(){

i++;

returnthis;

}

voidprint(){System.ot.println(“i=”+I);}

publicstaticvoidmain(String[]args){

Leafleaf=newLeaf(100);

Leaf.increament().increament().print();

}

}

一十六、Static关键字

1.在类中,使用是static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对该类的所有对象来说,static成员变量只有一份。

2.用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员。

-----静态方法不再是针对某个对象调用,所以不能访问非静态成员

3.可以通过对象引用或者类名(不需实例化)访问静态成员。

4.我觉得就是在使用内部类时使用,如果不需要内部类队形想与其外围类之间有联系,那么可以将内部类声明为static,这通常叫嵌套类.

嵌套类意味着:

1要创建嵌套类的对象,并不需要其外围类的对象.

2不能从嵌套类的对象中访问非静态类的外围类对象!

5.例子源码:

Cat.java视频:

18_static关键字_1.avi19_static_关键字_2.avi

publicclassCat{

privatestaticintsid=0;

privateStringname;

intid;

Cat(Stringname){

this.name=name;

id=sid++;

}

publicvoidinfo(){

System.out.println

("Mynameis"+name+"No."+id);

}

publicstaticvoidmain(Stringarg[]){

Cat.sid=100;

Catmimi=newCat("mimi");

mimi.sid=2000;

Catpipi=newCat("pipi");

mimi.info();

pipi.info();

}

}

一十七、package和import2009-12-1115:

00:

21

1.java引入包(package)机制提供类的多重类命名空间。

2.package语句作为java源文件第一句,指明该文件定义的类所在包。

packagepkg1[.pkg2[.pkg3….]];约定俗成的命名:

com.域名.xxx

3.java编译器把语句对应于文件系统的目录管理,package语句中使用”.”点值指明包(目录)层次

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2