JAVA 面向对象 上

面向过程(POP) 与 面向对象(OOP)
① 二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的
是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对
象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。

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


面向对象的三大特征

  封装(Encapsulation)

  继承(Inheritance)

  多态(Polymorphism)

面向对象的思想概述

程序员从面向过程的执行者转化成了面向对象的指挥者

面向对象分析方法分析问题的思路和步骤:

  根据问题需要,选择问题所针对的现实世界中的实体

  从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类

  把抽象的实体用计算机语言进行描述,形成计算机世界类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构。

  将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具。

     类(class)对象(object)是面向对象的核心概念。

      类是对一类事物的描述,是抽象的、概念上的定义

     对象是实际存在的每个个体,因而也称为实例(instance)。

  "万事万物皆对象"

      可以简单理解为:类 = 抽象概念的人;对象 = 实实在在的某个人
  面向对象程序设计的重点是类的设计
  类的设计,其实就是类的成员的设计

 

Java及类的成员

  属性:对应类中的成员变量

  行为:对应类中的成员方法

代码演示: 

class Person{
  //属性,或成员变量
  private int id;
  private String name;
  private int age;
  
  public void eat(){//方法,或函数
    System.out.println("我爱吃西红柿");
  }
}

 

 

对象的创建和使用:内存解析

 

 

 堆(heap),存放对象实列,几乎所有的对象实列都在这里分配内存。java虚拟机规范中的描述的是:所有的对象实列和数组都要在堆上分配。

通常所说的栈(Stack),是指虚拟机栈。虚拟机用于存储局部变量等。

方法区(Method Area),用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

 

对象的创建和使用:匿名对象

我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象

如:new Person.eat();

使用情况

  如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。

  我们经常将匿名对象作为实参给一个方法调用。

 

变量的分类:成员变量和局部变量

  在方法体外,类体内声明的变量称为成员变量。

  在方法体内部声明的变量称为局部变量。

 

 

   注意:二者在初始化值方面的异同:

    同:都有生命周期

    异:局部变量除形参外,均需初始化。

 

 成员变量(属性)和局部变量的区别?

 

 

类的成员之一:属性 


 

对象属性的默认初始化赋值

  当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。

  处理基本数据类型之外的变量的类型都是引用类型

  

 

 

 类的成员之二:方法(method、函数)

什么是方法:

   ① 方法是类或对象行为的特性的抽象,用来完成某个功能操作。在某些语言中也称为函数或过程。

  ② 将功能封装为方法的目的是,可以实现代码重用,简化代码

  ③ java里的方法不能独立存在,所有方法必须定义在类里。

 方法的重载:

   重载的概念:在同一个类中,允许以一个同名方法,只要它们的参数个数或者参数类型不同即可。

  重载的特点:与返回值类型无关,只看参数列表,且参数列表必须不同。(参数的个数或参数类型)调用时,根据方法参数列表的不同来区别。

 

 可变个数的的形参

  列如:public static void test(int a , String...books);

  说明:

 

  1. 声明格式:方法名(参数的类型名...参数名)
  2. 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
  3. 可变个数形参的方法与同名的方法之间,彼此构成重载
  4. 可变参数方法的使用与方法参数部分使用数组是一致的
  5. 方法的参数部分有可变形参,需要放在形参声明的最后
  6. 在一个方法的形参位置,最多只能声明一个可变个数形参

 

 方法的参数传递机制

  形参:方法声明是的参数

  实参:方法调用时实际传给形参的参数值

   java里的方法的参数传递方式只有一种:值传递。

    形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参

  形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参

面向对象特征之一:封装和隐藏

  为什么要封装?封装的作用和含义?

  我们对程序设计追求:“高内聚,低耦合”.

  高内聚 :类的内部数据操作细节自己完成,不允许外部干涉;

  低耦合 :仅对外暴露少量的方法用于使用。

     隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展 性、可维护性。通俗的说,把改隐藏的的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。

  封装的好处?

  可以方便的控制逻辑,限制对属性的不合理操作

  便于修改,增强代码的可维护性

 

                 四种访问权限修饰符

java权限修饰符public、protected、default(默认)、private置于类的成员之前,用来限定对象对改类成员的访问权限。

       

       对于class的权限修饰只可以用public和default

 

           类的成员之三:构造器(构造方法)

构造的特征

① 它具有与类相同的名称

② 它不声明返回值类型。(与声明为void不同)

③ 不能被static、final、synchronized、abstract、native修饰,不能用return语句返回值

构造器的作用:创建对象;给对象进行初始化

 

根据参数不同,构造器可以分为如下两类:

  隐式无参构造(系统默认提供)

  显示定义一个或多个构造器(无参、有参)

注意:       

  java语言中,每个类中至少有一个构造器

  默认构造器的修饰符与所属类的修饰符一致

  一旦定义了构造器,系统不下提供默认的构造器

  一个类可以创建多个重载的构造器

  父类的构造器不可被子类继承

 

关键字:this的使用

this是什么?

在java中,this关键字比较难理解,它的作用和其近义词很接近。

  它在方法内部使用,即这个方法所属对象的引用;

  它在构造器内部使用,表示该构造器正在初始化的对象。

this可以调用类的属性、方法和构造器

什么时候使用this关键字呢?

  我们可以用this来区分属性和局部变量

 

 

 

posted @ 2021-01-16 14:03  不会掉头发的程序猿  阅读(112)  评论(3)    收藏  举报