------- android培训、java培训、期待与您交流! ----------

Day05开始接触到了Java核心部分——“面向对象”。

面向对象是一种思考思想,是相对于早期的“面向过程”而言的。

比如:把大象放进冰箱需要哪些步骤?

①打开冰箱;②把大象放进去;③关闭冰箱。

在这个描述中,我们强调的是“过程”,注重的是过程中所涉及到的行为、功能(打开==>存储==>关闭)。所以这是一个面向过程的方法。

但是,我们发现,无论是“打开”、“存储”、“关闭”,我们操作的都是“冰箱”,这些都是“冰箱”这类事物所具备的行为。换句话说,有了冰箱,就有了这一系列的功能。即这些功能被封装在了冰箱这个事物当中。因此,我们只要得到了冰箱这类事物,就自然能够得到“打开”、“存储”、“关闭”这些功能。这样就是面向对象的思想。

由此可见面向过程强调的是功能,而面向对象强调的具有(封装了)一系列功能的一类事物。

面向对象思想是符合人们思考习惯的一种思想,它将复杂的问题简单化,将程序员从执行者变为指挥者。

开发的过程就是找对象、创建对象、适用对象,并维护对象之间的关系。如果没有对象,那么就自己创造一个对象来使用。

类与对象的关系:类是对现实生活中事物的描述,而对象就是这类事物实实在在存在的个体。

描述对象就是提取对象中共性内容的过程,在Java中是以“类”的形式体现的;对象是通过new操作符产生的一个实体,这个实体在堆内存中。

以通过图纸生产汽车为例,理解类与对象的关系,如下图:

这里图纸就相当于Java中的类,通过图纸生产出来的汽车,就是Java中的对象。

描述事物的过程能够就是定义类的过程。而描述事物就是在描述事物的属性和行为。属性对应的是类中的变量;行为对应的是类中的方法(函数)。属性和行为又共同称为类中的成员,即:成员变量和成员方法(函数)。

class Car//定义一个Car类(描述汽车),相当于图纸
{String color = "red";//定义汽车颜色并初始化int num = 4;//定义汽车轮胎数并初始化void run()//定义汽车功能,展示颜色和轮胎数{System.out.println("color="+color+"...num="+num);}
}
class  CarDemo
{public static void main(String[] args) {Car c = new Car();//生产汽车。使用new操作符,将汽车从抽象的图纸(类)变为具体的实体(对象)c.color = "green";//更改汽车颜色。更改的是实物(对象)而不是图纸(类)c.run();//调用run();方法}
}

成员变量与局部变量的区别:

①作用范围:

成员变量===>整个类中有效;

局部变量===>函数中或者语句中;

②内存中存储位置:

成员变量===>堆内存中,随着对象的建立而存在,随着对象的消失而消失;

局部变量===>栈内存中,方法被调用或语句执行用时存在,当方法调用完,或语句执行结束后,自动释放;

③初始化值:

成员变量有默认初始值;

局部变量没有默认初始值,使用前必须赋值;

匿名对象就是“没有名字的对象”,是对象的一种简写形式。

匿名对象使用方式:

①当匿名对象的方法仅调用一次时,可使用匿名对象来完成,这样写比较简化。但是,当需要对对象进行多次/多个成员调用时,必须使用new操作符创建对象后使用;

②匿名对象可以调用属性,但是这样毫无意义;

③可以将匿名对象作为实际参数进行传递。

面向对象三个特征:封装,继承,多态

封装(Encapsulation)

封装的概念:隐藏对象的属性和细节,仅对外提供公共访问方式。

封装带来的好处:将变化隔离,方便使用,提高重用性,提高安全性。

举个生活中的例子:

我们去汽车修理厂修汽车,我们需要做的仅仅是把汽车交给修理人员;过几天后过去取回修理好的汽车并付钱即可。而具体汽车如何修理的,整个修理的过程是什么样子,修理用到了什么材料、什么零件...这些我们都没有必要知道。

这就是汽车修理厂把修理汽车的过程给封装隐藏了起来,仅仅提供了一个收费口,人们把车开来付钱即可。

封装原则:

①把不需要对外提供的部分隐藏起来;

②把属性都隐藏,提供公共方法对其访问。

(函数就是Java中最小的封装体)

private关键字

private私有:权限修饰符,用于修饰类中的成员(成员变量或成员函数)

私有仅在本类中有效;将类中的成员私有后,类以外即便建立了对象,也不能直接访问。

私有仅仅是封装的一种表现形式,封装!=私有。

private修饰成员变量,将其私有化,对外提供set*** 和 get*** 方法对其访问。

并且,通过使用语句,可以限制set***的条件,从而实现对访问的数据进行控制(使其符合实际情况)提高代码的安全性、健壮性。

class Person//定义Person类
{private int age;//定义int型成员变量age,并将其封装在类中,让外界不能直接访问。public void setAge(int age)//对外提供访问方法,并根据实际情况对age的取值进行限制{if (age>=0 && age<=130){this.age = age;show();}elseSystem.out.println("输入了非法age");}public int getAge()//对外提供访问方法{return this.age;}void show(){System.out.println("age="+age);}
}class PersonDemo
{public static void main(String[] args) {Person p = new Person();//创建Person对象p.setAge(200);//使用Person类提供的方法,对age进行操作}
}

运行结果:

构造函数

构造函数也是函数,是有特殊功能的函数。所以,具备函数的一般性质。

构造函数特点:

1.函数名与所在类类名一致;

2.没有返回值类型;(是没有,并不是返回值为void)

3.由于第2点的存在,所以也不可以写return语句。

构造函数的作用:

给对象进行初始化。对象一建立,就会调用与之对应的构造函数。当一个类中没有定义构造函数时,系统会默认给该类加入一个空参数的构造函数。

类名(){}

当函数中自定义了构造函数后,默认的构造函数就没有了。

构造函数具备重载的特性,方便给不同的对象进行初始化。

在运行方面,构造函数与一般函数不同:

构造函数是在对象一建立就运行,给对象初始化。一般方法是对象调用时才开始执行,目的是给对象添加功能。

对象一建立,构造函数只运行一次;一般方法(函数)可被对象多次调用。

根据构造函数的作用,可知,一般将事物的特有属性,特有行为定义在构造函数中。

构造代码块

作用:给对象进行初始化。对象一建立就运行,并且,优先于构造函数执行。构造代码块中定义的是不同对象共性的初始化内容。

构造代码块与构造函数的区别:

构造代码块是给所有对象统一初始化;而构造函数是给对应的对象初始化。

如下面代码,定义游戏角色,角色具备初始等级(lv)和初始装备(equip),并且每个角色生成时,都会说同样的话。

class Player
{private String equip;private int lv;{System.out.println("银鳞胸甲5G一件。");//角色共性初始化内容,定义在构造代码块中。}Player()//①{System.out.println("equip="+equip+"---lv="+lv);}Player(String e)//②{equip = e;System.out.println("equip="+equip+"---lv="+lv);}Player(int l)//③{lv = l;System.out.println("equip="+equip+"---lv="+lv);}Player(String e,int l)//④{equip = e;lv = l;System.out.println("equip="+equip+"---lv="+lv);}//①至④定义了具备不同初始化内容的四种Player。
}
class PlayerDemo
{public static void main(String[] args) {Player p1 = new Player();Player p2 = new Player("霜之哀伤");Player p3 = new Player(70);Player p4 = new Player("银鳞胸甲",80);}
}

代码运行结果:

【this关键字】

this代表其所在函数所属对象的引用。谁调用this所在函数,this就代表哪个对象。

在类内部,成员间的调用都是由对象来完成的。只不过平时定义的时候,省略了"this."。通过this可以区别成员变量和局部变量。

当定义类中的功能时,该函数内如果需要使用到调用该函数的对象时,用this来表示该对象。

如果本类功能内部使用到本类对象时,都用this表示。

this可用于在构造函数间进行互相调用("内部语言":this语句)。this语句只能定义在构造函数的第一行。因为初始化动作要先执行。

黑马程序员_Java基础Day05_面向对象之封装(Done)相关推荐

  1. 黑马程序员_java基础笔记(03)...面向对象

    1:面向对象的概念,2 : 类和对象的关系,3 : 封装,4 : 构造函数,5 : this关键字,6 : static关键字, 7 : 单例设计模式,8 : 继承,9 : 抽象类,10 : 接口,1 ...

  2. 黑马程序员_Java基础面向对象

    ------- <a href="http://www.itheima.com" target="blank">android培训</a> ...

  3. 黑马程序员_java基础笔记(15)...银行业务调度系统_编码思路及代码

    ---------- ASP.Net+Android+IOS开发..Net培训.期待与您交流!---------- 1,面试题目:银行业务调度系统 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内 ...

  4. 黑马程序员_java基础笔记(06)...集合

    ---------- ASP.Net+Android+IOS开发..Net培训.期待与您交流! ---------- JavaApi(其实就是java给我们提供的已经定义好的对象.工具对象:集合框架) ...

  5. 黑马程序员_Java基础_前期准备02-1

    ---------------------------------------- JavaEE+云物联.期待与您交流!----------------------------------------- ...

  6. 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式

    GUI(Graphical User Interface)(图形用户接口):用图形的方式,来 显示计算机操作的界面,这样更方便更直观 CLI(Conmand line User Interface)( ...

  7. 黑马程序员_Java基础_this,super,static,final关键字

    一,this关键字 1,当成员变量和局部变量重名时,可以使用this关键字来区分. this关键字代表的是本类对象,this一般是在一个函数中,哪个对象在调用this所在的函数,this就代表哪个对象 ...

  8. 黑马程序员_Java基础[16]_多态1

    ---------- android培训 . java培训 .期待与您交流! ---------- [[多态]] instanceof  定义:某一种事物的多种存在形态 [[instanceof  关 ...

  9. 黑马程序员_Java基础GUI

    ------- <a href="http://www.itheima.com" target="blank">android培训</a> ...

最新文章

  1. 微信小程序学习Course 8 本地缓存API
  2. 苹果新的编程语言 Swift 语言进阶(三)--基本运算和扩展运算
  3. Delphi 2009 新增单元 Character[2]: IsLetter、IsUpper、IsLower、IsDigit、IsNumber
  4. PIE SDK影像坏线修复
  5. POJ 3280 Cheapest Palindrome(DP 回文变形)
  6. PCB task_struct 数据结构 (转:http://blog.csdn.net/jurrah/article/details/3965437)
  7. P5135-painting【组合数学】
  8. LeetCode 478. 在圆内随机生成点(概率)
  9. rebuild myself rebuild my world
  10. 区块链必读的书_最好的区块链:5条必读
  11. Unity Android 动态更新 Assembly-CSharp.dll
  12. Hibdernate入门
  13. 【web素材】04—40款个人主页简历网页模板及企业单页
  14. 宝塔面板无法安装php,宝塔面板安装php失败
  15. mysql清理碎片_清除MySQL表空间碎片详细方法
  16. 无法访问Windows7默认共享的解决方法
  17. netbeans java中文_NetBeans添加中文javadoc
  18. idea 内存溢出问题
  19. Shiro介绍(四):定义自己的安全域Realm
  20. 38. 字符串的排列

热门文章

  1. 亚马逊 work hard, have fun, make history
  2. Android Studio-个推-实现简单聊天(三)
  3. 超好用的Android高亮引导库
  4. java抓取并保存图片_利用JAVA抓取网站的所有图片并保存于本地
  5. 帮我写个定时抢票软件
  6. Matlab Robotics project 1 phase 1 <Experiment Recording>
  7. 《数字经济全景白皮书》中国银行业场景金融生态建设分析2022 发布
  8. el-tree自定义节点内容使用svg和文本
  9. 16.网络爬虫—字体反爬(实战演示)
  10. 数据可视化实战:数据处理