Java基础应用编程—— 面向对象基础

本章内容



面向对象编程思想

•面向过程编程

–传统的C语言属于面向过程编程。面向过程解决问题的思路:通常是分析出解决问题所需要的步骤,然后用方法把这些步骤一步一步实现,最后一个一个依次调用方法来解决。

案例:ATM提款机终端系统(面向过程编程)

–步骤1:输入密码,系统判断是否正确,如正确,进入取款界面,如错误,提示重新输入。

–步骤2:进入取款界面,输入取款金额,系统判断余额是否足够,如不足,提示;如足够,点钞。

–步骤3:吐出钞票,打印票据。

面向过程编程考虑的问题是程序运行的流程,主要是程序的算法,而数据只是在必要的时候插入到算法中间。

面向对象编程(OOP:Object-Oriented Programming )

从现实世界中客观存在的事物出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。面向对象解决问题的思路:通常是把构成问题域的事务分解成各个对象,给对象赋予相应的属性和行为,通过多个对象的相互协调来解决问题。建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为 。支持面向对象编程是Java 语言的重要特点。

案例:ATM提款机终端系统(面向对象编程)




面向过程



面向对象



面向对象编程思想


面向对象基本概念

–抽象(abstract):

        •从事物中舍弃个别的非本质特征,抽取共同的本质特征

       • 只考虑与问题域相关的信息,而忽略与问题域不相关的部分

   –对象(object):是系统中用来描述客观事物的一个实体。

•可以是有形的,也可以是无形的(如一个客户,一张银行卡,窗体中的一个按钮等等)

• 对象是构成世界的一个独立单位

•具有自己的静态结构(属性)和动态行为(方法)

• 每个对象有自己的唯一标识

类(class):

类是一组具有相同属性和行为的对象的抽象,

类的作用是用来创建对象,对象是类的一个实例

类和对象的关系

抽象和具体的关系。

每一个类在某一时刻都有零个或更多的实例, 类是生成对象的模板

一个类定义了使用哪些数据来描述属性,每一个对象都有相应的属性值数据,

一个类通过一系列方法来定义行为,这些方法能在每个对象中被激活

面向对象主要特征

封装(encapsulation):

所谓封装是把对象的属性和行为结合在一个独立的系统单位内部

尽可能隐蔽对象的内部细节,只向外部提供接口

降低对象间的耦合度

封装的重要意义:

    使对象能够集中而完整地描述并对应一个具体事物

    体现了事物的相对独立性,使对象外部不能随意存取对象的内部数据

继承(inheritance):

也称泛化,继承性是子类自动共享父类属性和方法的机制,在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入自己若干新的内容继承简化了人们对事物的认识和描述,有益于软件复用,是OO技术提高软件开发效率的重要原因之一是类之间的一种关系,一般类与特殊类之间的关系继承关系的语义:“is a kindof”

多态(polymorphism):

指同一个命名可具有不同的语义

OO方法中,常指在一般类中定义的属性或方法被特殊类继承之后,可以具有

不同的数据类型或表现出不同的行为,对于子类,可用不同的方法替代实现父

类的服务的方法

类的定义

什么是类

把相似的对象划归成一个类。

在软件设计中,类,就是一个模板,它定义了通用于一个特定种类的所有对象

的属性(变量)和行为(方法)。



什么是类? 示例 XiyoujiRole.java

西游记游戏软件中的游戏人物

孙悟空:孙悟空的武器是金箍棒,战斗力五颗星,耐力五颗星

唐  僧:唐僧没有武器,战斗力为零,耐力五颗星

猪八戒:猪八戒的武器是耙子,战斗力四颗星,耐力两颗星

沙  僧:沙僧的武器是月牙铲 ,战斗力三颗星,耐力四颗星


类的格式



类的格式

示例

Employee.java



类的成员

成员变量:

[修饰符] 类型 属性名=[默认值];

其中修饰符有:public、private、protected,也可以省略不写。

例如:


方法:

[修饰符] 返回值类型 方法名(形参列表){ 语句}

对象的创建和使用

什么是对象

类(class) — 是对某一类事物的描述对象(object) — 是实际存在的某类事物的个体, 也称为实例(instance)类是创建对象的模板,对象是类的实例。



创建对象

语法格式

类名 对象名 =new构造器

示例

Employee zhang =newEmployee( )

示例 TestEmployee.java

构造器(构造方法/构造器,Constructor)


构造器的作用

完成对象的创建,即完成对象的实例化一般使用构造器来完成对成员变量的初始化 示例Employee.java


通过实例Person ,可以看到使用带参数的构造器进行实例化简化了代码,在创建对象的同时给对象的属性赋值。此时,类由一个抽象的蓝图变化为一个具体的对象,同时对象的属性已经赋值。通过多次调用构造器,一个类可以实例化出多个对象。

构造器也是方法,但是它是特殊的方法而已。它也可以像普通方法一样发生重载。通常一个类中不止一个构造方法,而是有多个不同参数的构造器,用户可以根据需要选择不同的构造器创建对象。

注意在开发中,我们在编写自己的类时,应该根据需要提供相应的构造器,保证在使用这个类时,能够选择到合适的构造方法。

所有的对象都是通过构造器来创建的,也可以说任何对象都是通过内存分配操作符new 创建和开辟内存空间的。如果在开发时,没有明确的写出构造方法,在编译时编译器会发现该类没有构造器,这时编译器会自动的给这个类增加一个构造器,该构造器没有任何参数,我们称之为“默认的空构造器”。相反,如果我们在编写时,手写了一个或是若干个带参的构造器,那么,这个不带参的空构造器就不会再自动产生并存在。在这样的情况下,如果在某些情况下还想使用这样的无参数默认构造器的话,最好还是养成手写出这个无参数的构造器来,以备后用。否则在这个类中,将不再存在这个默认的构造器。



默认的构造器

在Java中,每个类都至少要有一个构造器,如果程序员没有在类里定义构造器,系统会自动为这个类产生一个默认的访问权限为public且参数列表为空的构造器


一旦编程者为该类定义了构造器,系统就不再提供默认的构造器

☻ 练习


对象创建的内存模型

在java中所有的变量、数组、对象都是分配在内存中的,根据变量类型的不同分配的内存也有所不同。Java中主要有3种类型的变量:

局部变量:定义在方法体中的变量;或是方法的形参。

实例变量:即类的属性,也是全局变量。

静态变量:在类中声明为static的属性。


内存的类别



堆和栈分别存储哪些变量?

除了8种基本数据类型的变量,其他变量都是引用类型变量

类(class)



接口(interface)

Animal a ;

数组

int[ ] c ;

对象创建的内存模型

Person p =newPerson( “lisi”,44, “male”);

示例 Person.java PersonTest.java


内存结构参考java虚拟机视频

Person p =newPerson( “zhang”,33,”male”);

Person q =newPerson( “lisi”,44, “male”);


如上所示,对象的属性name 、age、sex都分配在堆内存中,但是对象名 p、q都分配在栈内存中。p 、q也称为对象的引用(reference),引用在java中是地址的同义词。

访问对象:在其他类中或main方法中,若想访问对象的属性或是方法必须先实例化这个类,然后通过对象名(引用)和点操作符来完成:

匿名对象

创建完对象,在调用该对象的方法时,也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫匿名对象


示例 Person.java PersonTest.java

使用匿名对象的情况

如果对一个对象只需要进行一次方法调用

垃圾回收机制

Java的垃圾回收机制是自动的,它保证程序健壮的主要手段,避免了由于程序员忘记回收内存而引起的内存泄漏,同时也避免了回收内存带来的代码繁琐。

垃圾回收机制实际上是JVM内部运行的一个优先级比较低的后台线程,这种多线程的模式使得java 具有更好的性能,完全不用程序员参与。

垃圾回收机制仅仅作用于堆内存,于栈内存无关。

对于程序员来说,对象何时变成垃圾呢?




G1垃圾回收器

JDK7中引入了一个新的垃圾回收器,G1,它是Garbage First的缩写。G1回收器优先回收垃圾最多的区域。为了实现这个策略它把堆分成了多个区域,就好比Java 7之前分成三个区域那样(新生代,老生代和持久代)。G1回收器是一个可预测的回收器,同时对那些内存密集型的程序它还能保证较高的吞吐量。

变量的作用域

类变量

用static修饰的成员变量,它们在类被载入时创建,只要类存在,static变量就存在

实例变量

类体中声明的成员变量,即非static的属性

局部变量

方法体中声明的变量,方法中的参数,或代码块中声明的变量,都是局部变量

局部变量只在方法调用的过程中有效,方法调用结束后失效

变量的作用域


变量初始化的顺序

隐式赋予变量默认值

成员变量

显式赋予初始值

通过构造器体赋予新值

示例 PersianCat.java



this关键字

this关键字


代表对象自身的引用

一个引用

指向调用该方法的当前对象

通常在类的方法定义中使用

用this关键字的情况

方法中的变量与成员变量重名

在一个构造器中,调用其它重载的构造器

返回当前对象的引用

示例  Employee.java      Dog.java

本章重点总结

面向对象的思想

类的定义

什么是类

类的属性

对象的创建和使用

创建对象

构造器

this关键字

课后作业


定义一个点类Point,包含2个成员变量x、y分别表示x和y坐标,2个构造器Point()和Point(int x0,y0),以及一个movePoint(int dx,int dy)方法实现点的位置移动,创建两个Point对象p1、p2,分别调用movePoint方法后,打印p1和p2的坐标。[必作题]

定义一个矩形类Rectangle:(知识点:对象的创建和使用)[必做题]

1.定义三个方法:getArea()求面积、getPer()求周长,showAll()分别在控制台输出长、宽、面积、周长。

2 有2个属性:长length、宽width

3  通过构造方法Rectangle(int width, int length),分别给两个属性赋值

4  创建一个Rectangle对象,并输出相关信息

定义一个笔记本类,该类有颜色(char)和cpu型号(int)两个属性。 [必做题]

1 无参和有参的两个构造方法;有参构造方法可以在创建对象的同时为每个属性赋值;

2  输出笔记本信息的方法

3  然后编写一个测试类,测试笔记本类的各个方法。

设计一个类Student,该类包括姓名、学号和成绩。设计一个方法,按照成绩从高到低的顺序输出姓名、学号和成绩信息。[选做题]

定义两个类,描述如下: [必做题]

1定义一个人类Person:

1.1定义一个方法sayHello(),可以向对方发出问候语“hello,my name is XXX”

1.2有三个属性:名字、身高、体重

2定义一个PersonCreate类:

2.1创建两个对象,分别是zhangsan,33岁,1.73;lishi,44,1.74

2.2分别调用对象的sayHello()方法。

定义两个类,描述如下: [必做题]

1定义一个人类Person:

1.1定义一个方法sayHello(),可以向对方发出问候语“hello,my name is XXX”

1.2有三个属性:名字、身高、体重

1.3通过构造方法,分别给三个属性赋值

2定义一个Constructor类:

2.1创建两个对象,分别是zhangsan,33岁,1.73;lishi,44,1.74

2.2分别调用对象的sayHello()方法。

定义一个汽车类Vehicle,要求如下:[选做题]

1属性包括:汽车品牌brand(String类型)、颜色color(String类型)和速度speed(double类型),并且所有属性为私有。

2至少提供一个有参的构造方法(要求品牌和颜色可以初始化为任意值,但速度的初始值必须为0)。

3为私有属性提供访问器方法。注意:汽车品牌一旦初始化之后不能修改。

4定义一个一般方法run(),用打印语句描述汽车奔跑的功能

5定义测试类VehicleTest,在其main方法中创建一个品牌为“benz”、颜色为“black”的汽车。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容