JAVA系列 小白入门参考资料 类和对象(3)

温馨提示 此篇文章需要前两篇文章作为基础。

JAVA系列 小白入门参考资料 类和对象(1)​​​​​​​ 

JAVA系列 小白入门参考资料 类和对象(2)

目录

1. 封装

引入封装

访问修饰符  

封装的具体实现 

get方法和set方法

​编辑2. static关键字

static修饰成员变量 

static修饰成员变量的访问

​编辑 static修饰成员方法

static修饰成员方法的访问 

3. 代码块 

代码块概念以及分类

普通代码块

实例代码块

静态代码块


1. 封装

引入封装

何为封装呢?简单来说就是制造外壳保护细节 
举个例子:计算机 

我们平时见到的台式计算机只是一个外壳,我们可以接触到的只有开关键。但计算机内部如何去运行,管理,保存数据,我们对此是不了解的。 因此我们可以认为计算机生产厂商,为了保护计算机内部去套壳,既保护了电脑,也保护了计算机内部运行的信息。

下面我们开始正式的讲解封装

我们先写出正常代码

//类
class Student{
    //成员属性
    String name;
    int age;

    //成员方法
    public void eat(){
        System.out.println(this.name + "在吃饭");
    }

    public void sleep(){
        System.out.println(this.name + "在睡觉");
    }

    public void show(){
        System.out.println("姓名 " + this.name + " 年龄 " + this.age);
    }
}

//类的使用者
public class Blog {
    public static void main(String[] args) {
        //实例化一个对象
        Student student = new Student();
        student.name = "小罗";
        student.age = 10;
        
        //调用方法
        student.eat();
        student.sleep();
        student.show();

    }
}

这里的Student类 就好比 是前文所说的计算机,而其中的成员变量和成员方法就好比是计算机内部的器件和运行规则。而我们的 Blog 类 就好比是我们自己(实际使用者)。

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

访问修饰符  

因为实现封装需要修饰符private,在此我们先补充访问修饰符的概念

Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用。Java中提供了四种访问修饰符:
public   protected  默认修饰符  private   

我们以人(小明)为例子来理解访问修饰符

public: 小明的公共信息,比如外貌,衣着打扮,等等。对比Java来说就是所有人都可以访问(没有限制)

默认修饰符: 小明家庭(同一个包)才知道小明的信息(秘密)。

private:小明(同一类)自己才知道的秘密

提示:访问权限除了可以限定类中成员的可见性,也可以控制类的可见性

封装的具体实现 

                                                用private修饰,此时已经报错

那我们需要用到成员变量时要怎么办呢? 

我们可以自己在类中创造方法来 获取和设定 成员变量(Java中已经给好了相应的方法) 

get方法和set方法

我们可以通过get方法和set方法,去获取和设定 成员变量

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 void eat(){
        System.out.println(this.name + "在吃饭");
    }

    public void sleep(){
        System.out.println(this.name + "在睡觉");
    }

    public void show(){
        System.out.println("姓名 " + this.name + " 年龄 " + this.age);
    }
}

//类的使用者
public class Blog {
    public static void main(String[] args) {
        //实例化一个对象
        Student student = new Student();

        //调用set get方法
        student.setName("小罗");
        student.setAge(10);
        System.out.println(student.getName());
        System.out.println(student.getAge());
        student.eat();
        student.sleep();
        student.show();

    }
}


2. static关键字

我们借用前面所用的学生类,来谈论static

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

static修饰成员变量 

static 修饰的成员变量,称为静态成员变量 ,静态成员变量最大的特性: 不属于某个具体的对象,是所有对象所共 享的
class Student{
    //成员属性
    public String name;
    public int age;
    public String classroom;

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

}

//类的使用者
public class Blog {
    public static void main(String[] args) {
        //实例对象
        Student student = new Student("小罗",10,"1班");
        Student student1 = new Student("小泽",9,"1班");
        Student student2 = new Student("小美",12,"1班");
    }
}

以下是在调试过程中,初始化后 对象引用的属性 

因为大家都在一个班级,都是大家共有的属性,没有必要仍然给每个人去赋值,这时我们尝试去给classroom去加static 

  public static String classroom = "1班";

在调试过程中 班级这个信息已经没有了

因为classroom加上static之后,classroom这个属性已经变成了Student类的静态成员变量,意思是每创建一个Student类的对象都会自带classroom


在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对象,是所有对象所共享的。   
【静态成员变量特性】
1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
3. 类变量存储在方法区当中
4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

静态成员变量不依赖于对象 

static修饰成员变量的访问

类名.静态成员变量

System.out.println(Student.classroom);
Student.classroom = "2班";
System.out.println(Student.classroom);

 static修饰成员方法

Java 中, static 修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的 。静态成员一般是通过静态方法来访问的。

 原理和static修饰的成员变量相似

class Student{
    //成员属性
    public String name;
    public int age;
    public static String classroom = "1班";

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

    public static String getClassroom(){
        return classroom;
    }

}

//类的使用者
public class Blog {
    public static void main(String[] args) {
        //实例化对象
        Student student = new Student("小罗",10);

        //调用静态方法
        System.out.println(Student.getClassroom());


    }
}

static修饰成员方法的访问 

类名. 静态成员方法 

class Student{
    //成员属性
    public String name;
    public int age;
    public static String classroom = "1班";
    //直接初始化静态变量

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

    public static String getClassroom(){
        return classroom;
    }

}

//类的使用者
public class Blog {
    public static void main(String[] args) {
        //实例化对象
        Student student = new Student("小罗",10);

        //调用静态方法
        System.out.println(Student.getClassroom());


    }
}

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

3. 代码块 

代码块概念以及分类

使用 {} 定义的一段代码称为代码块 。根据代码块定义的位置以及关键字,又可分为以下四种:
  • 普通代码块
  • 构造块
  • 静态块
  • 同步代码块(后面线程再说)

普通代码块

普通代码块:定义在方法中的代码块
public class Test {
    public static void main(String[] args) {

        //普通代码块
        {
            int a = 10;
            System.out.println(a);
        }
    }
}

实例代码块

构造块:定义在类中(方法之外)的代码块(不加修饰符)。也叫:实例代码块

构造代码块一般用于初始化实例成员变量 

class Person{
    public String name;
    public int age;
//    public static String sex;

    //实例代码块
    {
        this.name = "小罗";
        this.age = 10;
    }

    public void show(){
        System.out.println("name: "+name+" age: "+age);
    }

}

public class Test {
    public static void main(String[] args) {

        Person person = new Person();
        person.show();
    }
}

静态代码块

使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量。 

class Person{
    public String name;
    public int age;
    public static String sex;

    //静态代码块
    static {
        sex = "male";
    }

    //实例代码块
    {
        this.name = "小罗";
        this.age = 10;
    }
    

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/583997.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch 索引 blocks:深入探讨数据保护

Elasticsearch 作为搜索和分析数据的首选分布式引擎在技术领域脱颖而出,尤其是在处理日志、事件和综合文本搜索时。 它的与众不同之处在于它如何让你使用各种块选项调整对其索引的访问。 这对于那些负责技术项目的人(比如管理员和编码员)来说…

计算机系统概述试题(二)

一、单项选择题 01.关于CPU主频、CPI、MIPS、MFLOPS,说法正确的是( )。 A.CPU主频是指CPU系统执行指令的频率,CPI是执行一条指令平均使用的频率 B.CPI是执行一条指令平均使用CPU时钟的个数,MIPS描述一条CPU指令平均使用 的CPU时钟…

微信小程序与web-view网页进行通信的尝试

首先,微信小程序向web-view传递数据一般通过地址栏传参的形式(给src赋值或者修改hash),这样一般就已经能够满足实际开发需求了,所以这里主要探讨web-view向微信小程序传参。下面,我们从官方文档入手&#x…

计算机组成实验(4)

实验目的: 1. 初步了解GPIO接口与设备 2. 了解计算机系统的基本结构 3. 了解计算机各组成部分的关系 4. 了解并掌握IP核的使用方法 5. 了解SOC系统并用IP核实现简单的SOC系统 实验环境: 1. 计算机(Intel Core i5以上,4GB内存以…

【工具】--- Adobe Illustrator 下载-入门绘图

文章目录 软件下载入门项目可看课程 尝试使用Adobe Illustrator(设计师常用软件)进行科研绘图。 软件下载 阿里云盘下载 入门项目 绘制一个箭头并保持为SVG, 直线->画线->窗口->描边->选择想要的箭头样式->颜色->改为蓝…

git误操作版本回退的方法

场景:在使用git进行代码提交的时候不小心执行了git reset 命令进行了版本回退但是在这之前进行了git add . git commit -m "提交"等命令,正常情况下就可以直接使用 git reset 版本号 进行代码的回退,但是发现自己不能找打上一个提…

机器学习:逻辑回归

概念 首先,逻辑回归属于分类算法,是线性分类器。我们可以认为逻辑回归是在多元线性回归的基础上把结果给映射到0-1的区间内,hθ(x)越接近1越有可能是正例,反之,越接近0越有可能是负例。那么&am…

IC设计数据传输 如何能保障安全高效?

IC(集成电路)设计数据,对于IC设计企业来说,其重要性不言而喻。所以IC设计数据传输过程中,其安全性和效率,也需要有保障。 首先我们来看看IC设计数据为什么重要,其重要性体现在多个方面&#xff…

edge 入门基础了解使用

随着Windows 11的发布,Microsoft Edge也迎来了新的更新和改进。作为一名长期使用Edge的用户,我不仅注意到了这些表面的变化,还深入研究了Edge在Windows 11上的新特性和潜在优势。 快捷方式 查找框 在Microsoft Edge浏览器中,按…

踩坑Mybatis + Mybatis-plus + MyBatis-plus-join

数据库里有两张表 tb_bursary和tb_student tb_bursary里关联了tb_student.id作为外键 由于tb_student表可以单独操作,而tb_bursary需要联合tb_student查询 所以一开始,我是用mybatis-plus mybaits混合的模式 mybatis-plus单独操作tb_student表&…

学习 Rust 第 22 天:mini_grep 第 2 部分

书接上文,在本文中,我们学习了如何通过将 Rust 程序的逻辑移至单独的库箱中并采用测试驱动开发 (TDD) 实践来重构 Rust 程序。通过在实现功能之前编写测试,我们确保了代码的可靠性。我们涵盖了基本的 Rust 概念,例如错误处理、环境…

小程序SSL证书更新指南

随着网络技术的不断发展,小程序已经成为许多企业和个人进行业务推广和服务提供的重要平台。在享受小程序带来的便利和高效的同时,我们也必须重视其安全性问题。SSL证书作为保障小程序数据传输安全的重要手段,其更新工作不容忽视。本文将为大家…

在线教程|零门槛部署 Llama 3,70B 版本只占 1.07G 存储空间,新用户免费体验 8B 版本

4 月 18 日,Meta 宣布开源 Llama 3,这个号称「迄今为止最好的开源大模型」一经发布,立刻引爆科技圈! 发布当天恰逢斯坦福大学教授、AI 顶尖专家吴恩达的生日,作为 AI 开源倡导者,他激动地发文表示&#xff…

CogAgent:开创性的VLM在GUI理解和自动化任务中的突破

尽管LLMs如ChatGPT在撰写电子邮件等任务上能够提供帮助,它们在理解和与GUIs交互方面存在挑战,这限制了它们在提高自动化水平方面的潜力。数字世界中的自主代理是许多现代人梦寐以求的理想助手。这些代理能够根据用户输入的任务描述自动完成如在线预订票务…

【doghead】ubuntu构建libuv

按照官方的文档2024年3月的版本。首先构建libuv 最终构建的还得了test 构建过程 zhangbin@DESKTOP-1723CM1:/mnt/d/XTRANS/thunderbolt/ayame/zhb-bifrost$ ls Bifrost-202403 README.md draw player-only worker 大神的带宽估计.png zhangbin@DESKTOP-1723CM1:/mnt/d/XTRANS/…

计算机网络 备查

OSI 七层模型 七层模型协议各层实现的功能 简要 详细 TCP/IP协议 组成 1.传输层协议 TCP 2.网络层协议 IP 协议数据单元(PDU)和 封装 数据收发过程 数据发送过程 1. 2.终端用户生成数据 3.数据被分段,并加上TCP头 4.网络层添加IP地址信息…

React + 项目(从基础到实战) -- 第十期

目标 学会react 状态管理工具 使用redux管理用户状态 Context 跨层级传递,不像props层层传递类似于Vue的provide/inject用于:切换主题颜色,切换语言 useReducer useState 的替代方案 简化版的redux MobX 1. MobX 介绍 MobX 中文文档 声明式的修改数据 , 像vue state ac…

【算法基础实验】图论-UnionFind连通性检测之quick-union

Union-Find连通性检测之quick-union 理论基础 在图论和计算机科学中,Union-Find 或并查集是一种用于处理一组元素分成的多个不相交集合(即连通分量)的情况,并能快速回答这组元素中任意两个元素是否在同一集合中的问题。Union-Fi…

55.基于SpringBoot + Vue实现的前后端分离-旅游管理系统(项目 + 论文)

项目介绍 本站是一个B/S模式系统,采用SpringBoot Vue框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SpringBoot Vue技术的旅游管理系统设计与实现管理工作系统…

【Node.js工程师养成计划】之express框架

一、Express 官网:http://www.expressjs.com.cn express 是一个基于内置核心 http 模块的,一个第三方的包,专注于 web 服务器的构建。 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用&…