【Java基础篇 | 面向对象】—— 封装详解

这篇具有很好参考价值的文章主要介绍了【Java基础篇 | 面向对象】—— 封装详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【JavaSE_primary】
本专栏旨在分享学习Java的一点学习心得,欢迎大家在评论区讨论💌
【Java基础篇 | 面向对象】—— 封装详解,JavaSE_primary,java,开发语言,面向对象

一、封装

1.1什么是封装

封装概念将数据和对数据的操作封装在一个类中,对外部的访问只通过类提供的接口进行。

封装目的隐藏类的内部实现细节,只公开必要的方法来操作数据,避免数据被外部直接访问和修改,从而提高代码的安全性和可维护性。

那java是如何控制对数据的访问权限呢,答案是访问修饰符。通过访问修饰符,可以控制对数据的访问权限,以确保代码的安全性和封装性。

1.2访问修饰符

java中主要有以下四种访问修饰符:
加粗样式【Java基础篇 | 面向对象】—— 封装详解,JavaSE_primary,java,开发语言,面向对象

  • public:公共访问修饰符,可以被任何其他类或代码访问。
  • protected:受保护的访问修饰符,可以被同一包内的类、子类以及其他包中的子类访问。
  • default(默认):没有显式指定访问修饰符时,默认的访问修饰符,可以被同一包中的类访问。
  • private:私有访问修饰符,只能被所属类的内部访问。

二、封装拓展之包

2.1包的概念

在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件包

2.2导入包中的类

在Java中,你可以使用import关键字来导入其他包中的类。导入包中的类可以让你在当前文件中直接使用这些类而无需使用完整的包名来引用它们。

比如,我们想要导入java.util包中的Date类。即import java.util.Date

public class Test3 {
    public static void main(String[] args) {
        java.util.Date date = new java.util.Date();
        // 得到一个毫秒级别的时间戳
        System.out.println(date.getTime());
    }
}

这里如果需要使用 java.util 中的其他类,,可以使用 import java.util.*

需要注意的是:import java.util.*中的*代表导入‘java.util’包下的所有类,从而使所有类都可以在代码中直接使用。同时这里并不是一次性把java.util包下的所有类都导入进来,而是用到哪个类才导入哪个类(即用到谁导入谁)。

并不是只有 java.util包才有Date类,java.sql包中也是有Date类的。


2.3自定义包

在Java中,我们可以创建自己的包来组织和管理你的类文件。

创建和使用自定义包的一般步骤如下:

1.创建包目录结构:在我们的项目或源代码目录下,创建一个与我们的包名相对应的目录结构。例如,如果我们的包名是com.example.mypackage,那么你应该创建一个目录结构为com/example/mypackage的文件夹

2.编写类文件:在包目录结构下,创建你的类文件。例如,在com/example/mypackage目录下,你可以创建一个名为MyClass.java的文件,并在其中定义你的类。

3.声明包名:在你的类文件的开头,使用package关键字来声明你的包名。例如,在MyClass.java中,你可以添加如下的包声明:package com.example.mypackage;

4.导入和使用包中的类:如果你在另一个Java文件中想要使用你的包中的类,可以使用import语句导入该类。例如,如果你想在Main.java中使用MyClass类:

import com.example.mypackage.MyClass;

public class Main {
    public static void main(String[] args) {
        MyClass myObject = new MyClass();
        // 使用myObject进行操作
    }
}

三、static成员

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

举个例子,我们以学生类进行举例,现在有10个学生,这10个学生中都是在同一个班级,所以我们此时就不需要再学生类中写一个成员变量来保存学生所处的班级,我们可以把班级理解为这些学生的共同属性,即所有学生所共享的一个属性。所以我们当然不需要在每个学生类对象中都要存储一份这样的属性,因为这个班级属性是每个学生所共享的。

3.1static修饰成员变量

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

静态成员变量的特性如下:

  • 静态成员变量不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中。
  • 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
  • 类变量存储在方法区当中
  • 静态成员变量的生命周期随类的加载而创建,随类的卸载而销毁

如果要为成员变量进行赋值的话,我们如下图可以直接为静态成员变量进行赋值即可。
【Java基础篇 | 面向对象】—— 封装详解,JavaSE_primary,java,开发语言,面向对象

3.2静态成员方法的访问

静态成员方法的访问是通过类名来进行访问的。
【Java基础篇 | 面向对象】—— 封装详解,JavaSE_primary,java,开发语言,面向对象

下面是静态成员方法的特性:

  • 静态成员方法不属于某个具体的对象,是类方法
  • 静态成员方法通过类名去进行访问,当然如果通过对象去访问也是可以的,只不过更推荐通过类名去进行访问
  • 不能直接访问静态方法中的任何非静态成员变量和非静态成员方法

综上,静态的无论是静态成员变量还是静态成员函数都是不依赖于对象的,它们都是可以通过类名去进行访问的。

3.3static成员变量的初始化

静态成员变量一般不会放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性
静态成员变量的初始化分为两种:就地初始化和静态代码块初始化

就地初始化:在定义时直接给出初始值。
请看举例:
【Java基础篇 | 面向对象】—— 封装详解,JavaSE_primary,java,开发语言,面向对象

代码块初始化:

四、代码块

使用 {} 定义的一段代码称为代码块。根据代码块定义的位置以及关键字,又可分为以下四种:
实例代码块、静态代码块、局部代码块、同步代码块

下面来看下述代码:

public class MyStudent {
    public String name;
    public int age;
    public int ID;
    public static String classes = "classone";

    {
        System.out.println("实例代码块");
    }

    static {
        System.out.println("静态代码块");
    }

    public MyStudent(){
        this("李华",18,123456);
        System.out.println("不带参数的构造函数");
    }

    public MyStudent(String name,int age,int ID){
        System.out.println("带参数的构造函数");
        this.name = "Daming";
        this.age = 21;
        this.ID = 123456;
    }

    public static void main(String[] args) {
        MyStudent s1 = new MyStudent();
    }
}

【Java基础篇 | 面向对象】—— 封装详解,JavaSE_primary,java,开发语言,面向对象

看下图代码的执行结果:
【Java基础篇 | 面向对象】—— 封装详解,JavaSE_primary,java,开发语言,面向对象
由此可以看出static修饰的成员变量在对象创建之前就已经创建完成了,所以static修饰的成员变量和成员方法加载的速度比较快。

实例代码块、静态代码块、局部代码块、同步代码块的执行顺序如下:

1.静态代码块:静态代码块首先在类加载时执行,只会执行一次,并在类加载后执行。用于初始化类的静态成员变量或执行其他静态初始化操作

2.实例代码块:实例代码块在每次创建对象时都会被执行。它在构造方法之前执行,并且不管调用哪个构造方法,都会执行实例初始化块。

3.构造方法(Constructor):构造方法用于创建对象并对实例变量进行初始化。构造方法的执行顺序由具体调用的构造方法决定。

4.局部代码块:局部代码块是在方法或条件语句内部定义的代码块。它在程序运行到该代码块时被执行。

5.同步代码块(Synchronized Block):同步代码块使用关键字包裹一段代码,用于实现线程同步。当线程进入同步代码块时,需要获取锁,其它线程需要等待锁释放才能执行。

注意事项如下:
1.静态代码块不管生成多少个对象,其只会执行一次
2.静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
3.如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
4.实例代码块只有在创建对象时才会执行

总之静态代码块只在类加载时执行一次,而实例代码块(在构造方法之前执行)在每次创建对象时都会执行。局部代码块和同步代码块在程序运行到相应的位置时才会执行。构造方法在创建对象时被调用,并且可以根据具体的构造方法决定执行顺序。

以上就是本文的全部内容。

好了,友友们,本文到这里就结束了,再见啦!!!文章来源地址https://www.toymoban.com/news/detail-706955.html

到了这里,关于【Java基础篇 | 面向对象】—— 封装详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java入门】-- Java基础详解之 [Java面向对象编程(初级)]

    目录 1.类与对象 2.类与对象的区别与联系 3.对象在JVM内存中的存在形式(重要) 4.属性/成员变量/字段 5.如何创建对象 6.类和对象的内存分配机制 7.面向对象的三大特征? 8.面向对象和面向过程? 9.匿名对象 10.方法(method) 11.方法的重载(overload) 12.可变形参 13.递归 14.封装 15.四种访

    2024年02月12日
    浏览(36)
  • 【JavaSE专栏56】Java面向对象编程:深入理解类、对象、属性和方法的核心概念

    博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭 《MYSQL从入门到精通》数据库是开发者必会基础之一~ 🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄

    2024年02月07日
    浏览(41)
  • 面向对象(类/继承/封装/多态)详解

    面向对象编程(Object-Oriented Programming,OOP)是一种广泛应用于软件开发的编程范式。它基于一系列核心概念,包括类、继承、封装和多态。在这篇详细的解释中,我们将探讨这些概念,并说明它们如何在PHP等编程语言中实现。 类是OOP的基础。它是一种用于创建对象的蓝图或模

    2024年02月08日
    浏览(63)
  • Java面向对象封装

    目录 封装的概念 封装具体实现步骤 示例代码如下 封装具体语法 Java封装是一种面向对象的编程方法,它的主要思想是将类的内部细节(包括数据和方法)隐藏起来,对外只提供公共的访问接口,从而保证了程序的安全性和稳定性。 1、声明类的成员变量时,使用private

    2024年02月03日
    浏览(46)
  • Java面向对象 - 封装、继承和多态

    目录 第1关:什么是封装,如何使用封装 第2关:什么是继承,怎样使用继承 第3关:super的使用 第4关:方法的重写与重载 第5关:抽象类 第6关:final的理解与使用 第7关:接口 第8关:什么是多态,怎么使用多态 Java_Educoder

    2024年02月07日
    浏览(79)
  • Python面向对象编程(一)类的基础,关系,继承,封装,多态

    类的一些理论概念及其应用场景等基础内容此处不赘述 目录 python中一切皆对象 类的定义及基础 属性 方法 初始化方法  普通方法 类之间的关系 相互调用 依赖关系 关联关系 组合关系 三大特征----类的继承 重写父类方法 多继承 混合继承  三大特征----封装 三大特征----多态

    2024年02月10日
    浏览(78)
  • 面向对象编程第一式:封装 (Java篇)

    本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念

    2024年03月19日
    浏览(64)
  • 【深入浅出C#】章节 4: 面向对象编程基础:封装、继承和多态

    封装、继承和多态是面向对象编程中的核心概念,它们对于构建灵活、可扩展和可维护的软件系统至关重要。 封装(Encapsulation)通过将数据和相关操作封装在一个类中,隐藏内部实现细节,并提供公共接口来与外部进行交互。封装有助于保护数据的完整性和安全性,同时提

    2024年02月10日
    浏览(58)
  • Educoder/头歌JAVA——JAVA面向对象:封装、继承和多态的综合练习

    目录 第1关:封装、继承和多态进阶(一) 相关知识 面向对象思想 封装 继承 组合和继承 构造函数 super()和this() 编程要求 第2关:封装、继承和多态进阶(二) 相关知识 重写和重载 abstract(抽象类)和interface(接口) final static static的作用 多态 编程要求 第

    2024年02月04日
    浏览(55)
  • 【Java不看后悔系列】|面向对象编程|[继承、封装、多态全覆盖]

    🌈个人主页:  Aileen_0v0 🔥系列专栏: Java学习系列专栏 💫个人格言:\\\"没有罗马,那就自己创造罗马~\\\" (inheritance) 1.A child class inherits everything from its parent class. 2.A child class cannot inherit the constructors from its parent class . 子类 继承 的内容: 字段(成员变量): 子类会继承父类的字段

    2024年02月05日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包