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热爱者了解文章,作者将会持续更新中,期待各位友友的关注和收藏。。。

相关推荐
电饭叔1 小时前
《python程序语言设计》2018版第5章第52题利用turtle绘制sin函数
开发语言·python
weixin_452600691 小时前
如何为老化的汽车铅酸电池充电
开发语言·单片机·安全·汽车·电机·电源模块·充电桩
浅念同学2 小时前
算法-常见数据结构设计
java·数据结构·算法
Java资深爱好者2 小时前
如何在std::map中查找元素
开发语言·c++
YCCX_XFF212 小时前
ImportError: DLL load failed while importing _imaging: 操作系统无法运行 %1
开发语言·python
哥廷根数学学派3 小时前
基于Maximin的异常检测方法(MATLAB)
开发语言·人工智能·深度学习·机器学习
杰哥在此4 小时前
Java面试题:讨论持续集成/持续部署的重要性,并描述如何在项目中实施CI/CD流程
java·开发语言·python·面试·编程
Unity打怪升级4 小时前
Laravel: 优雅构建PHP应用的现代框架
开发语言·php·laravel
咖啡煮码4 小时前
深入剖析Tomcat(十五、十六) 关闭钩子,保证Tomcat的正常关闭
java·tomcat
C.C4 小时前
java IO流(1)
java·开发语言