Java基础的重点知识-04-封装

文章目录

面向对象思想

在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。

  • 面向对象思想的三大基本特征: 封装、继承、多态

1.类和对象
类是对象的抽象,对象是类的具体实例

比如我们把所有学生归为一个类叫做学生类,那么何为对象呢?对象就是学生类的一个具体示例,比如说是一个叫小明的学生,这就是这个类的一个对象。

  • 类是对一类事物的描述,是抽象的
  • 对象是一类事物的实例,是具体的
  • 类是对象的模板 ,对象是类的实体
  1. 类的定义

成员变量:对应事物的属性
成员方法:对应事物的行为

txt 复制代码
public class ClassName {
	//成员变量
	//成员方法
}
  1. 对象的使用
    创建对象:类名 对象名 = new 类名();
    使用对象访问类中的成员: 对象名.成员变量;对象名.成员方法();
    代码示例:
java 复制代码
public class Student {
    String name;
    int age;

    public void play(){
        System.out.println("我爱打篮球!");
    }


    public static void main(String[] args) {
        Student xiaoMing = new Student();
        xiaoMing.name = "小明";
        xiaoMing.age = 18;
        System.out.println(xiaoMing.name + ":" + xiaoMing.age);
        xiaoMing.play();
    }
}


重点(成员变量的默认值):

数据类型 默认值
基本类型 整数(byte,short,int,long) 0
浮点数 (float,double) 0.0
字符(char) '\u0000'
布尔(boolean) false
引用类型 数组,类,接口 null
  1. 对象内存图
  • 一个对象调用一个方法内存图

  • 两个对象,调用同一方法内存图

  • 一个引用,作为参数传递到方法中内存图

  1. 成员变量与局部变量的区别
java 复制代码
public class Bird {
    String name;
    int age;

    public static void main(String[] args) {
        String action = "";
    }
}

这里我们在类中方法外定义的变量是成员变量,在方法内定义的变量是局部变量,

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

封装

将成员变量隐藏在对象内部,外界无法对其进行直接修改或操作,增强代码的安全性

  • 将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。
  1. 如何进行封装处理
    首先是使用private关键字来修饰成员变量,再通过提供一对getXXX()方法和setXXX()方法,来供对象访问成员变量。
    代码示例:
java 复制代码
public class Student {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String n) {
        name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int a) {
        age = a;
    }

    public static void main(String[] args) {
        Student xiaoMing = new Student();
        xiaoMing.setName("小明");
        xiaoMing.setAge(18);
        System.out.println(xiaoMing.getName() + ":" + xiaoMing.getAge());
    }
}

可以发现,我们通过公共的get、set方法来对成员变量进行设值和取值,但是这样的代码并不是最常见的。因此我们要了解this关键字。

  1. this关键字
    this代表所在类的当前对象的引用(地址值),即对象自己的引用。
    因为this表示所在类的当前对象的引用,所以我们可以通过this关键字来标识成员变量和传递的参数名,使我们的代码更加优雅。
    注意: 当我们不使用this关键字来进行区别时,无法正确的进行成员变量的赋值。
java 复制代码
package demo01;

public class Student {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public static void main(String[] args) {
        Student xiaoMing = new Student();
        xiaoMing.setName("小明");
        xiaoMing.setAge(18);
        System.out.println(xiaoMing.getName() + ":" + xiaoMing.getAge());
    }
}
  1. 构造方法
    无论你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法, 一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效。
    构造方法的定义
txt 复制代码
修饰符 构造方法名(参数列表){
	// 方法体
}
  • 构造方法名与类名相同
  • 构造方法没有返回值

代码示例:

java 复制代码
package demo01;

public class Student {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student(String name) {
        this.name = name;
    }

    public Student(int age) {
        this.age = age;
    }

    public Student() {
    }

    public static void main(String[] args) {
        Student xiaoMing = new Student("小明",18);
        System.out.println(xiaoMing.getName() + ":" + xiaoMing.getAge());
    }
}

从上代码我们可以看到,构造方法是可以重载的,但是我们也要注意,当我们只设定有参的构造方法的时候,无参构造方法就会消失。但是我们java中有些框架在进行反射时是需要无参构造器的支持的,所以在我们创建类的时候最好是定义好有参构造方法以及无参构造方法

欢迎java热爱者了解文章,作者将会持续更新中,期待各位友友的关注和收藏。。。

相关推荐
彧azz3 小时前
图的存储结构详解:邻接矩阵的原理、实现与应用
开发语言·数据结构·学习·php
IT_Octopus3 小时前
IntelliJ 本地日志路径自定义:`-DLOG_PATH=./logs` 为什么总“不听话“
java·log4j·intellij-idea
嵌入式学习菌4 小时前
Modbus‑RTU 数据类型分析
开发语言·单片机·bug
长征coder4 小时前
【无标题】
java·性能优化
matlab代码4 小时前
基于matlab数字图像处理的指纹识别系统【源码68期】
开发语言·matlab
新时代牛马4 小时前
PCI与PCIe 硬件原理、配置空间/BAR 与 Linux 驱动完整篇:从 LTSSM、TLP 到 ECAM 与probe
java·linux·服务器
Bs_MoneyMagnet5 小时前
基于springboot+vue的医疗健康便民服务平台的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring
matlab代码5 小时前
基于matlab的水果识别系统(苹果香蕉菠萝梨桃子)【源码65期】
开发语言·matlab
wuyk5555 小时前
从零吃透 MQTT 通信|第 8 章 FreeRTOS 多任务架构下 MQTT 工程架构,任务拆分、队列解耦、临界区保护
c语言·开发语言·stm32·学习·架构
weixin199701080165 小时前
[特殊字符]《跨境二手ERP对接Back Market:标准化API + 7~10工作日技术合规审核实录》(附Python源码)
开发语言·python·pandas