• Java 类和对象(下)


    ✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

    编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。


    前言

    本篇介绍JAVA的封装,static修饰成员变量,成员方法和代码块的介绍,如有错误,请在评论区指正,让我们一起交流,共同进步!


    本文开始

    1.封装

    面向对象程序三大特性:封装、继承、多态。

    1.1 封装概念

    封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互使用

    何为封装呢?
    对类的细节进行隐藏,提供公开的接口来和数据进行交互!简单来说就是 “套壳” 屏蔽细节。
    例如:买了一个电脑,里面有复杂的线路,显卡,内存,cpu等硬件,而对于我们使用计算机更关注使用,而不是里面的设计,所以为了隐藏我们给它加一个壳。

    1.2 访问限定符

    访问限定符:Java通过类和访问权限(访问修饰符)实现封装

    在这里插入图片描述

    【释】:
    private: 私有的,只能在当前类中使用
    default:(默认权限同一个包中的类)不写时自动默认
    public: 公共的谁都可以使用
    protect:主要用于继承,以后介绍

    封装:使用关键字private进行封装,使封装的属性,访问权限变小,只能在当前类中才能访问!

    示例:关键字private进行封装

    在这里插入图片描述

    封装就是我们根据实际的需要,使用限定访问符修饰类中的 成员变量 或 成员方法来限制它是否能使用的范围!(当前类中,当前包中等)

    通过接口来实现访问封装后的变量或方法,实现值的获取,或者更改!

    class People {
        private String name;//封装
        public int age;
    
        private void eat() {
            System.out.println("吃饭!");
        }
    
        public void show() {
            System.out.println(name + " " + age);
        }
    
        public People() {
        }//无参构造
    
        public People(String name) {
            this.name = name;
        }//一个参数的构造
    
        public People(String name, int age) {
            this.name = name;
            this.age = age;
        }两个参数的构造
        //接口,当调用getName时会返回当前name的值
        public String getName() {
            return this.name;
        }
        //调用setName时会赋值给当前name
        public void setName() {
            this.name = name;
        }
    
    
    }
    public class Test {
        public static void main(String[] args) {
            People people = new People("zhang");
            System.out.println(people.getName());
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    1.3 快捷方式写构造方法和变量的接口函数

    1.右键,点击Generate

    在这里插入图片描述

    2.点击Constructor产生指定的构造方法
    点击Getter或Setter参数单独的Getter/Setter方法。
    点击Gettet and Setter是它们一起生成

    在这里插入图片描述

    2.static的使用

    2.1 通过学生类来看static的作用

    Student类中定义的成员变量,每个对象中都会包含一份(称之为实例变量),但会有一些重复的信息,它们是不必要储存多份的,而是需要共享的!

    而Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对象,是所有对象所共享的。

    通过学生类来看static的作用:通过static修饰的不再属于对象,属于方法区

    在这里插入图片描述

    左边是没有加static; 右边是加上static;
    classRoom:就是重复的信息,我们使用static 修饰,让所有学生类共享即可!

    在这里插入图片描述

    2.2 static 修饰成员变量

    static修饰的成员变量,称为静态成员变量/类变量或者类成员。
    静态成员变量最大的特性:不属于某个具体的对象,是所有对象所共享的。

    【静态成员变量特性】

    1. 不属于某个具体的对象,是类的属性,所有>对象共享的,不存储在某个对象的空间中
    2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
    3. 类变量存储在方法区当中
    4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

    静态的成员变量不属于对象,直接通过 类名来访问

    在这里插入图片描述

    2.3 static修饰成员方法

    静态成员方法(类方法):被static修饰的成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的

    【静态方法特性】

    1. 不属于某个具体的对象,是类方法
    2. 可以通过对象调用,也可以通过类名.静态方法名(…)方式调用,更推荐使用后者
    3. 不能在静态方法中访问任何非静态成员变量
    4. 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用

    1.在静态方法内部不能调用非静态成员方法

    在这里插入图片描述

    2.在静态方法内部不能直接使用非静态的数据成员
    静态方法中不能使用 this

    在这里插入图片描述

    【注】:普通成员方法内部可以使用静态成员方法

    如果类中有private修饰的静态成员,只通过类名(Student.size)不能够访问.
    所以我们需要设置 get和set 的方法,在主函数中使用 Student.getSize()访问;

    在这里插入图片描述

    【小建议】:获取静态的成员变量或者设置静态成员变量,设置的方法最好是静态的。如果不是非静态的方法,还需要实例化对象。

    2.4 static 成员变量初始化

    1.直接初始化

    在这里插入图片描述

    2.默认初始化

    引用类型:默认null
    整形 / 浮点型:0 / 0.0

    3.提供get和set方法初始化

    在这里插入图片描述

    4.在构造对象的时候,可以在构造方法中进行赋值
    不建议这样写,因为size不是对象,在构造方法的时候不会显示size,需要自己加,不方便。

    在这里插入图片描述

    5.通过代码块赋值

    普通代码块:定义在方法内部的代码块
    构造块:非静态代码块/实例代码块
    静态块:static
    同步代码块(多线程讲解)

    3. 代码块

    1.普通代码块:不常用

    public static void func() {
           //区分代码作用域
            {
                int a = 10;
                System.out.println("定义在方法内部的代码块!普通代码块!");
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.实例代码块/构造代码块/非静态代码块
    存在:在类内,方法外;
    使用:在构造代码块之前赋值(构造代码块一般用于初始化实例成员变量)

    在这里插入图片描述

    对于 都是非静态的,看定义顺序,谁在后,最后就是那个值。

    在这里插入图片描述

    非静态代码块 和 非静态成员 都是非静态的,前后顺序不一样,name变量最后的值就不一样。

    在这里插入图片描述

    由例子可得:非静态代码块执行 》 构造代码块(无参构造或有参构造);

    3.static静态代码块
    使用:一般用于初始化静态成员变量
    【注】
    1.只有类被加载,静态代码块就会被执行
    2.而构造代码块需要 new 对象(实例代码块只有在创建对象时才会执行)
    3.静态代码块不管生成多少个对象,其只会执行一次
    4.静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
    5.如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)

    执行顺序:静态代码块 》 非静态代码块 》 构造代码块

    在这里插入图片描述

    总结

    ✨✨✨各位读友,本篇分享到内容,如果对你有帮助给个👍赞鼓励一下吧!!
    🎉🎉🎉感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

  • 相关阅读:
    FastAPI获年度第一新兴框架,2021年最受欢迎的TOP 100开发工具出炉
    [java/初学者]static修饰的静态变量、方法及代码块的特性与使用
    Ubuntu手机和电脑安装其他终端Terminal Emulator
    《QT实用小工具·三十四》Qt/QML使用WebEngine展示的百度ECharts图表Demo
    Java基础 | 反射机制详解
    uniapp实战项目 (仿知识星球App) - - 利用computed监听用户操作
    部署LVS-DR群集
    Spring版本特性--->Spring各个版本引入了哪些新特性?-1
    07 数列极限存在的条件
    Linux基本指令(上)——“Linux”
  • 原文地址:https://blog.csdn.net/m0_69119792/article/details/127784609