java 之 面向对象

今日内容:

  • 面向对象

  • 类与对象

  • 三大特征---封装

  • 构造方法

    学习目标

    • 能够理解面向对象的编程思想

    • 能够明确类与对象的关系

    • 能够掌握类的定义格式

    • 能够掌握创建对象的格式,并访问类中的成员

    • 能够根据类与对象的关系定义相关的事物

    • 能够理解对象的内存图解

    • 能够说出成员变量与局部变量的异同点

    • 能够理解private关键字的含义

    • 能够说出this关键字可以解决的问题

    • 能够理解构造方法的含义

    • 能够用封装的思想定义一个标准类

面向对象思想

面向对象思想概述:

  1. Java 语言是一门面向对象的程序设计语言,面向对象思想是一种程序的设计思想,我们在面向对象思想的指引下,使用Java 语言去设计程序、开发计算机程序。这里的【对象】泛指现实中的一切事物,每种事物都有自己的【属性】和【行为】。面向对象思想就是在程序设计过程中,参照现实中的事物,将事物的属性特征、行为特征抽离出来,描述成计算机事件的一种设计思想。它是区别于面向过程,强调是事物的行为去一步步执行的功能

    【物以类聚,人以群分】

    举例:

    吃饭:

    面向过程:到菜市场买菜----》返回家洗菜--------》切菜-----》炒菜-----》吃菜-----》洗碗刷锅

    面向对象:网上点菜app-------》吃菜

    区别:

    面向过程:强调步骤

    面向对象:强调对象,这里的对象是【app】

    特点:

    面向对象思想更符合人类的思考习惯,站在领导者的角色上。它可以将复杂的事情简单化

    并将我们从事情的执行者转变成指挥者。

    面向对象的语言中,包含了三大基本特征:封装,继承,多态。

     

    类与对象

    ####    什么是类
    • 类:是一组相关【属性】和【行为】的集合. 可以把类看成一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。

    • 现实中,描述一类事物:

      属性: 描述该类事物的一种【状态】信息

      行为: 描述该类事物具备的功能,能够做什么。

    什么是对象

    • 对象: 就是这一类事物的具体体现。对象是类的一个【实例】,必然具备该类事物的属性特征和行为特征。

    类与对象的关系

    • 类是对一类事物的描述,是【抽象的】。

    • 对象是一类事物的【实例】,是【具体的】。

    • 类是对象的模板,而对象是类的实体。

    类的定义

    ####    事物与类的对比

    现实中的一类事物:

    属性: 事物的状态信息

    行为: 事物能够做什么,具备的功能

    java中的类描述事物也是如此:

    成员变量: 对应事物的属性

    成员方法: 对应事物的行为

    类的定义格式

     

    public class ClassName{
       // 成员变量
       // 成员方法
    }
    • 定义类: 定义类的成员,包括但不限制于 成员变量和成员方法

    • 成员变量:和之前定义变量的格式一摸一样,只不过位置不同,变量位于 类中 方法外

    • 成员方法: 定义的时候需要去掉static关键字

    对象的使用

    ####    对象的创建格式:

     

    类名 对象名 = new 类名();

    适用对象访问类中的成员信息:

     

    对象名.成员变量名;
    对象名.成员方法();

    类的练习

    定义一个类,用来模拟手机事物,属性:品牌,价格,颜色; 行为: 打电话,开关机,群发短信

    测试访问手机的属性和行为

    类的内存分析

    备注: 在栈内存当中运行的方法 遵循“新进后出,后进先出”原则,此时对象名称指向堆内存当中的 空间 ,寻找方法信息,执行该方法。

    #### 两个对象调用同一个方法内存

    关键字 new 开辟 堆(heap)内存空间

    成员变量和局部变量的区别

    1. 变量根据定义的【位置】不同,我们给变量起了不同的名字

      public class People{
         
         String name"校花"; // 成员变量
         
         public void eat(){
             String food = "炒拉条"; // 局部变量
             System.out.println(name+"我中午吃的是:" + food);
        }
         
         
      }
      • 在类中定义的位置不同 【重点】

        • 成员变量 定义在 类中 方法外

        • 局部变量 定义在 方法中

    2. 作用范围不同 【重点】

      • 成员变量: 类中

      • 局部变量: 方法中

    3. 初始值不同 【重点】

      • 成员变量: 有默认值

      • 局部变量: 没有默认值,需要 赋值

    4. 在内存存储的位置不同 【了解】

      • 成员变量:堆内存中

      • 局部变量:栈内存中

    5. 生命周期不同 【了解】

      • 成员变量:随着对象的创建而存在,随着对象的消失而消失

      • 局部变量: 随着方法的调用而存在,随着方法调用结束而消失

    6. 修饰符不同 【了解】

      • 成员变量: 可以使用修饰符

      • 局部变量: 不可以使用修饰符


## 封装

### 封装:

面向对象编译语言模拟客观世界,客观世界里的成员变量都是隐藏在对象内部的,外界是无法直接操作和修改的。

封装可以认为是一个保护屏障,防止该类的代码和数据被其他类随意的访问和修改。若要访问该类的数据必须通过指定的方式才可以进行访问,适当的封装,可以让我们的代码更容易维护和理解,也加强了代码的安全性

    ####     原则:

就是将【属性隐藏】起来,如果想要访问类中某个属性,提供【公共的方法】对其访问

封装步骤

  1. 使用private 关键字 来修饰 成员变量

  2. 对需要访问的成员变量,提供对应的 一对 setXxx() 和 getXxx()方法。

    封装的操作-----------》 private 关键字

    private 含义:

     

    1. private 是一个权限修饰符,代表最小的权限,最严格权限

    2. 可以修饰成员变量 也可以修饰成员方法

    3. 被private修饰后的成员变量 和成员方法 只能在本类中访问,

       

      public class Man{
         // 使用private 进行封装
         private String name;
         private int age;
         
         // 提供对应的setXxx() 和 getXxx() 方法 可以访问类中的成员变量
         
         public  String getName(){
             return name;
        }
         public void setName(String name1){
             name = name1;
        }
         
      }

      封装优化1------》this关键字

      我们发现setXxx() 方法当中形参名字不符合我们标识符的命名规范--见名知意,如果修改成和成员变量名字相同,会触发java程序当中的就近原则,会把方法内的变量统统设定为形参变量,会导致赋值失败,我们可以采用【this】关键字来解决变量重名问题

      this的含义: this 表示 【当前】

      this代表 所在类的当前对象的引用(地址值),即对象自己的引用

      备注:意思方法被哪个对象调用,方法中的this 就代表那个对象,谁调用this就是谁。

      this 的使用格式:

       

      this.成员变量名
      // 使用this关键字 修饰方法中的成员变量。解决成员变量被隐藏的问题

      public void setName(String name){
         this.name = name;
      }

      备注: 方法中若只有一个变量名,this可以省略不写

      封装优化2---构造方法 ( 是方法就可以重载)

      当一个对象被创建出来的时候,构造方法用来初始化对象,给对象的成员变量赋初始值

      备注: 无论你是否在类中定义构造方法,当类被定义出来的时候,系统会自动给该类分配一个无参的构造方法, 一旦在类中显式的定义的构造方法,Java自动提供的默认无参构造方法就会失效(被收回)

      构造方法的定义格式:

 

修饰符 构造方法名 (参数列表){

   // 方法体内容
   
}
// 构造方法 没有返回值,构造方法名和类名完全一致 不需要void

练习构造方法的使用

public class Dog{
   private String name;
   private int age;
   private String brand;
   private String color;
   //优化封装 构造方法
   public Dog(){}
   public Dog(String name,int age,String brand,String color){
       this.name = name;
       this.age = age;
       this.brand = brand;
       this.color = color;
  }
   
   
   
   
}

练习Person 类,成员变量: 姓名,年龄,体重,民族

public class Person{
   private String name;
   private String weight;
   private String nation;
   private int age;
   
   public Person(){}
   public Person(String name, String weight,String nation,int age){
       
  }
}

注意事项:

  • 构造方法名称必须和所在的类名称完全一摸一样

  • 构造方法不用声明返回值类型,连void也不需要

  • 构造方法不能用return一个具体的返回值

  • 如果定义类时没有显式定义构造方法,系统会提供一个默认的无参构造方法

  • 一旦自定义了构造方法 ,那么编译器将会收回默认提供的构造方法

  • 构造方法 可以重载,方法名称相同,参数列表不同

标准类----JavaBean

JavaBean: 是Java语言编写类的一种标准规范,符合JavaBean的类,通常包含四部分:

  1. 所有的成员变量都需要使用 private关键字修饰

  2. 为每一个成员变量 提供 一对公共的 setter() 和getter()方法

  3. 编写一个无参的构造方法

  4. 最好再提供一个全参的构造方法

像这种的类就叫 JavaBean

posted @ 2020-11-19 11:36  gnal  阅读(86)  评论(0)    收藏  举报