1 面向对象

1.1 面向对象概述

Java是一门面向对象的编程语言;
面向对象:
做事情的时候,强调的是对象,我自己不想做这件事,让别人帮我做成这件事情;
面向对象是基于面向过程的;
面向过程:
什么事情都是自己做,强调的是做事情的步骤;相当于我们是事情的完成者;

1.2 面向对象的好处

1:面向对象可以将复杂的问题,简单化;
2:面向对象更符合人类思考问题的习惯;
3:面向对象可以让我们从事情的操作者变成事情的指挥者;

1.3 类与对象的概述

类:
类是现实生活中一类事物的抽象描述;
(用于制造事物的图纸)
对象:
现实生活中实实在在存在的,具有一定功能和特征的具体事物;
(能够做成具体功能的只能是对象)
类与对象的关系:
一个类可以造出多个对象,每个对象都必须有自己所属的数据类型!

特征:
在java中,使用成员变量的代码形式来体现;
功能:
在java中,使用方法的代码形式来体现;
成员变量:
直接写在类的大括号中(一定要在方法的外面),就是成员变量;

1.4 类与对象的代码格式

类定义的格式:
public class 类名{
//成员变量
数据类型 成员变量名;
//成员方法
public 返回值类型 方法名(参数列表){
//方法体;注意,这样的方法只能使用对象才能调用;
}
//构造方法
}
对象创建的格式:
对象所属的数据类型 对象名 = new 对象所属的数据类型();
对象所属的数据类型:可以是java提供的类,例如:Random,Scanner;也可以是我们自定义的类;例如:电脑,人,灯泡,手机。。。
凡是我们自定义的类,小括号中是不是传递实际参数,取决于我们的构造方法,没有学习构造方法之前,统统都是空参数的;如果是java提供的类,需要查询java中的API,观察要不要传递参数;

对象调用的格式:
方法的返回值类型 变量名= 对象名.方法名(方法的实际参数);
对象名.成员变量名 = 具体数据值;//给成员变量赋值
成员变量的数据类型 变量名 = 对象名.成员变量名;

1.5 类的对象创建与调用的内存分析示意图

day07-面向对象基础-封装 - 图1
通过图观察,得出结论:
对象中的成员变量是独享的!
对象中的方法是共享的!

1.6 两个引用数据类型的对象指向同一个地址

指向同一个地址的两个对象,操作成员变量和成员方法时,效果一模一样;相互影响,在堆内存中只会创建一片空间;

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

  • 在类中的位置不同
    • 成员变量:类的大括号中,方法外
    • 局部变量:方法中或者方法声明上(形式参数)
  • 在内存中的位置不同
    • 成员变量:堆内存
    • 局部变量:栈内存
  • 生命周期不同
    • 成员变量:随着对象的创建而存在,随着对象的消失而消失
    • 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
  • 初始化值的不同

    • 成员变量:有默认值,随着对象的创建而产生,随着对象的死亡而死亡
    • 局部变量:没有默认值。必须先定义,赋值,最后使用

      2 面向对象-封装

      2.1 封装概述

      所谓的封装其实就是将事物的一些细节内容,隐藏起来,不对外暴露;
      在java中的封装是面向对象的三大特征之一;
      三大特征:
      封装,继承,多态;

      2.2 封装的意义

      封装的目的是为了让用户使用这些事物的时候,受到一定的限制;
      使用一种更好的方式使用这些事物;
      (封装的目的不是不让别人用,是为了让别人更规范的使用)
      在java中,类,方法,其实都是一个封装体,都是封装形式的代码体现;

      2.3 成员变量的封装

      在java中可以使用关键字:private来封装一个成员变量;被private关键字修饰的成员变量,将不能直接通过对象名.方法名的形式来操作;需要提供成员变量对应的getXxx与setXxx方法;
      成员变量:通常可以叫做属性;
      成员变量封装的代码形式:
      public class 类名{
      private 数据类型 成员变量名1;
      private 数据类型 成员变量名2;
      。。。。
      //对应的getXxx与setXxx方法
      public void setXxx(数据类型 成员变量名1){
      this.成员变量名1=成员变量名1;
      }
      public 数据类型 getXxx(){
      return 成员变量名1;
      }
      }

      2.4 封装的概述和好处

  • 封装概述

    • 是面向对象三大特征之一
    • 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。就像刚才说的年龄。
  • 封装原则:
    • 将不需要对外提供的内容都隐藏起来。
    • 把属性隐藏,提供公共方法对其访问。
    • 成员变量private,提供对应的getXxx()/setXxx()方法
  • 好处:
    • 通过方法来控制成员变量的操作,提高了代码的安全性;
    • 把代码用方法进行封装,提高了代码的复用性;

      2.5 this关键字

      this本意:代表当前对象的引用;(当前对象的地址值,正在执行代码的那个对象);
      this作用:
      1:用于区分局部变量与成员变量重名;当成员变量和局部变量重名时,且同时出现在同一个方法中时,必须使用this区分成员变量与局部变量;否则将都按局部变量使用;
      (简单记:就近原则使用)
      2:在自己类的方法中,调用自己类中的其他成员方法或成员变量;(通常可以省略不写,实际开发中一般都省略不写了)
      3:可以在自己类的构造方法中,调用自己类的构造方法;(就业班讲)

      2.6 构造方法概述

      构造方法是类中的特殊方法,构造方法的作用主要有两个:
      1:用于创建对象的时候,使用;
      2:可以使用构造方法对类中的成员变量进行初始化;(赋值)

构造方法的格式:
修饰符 构造方法名称(参数列表){
方法体;
}
修饰符:可以是public,private,建议是:public
构造方法名称:必须和类名一模一样;

注意:
1:构造方法没有返回值,连void都没有;
2:构造方法可以重载;
3:构造方法只能由java虚拟机负责调用,程序员不能调用;
4:构造方法每创建一个对象都会执行且仅会执行一次;(对象一旦创建成功,那么就无法通过被创建出来的对象,让构造方法执行了)
5:对于一个类,如果程序员没有写构造方法,那么java会默认提供一个空参数的构造方法,如果写任意一个构造方法,那么将不再提供默认的空参数构造方法;

构造方法赋值与setXxx方法赋值的区别:
1:构造方法是在对象创建过程中赋的值;(用于造对象的时候带着值)
2:setXxx方法是在对象创建成功后,通过对比赋的值;(用于对象创建后,修改成员变量的在)