05—JAVA—类(封装)

01面向对象思想

1.1面向对象思想的概述

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

  • 特点:面向对象有三大特征,封装,继承和多态。

1.2类和对象

  • 类:是一组相关属性行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
    现实中,描述一类事物:
    属性:就是该事物的状态信息。
    行为:就是该事物能够做什么。
    举例:小猫。
    属性:名字、体重、年龄、颜色。
    行为:走、跑、叫。

  • 对象:是一类事物的具体体现。对象是类的一个实例,必然具备该类事物的属性和行为。
    现实中,一类事物的一个实例:一只小猫。
    举例:一只小猫。
    属性:Tom、5公斤、2 岁、黄色。
    行为:走、跑、喵喵叫。

  • 类与对象的关系
    类是对一类事物的描述,是抽象的。
    对象是一类事物的实例,是具体的。
    类是对象的模板,对象是类的实体

  • 对象由类实例化出来,是一个类的具体表现。类是对象的抽象形式,对象是类的具体形式,好比类是模板,对象就是使用此模板制作的物品

1.3类的定义

  • 现实世界的一类事物:
    属性:事物的状态信息。
    行为:事物能够做什么。
  • Java中用类描述事物也是如此:
    成员变量:对应事物的属性
    成员方法:对应事物的行为

在C++中称之为成员函数和成员变量

  • 类定义的格式:
public class ClassName {
	//成员变量
	//成员方法
}

定义类:就是定义类的成员,包括成员变量和成员方法。
成员变量:和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外。
成员方法:和以前定义方法几乎是一样的。

  • 成员变量的默认值
数据类型 默认值
基本数据类型 整数(byte,short,int,long) 0
基本数据类型 浮点数 (float,double) 0.0
基本数据类型 字符 (char) ‘\u0000’
基本数据类型 布尔(boolean) false
引用数据类型 数组,类,接口 null
  • 定义一个猫类
public class Cat{
	//成员变量,猫的属性
	String name;
	int  weight;
	int age;
	String color;
	//成员方法,猫的行为
	public void walk(){
		System.out.println("walk");
	}
	public void run(){
		System.out.println("run");
	}
	public void miaow(){
		System.out.println("miaow");
	}
}

1.4对象的使用

  • 对象的使用格式
创建对象:
类名 对象名 = new 类名();

使用对象访问类中的成员:
对象名.成员变量;
对象名.成员方法();
  • 举例
public class Cat_01 {
    /*
    一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必
    须与之一致,否则无法编译。
    如果源文件中没有一个public类,则文件名与类中没有一致性要求。
    至于main()不是必须要放在public类中才能运行程序。
    */
    public static void main(String[] args) {
        Cat cat01=new Cat();
        cat01.name="Tom";
        cat01.age=2;
        cat01.weight=5;
        cat01.color="yellor";
        cat01.walk();
        cat01.run();
        cat01.miaow();
    }
}
//猫类
class Cat{
    //成员变量,猫的属性
    String name;
    int  weight;
    int age;
    String color;
    //成员方法,猫的行为
    public void walk(){
        System.out.println("walk");
    }
    public void run(){
        System.out.println("run");
    }
    public void miaow(){
        System.out.println("miaow");
    }
}

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

变量根据定义位置的不同,我们给变量起了不同的名字。
在这里插入图片描述

  • 在类中的位置不同 重点
    成员变量:类中,方法外
    局部变量:方法中或者方法声明上(形式参数)
  • 作用范围不一样重点
    成员变量:类中
    局部变量:方法中
  • 初始化值的不同 重点
    成员变量:有默认值
    局部变量:没有默认值。必须先定义,赋值,最后使用
  • 在内存中的位置不同 了解
    成员变量:堆内存
    局部变量:栈内存
  • 生命周期不同 了解
    成员变量:随着对象的创建而存在,随着对象的消失而消失
    局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

02封装

2.1封装的概述

  • 概述:
    面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。
  • 原则:
    将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。

2.2封装的步骤

  1. 使用 private 关键字来修饰成员变量。
  2. 对需要访问的成员变量,提供对应的一对 getXxx 方法 、 setXxx 方法。

2.3封装的操作——private关键字

  • private的含义:
  1. private是一个权限修饰符,代表最小权限。
  2. 可以修饰成员变量和成员方法。
  3. 被private修饰后的成员变量和成员方法,只在本类中才能访问
  • private的使用格式:
//修饰成员变量
private 数据类型 变量名;
//修饰成员方法
private 返回值类型 方法名(数据类型 形参){
		函数体
}
  • 封装后如果类外想要访问本类中的成员变量,要对外提供公共的set和get方法
class Cat{
    //成员变量,猫的属性,私有化
    private String name;
    private int  weight;
    public String getName() {
        return name;
    }
    //对外提供相应的set和get方法
    public void setName(String name) {
        this.name = name;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }
  }

2.4this关键字

在上面的代码中,set方法里面有一个this关键字,它的作用是什么呢?不使用this关键字,直接name=name;可以吗?

class Cat{
    //成员变量,猫的属性,私有化
    private String name;
    private int  weight;
    public String getName() {
        return name;
    }
    //对外提供相应的set和get方法
    public void setName(String name) {
        name = name;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
       weight = weight;
    }
  }

经过测试,我们发现,成员变量赋值失败了。也就是说,在修改了 setName() 的方法之后,方法并没有给成员变量赋值,这是由于形参变量名与成员变量名重名,导致成员变量名被隐藏(覆盖),方法中的变量名,无法访问到成员变量,从而赋值失败。所以,我们只能使用this关键字,来解决这个重名问题

  • this的含义
    this代表所在类的当前对象的引用(地址值),即对象自己的引用。
    方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。

2.5封装优化—构造方法

  • 当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。
    无论你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法,一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效,使用我们自定义的构造方法
  • 构造方法的定义格式:
修饰符 构造方法名(参数列表){
	// 方法体
	}

定义构造方法时注意:方法名与它所在的类名相同,它没有返回值,所以不需要返回值类型,甚至不需要void。使用构造方法后,代码如下:

class Cat{
    //成员变量,猫的属性
    private String name;
    private int  weight;
    //无参构造
    public Cat(){}
    //有参构造
    public Cat(String name,int weight) {
        this.name=name;
        this.weight=weight;
    }
    public String getName() {
        return name;
    }

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

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }
    }
  • 注意事项
  1. 如果你不提供构造方法,系统会给出无参数构造方法。
  2. 如果你提供了构造方法,系统将不再提供无参数构造方法。
  3. 构造方法是可以重载的,既可以定义参数,也可以不定义参数

03初识JavaBean

  • 什么是JavaBean?
    JavaBean 是 Java语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无参数的构造方法,提供用来操作成员变量的 set 和 get 方法。
  • 格式:
public class ClassName{
	//成员变量
	//构造方法
	//无参构造方法【必须】
	//有参构造方法【建议】
	//成员方法
	//getXxx()
	//setXxx()
}

猜你喜欢

转载自blog.csdn.net/weixin_45583303/article/details/105504659