黑马程序员——>第五天<面向对象(匿名对象-封装-构造代码块-this关键字)>

来源:互联网 发布:荆门第四届网络作文 编辑:程序博客网 时间:2024/05/17 17:56

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

01面向对象(概述)
java的核心部分——面向对象
面向对象概念
 理解面向对象
   面向对象是相对面向过程而言
   面向对象和面向过程都是一种思想
   面向过程   强调的是功能行为 注重过程,注重过程中涉及的功能    
   面向对象   将功能封装进对象,强调具备了功能的对象
总结:面向过程是一种思考问题的思考方式;面向对象的出现将复杂的东西变简单了;从之前的执行者,过度到了现在的指挥者(冰箱,开门);面向过程是面向对象的一个基础,这样运行起来更简单,更方便
   面向对象是基于面向过程的
 面向对象的三个特征:封装,继承,多态


02面向对象(举例)

01.电脑城买电脑,买电脑先查些有关电脑方面的资料(前期做了一个查阅资料的动作),查阅完后要去电脑城,挨个商家去问(咨询动作),最后由于自己不是太懂被骗了!所以为了避免被骗,你要怎么做:找个懂电脑的a,使用a的那个人的专业识别硬件的方法,专业砍价方法,而a对于你来讲a就是对象,你就在面向a那个对象。你买电脑这件事就变简单了;从执行者变指挥者了(在指挥a做事情);这就是面向对象

02.软件公司为什么要招大家去干活呀!是为了提高工作效率;你们就是那个对象,老板是调用者,调用你的功能(编程技术)

面试:理解什么是面向对象。
  你除了代码功底以外,对思想掌握到什么程度
     将面向对象的特点说下,比如说思想:能让复杂事物简单化,能让我们的角色转变 从执行者变成指挥者,指挥别人做事就变简单了
    接下来必须举一个例子来说明这件事情,因为面向对象这个思想往往思想都很抽象,不好理解,举一个实例来说明这个事情是最方便的而且如果举的例子到位的话对方会觉的你很不错,印象也深刻。
    最牛的例子是结合实际场景说;
    说完后面可以跟上几句:我不仅具备专业编程功能,我还具备一些其他功能(表达能力...),以后你可以指挥我变成一个组长

03.找个能洗衣服,能做饭的对象;这个洗衣做饭就简单化了,
04.餐厅吃饭,喊服务员(服务员具备点菜那个功能)点菜
   对象不是单单指人
   在java中有句话:一切皆对象 或者 万物皆对象(面试时不要说这句话,这句话说出来需要一种境界)

落实到程序中:
    我们写程序时,其实不是先要定义功能,先要面向对象(我要操作这个对象,这个对象中需要具备哪些功能,将功能写到对象里面,这就叫封装起来,下次用时先要找对象,对象找到,功能就找到了),在解决问题时,不是先要自己写,先找java当中是不是已经提供好了相对应的对象。如果有:直接拿来用。
如果没有那个对象:自己造一个对象,把功能定义到里面去,因为造完后,你能用,别人也能用。


03面向对象(类与对象的关系)

 人开门:名词提炼法(将前面那句话里的名词提炼出来,封装成对象)
  人
{
    开门(门)
     {
        门.开();
     }
}
  门{
     开()
        {操作门轴等}
     }

以后开发:其实就是找对象使用。没有对象,就创建一个对象
  无非就是找对象,建对象,用对象,并维护对象之间的关系

类与对象的关系

 现实生活中的对象:张三 李四
 想要描述:提取对象中的共性内容。对具体的抽象
 描述时:这些对象的共性有:姓名,年龄,性别,学习java功能
  描述时在java中是用类的形式体现的;而对象在java中是通过new操作符所产生的一个实体,这个实体在堆内存当中,将这些东西映射到内存里,描述就是class定义的类;具体对象就是对应java在堆内存中用new建立的实体(因为这个对象中包含很多数据,凡是数据多了要用实体来存储,对象也是用来存储数据的)。一个是类,一个是实体
凡是用于存储多个数据的,我们称之为实体,都放在堆内存当中,

类就是图纸   汽车就是堆内存中的对象

  操作一个个体和其他个体是没有关系的
  描述事物其实就是在描述事物的属性和行为
  属性对应是类中变量,行为对应的类中的函数(方法)
  其实定义类,就是在描述事物,就是在定义属性和行为。属性和行为共同成为类中的成员(成员变量和     成员方法)。

  生产汽车,在java中通过new操作符来完成
  其实就是在堆内存中产生一个实体
 Car c = new Car();  c就是一个类类型变量;记住:类类型变量指向对象(该类所产生的实体)

  需求:将已有车的颜色改成蓝色,指挥该对象做事情。在java中指挥方式是:对象.对象成员

 堆内存中的变量都有一个特点:默认初始化值:null(字符串默认为null)

基本数据类型   引用数据类型(数组类型,类类型)

类就是:对现实生活中事物的描述
对象:就是这类事物,实实在在存在的个体
  先有类后有对象(相对与计算机语言:先描述才能产生对象)
  往大了说是先有对象,看到对象后才想着去描述它,想要操作对象中的内容,就指挥对象做事就可以了
  要明确指挥哪个对象,操作对象中的哪些东西
 

对象的特点用与封装数据,数据包含属性和行为


04面向对象(成员变量和局部变量)

作用范围:
 成员变量作用于整个类中
 局部变量作用于函数中,或者语句中
在内存中的位置:
 成员变量:在堆内存中,因为对象的存在,才在内存中存在
 局部变量:存在栈内存中

 成员变量都有默认值,定义完不赋值它是能够参与运算的(因为它有默认初始化值,在堆内存中)
 局部变量不初始化是不可能参与运算的(因为它在栈内存当中,必须要有初始化值以后才能参与运算)


05面向对象(匿名对象的应用)
 匿名对象是对象的简化形式
 匿名对象两种使用情况
  1.当对对象方法仅进行一次调用时
    如果对一个对象进行多个成员调用,必须给这个对象起一个名字
 2. 匿名对象可以作为实际参数进行传递
匿名对象应用
Car c = new Car();
c.num = 5; ======   new Car().num = 5;

需求:汽车修配厂。对汽车进行改装,将来的车改成黑车,三个轮胎

public static void show(Car c){    c.num = 3;    c.color = "black";    c.run();}   Car q = new Car();   show(q);       //=================show(new Car());



06面向对象(封装概述)Encapsulation

封装:

是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:
 将变化隔离
 便于使用
 提高重用性
 提高安全性
封装原则
 将不需要对外提供的内容都隐藏起来
 把属性都隐藏,提供公共方法对其访问

函数就是java中最小的封装体


07面向对象(封装private)
private:
私有,权限修饰符:用于修饰类中的成员(成员变量,成员函数)。私有只在本类中有效。

常用之一:将成员变量私有化,对外提供对应的set,get方法对其进行访问,提高对数据访问的安全性
   凡是set开头的方法名返回值都是void,而且要带参数
   get只获取,返回值类型跟它获取的变量一致,不需要参数,

将age私有化以后,类以外即使建立了对象也不能直接访问;
但是人应该有年龄,就需要在Person类中提供对应访问age的方式

但凡看到一个类里面有两个功能setxxx  getxxx,代表着这个类里面肯定有一个私有的属性叫做xxx。

封装在程序中的体现

class Person{  private int age;  // age已经被封装进了Person类当中  public void setAge(int a)  //对外提供一个访问方式  {    if(a>0 && a<130) //提高代码健壮性     {     age = a;          //a只是将数值符给堆内存中的age     speak();     }    else     System.out.println("feifa age");  }   public int getAge(){  return age;                                //至始至终变化的age都是对象中的age,而不是成员变量中的age(private int age )}      void speak()  {    System.out.println("age="+age);  }} class PersonDemo{  public static void main(String[] args)  {   Person p = new Person();  // p指向堆内存中的实体对象   p.setAge(20);   p.speak();  }}



09面向对象(构造代码块)
开发见不着,面试有很多笔试题

作用:给对象进行初始化
对象一建立就运行,而且优先于构造函数执行
和构造函数的区别:
构造代码块是给所有对象进行统一初始化
而构造函数是给对应的对象初始化
定义对象共性初始化内容(不同对象的共性初始化方式定义在构造代码块中)
{
   System.out.println("Person code run");
}

注意:私有仅仅是封装的一种表现形式;封装不是私有
 不私有也能实现封装,只要权限在你访问不到的范围内,对你而言就是封装
 私有是最小权限

之所以对外提供访问方式,是因为可以在访问方式中加入逻辑判断等语句。
对访问的数据进行操作,提高代码健壮性


10面向对象(this关键字)
构造函数
特点:
 函数名与类名相同
 不用定义返回值类型
 不可以写return语句
作用:
 给对象进行初始化
注意:
 默认构造函数的特点
 多个构造函数是以重载的形式存在的


构造函数是可以被私有化的(因为私有化是用来修饰成员的,构造函数也是成员,)
 如果你把一个类里面所有的构造函数私有化,就代表着这个类中是不可能创建对象的,因为对象都不能 进行初始化动作


局部中有就在局部中找name使用,如果局部中没有就去成员变量中找

private String name;
private int age;
Person(String name)
{
   this.name = name;
}

重名后怎么办:
this关键字:看上去,是用于区分局部变量和成员变量同名情况
this为什么可以能解决这个问题?
this到底代表的是什么呢?

this:就代表本类的对象,(一个Person类可以创建n多个person对象)到底代表哪一个呢?
  this代表它所在函数所属对象的引用(this在哪个函数里面,哪个函数所属对象,this就代表哪个对象)
  简单说:哪个对象在调用this所在的函数,this就代表哪个对象
在描述时给对象预先留位置
类里面成员被使用全是由对象完成的!而本类中的对象是this


11面向对象(this关键字的应用)
需求:给人定义一个用于比较年龄是否相同的功能,也就是是否是同龄人。
 想这个功能怎么定义:1.结果是什么 2.有没有未知内容

  this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象;但凡本类功能内部使用了本类对象,都用this表示。

public boolean compare(Person p){   if(this.age==p.age)    //应该写成: return this.age==p.age;}                             // 先看懂this代表什么,再说在代码中的应用//当看到this时你要想到:这是一个对象的引用,代表一个对象,哪个对象调用这个方法,this就代表哪个对象class PersonDemo3{   public static void main(String[] args)  {       Person p1 = new Person(20);       Person p2 = new Person(25);       boolean b = p1.compare(p2);       System.out.println(b);  }}



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