java——this、封装、static修饰成员变量、成员方法

news2025/2/5 9:12:57

 

目录

 

☂️this的用法

1.访问当前对象的成员变量

2.访问当前对象的成员方法

3.调用当前对象的其他构造方法来简化代码

☂️封装

什么是封装?

访问修饰限定符

☂️static修饰成员变量

☂️static修饰成员方法


☂️this的用法

1.访问当前对象的成员变量

我们来看下面的两组代码:

一、

  class Date{
        public int year;
        public int month;
        public int day;
        Date(){

        }//构造方法
    public void setDate(int y,int m,int d){
            year = y;
            month = m;
            day = d;
    }
    public void show(){
        System.out.println(year+" 年 "+month+" 月 "+day+" 日 ");
    }
}
public class Test {

    public static void main(String[] args) {
        Date date = new Date();
        date.setDate(2023,07,16);
        date.show();

    }
}

运行截图:

二、

 class Date{
        public int year;
        public int month;
        public int day;
        Date(){

        }//构造方法
    public void setDate(int year,int month,int day){
            year = year;
            month = month;
            day = day;
    }
    public void show(){
        System.out.println(year+" 年 "+month+" 月 "+day+" 日 ");
    }
}
public class Test {

    public static void main(String[] args) {
        Date date = new Date();
        date.setDate(2023,07,16);
        date.show();

    }
}

运行截图:

👆仔细对比上面的代码,我们会发现setDate()方法的参数换了一下名称,第二个代码的赋值就失败了;这是因为编译的时候已经分不到等号左右两边的year、month、day哪一个是对象的,哪一个是形参的。

所以我们的代码要尽量习惯加上this,避免这种情况的发生   

👇参考下面代码:

  class Date{
        public int year;
        public int month;
        public int day;
        Date(){

        }//构造方法
    public void setDate(int year,int month,int day){
            this.year = year;
            this.month = month;
            this.day = day;
    }
    public void show(){
        System.out.println(this.year+" 年 "+this.month+" 月 "+this.day+" 日 ");
    }
}
public class Test {

    public static void main(String[] args) {
        Date date = new Date();
        date.setDate(2023,07,16);
        date.show();

    }
}

运行截图:

 加上this,赋值就成功了;

这个时候加上this表示当前对象,this.year表示访问当前对象的年属性;this.month表示访问当前对象的月属性;this.day表示访问当前对象的日属性;

2.访问当前对象的成员方法


    class Date{
        public int year;
        public int month;
        public int day;

        Date(){

        }//构造方法
    public void func1(int year,int month){
            this.year=year;
            this.month=month;

    }
    public void func2(int day){
         this.func1(2023,7);
         this.day=day;
    }
 public void show(){
        System.out.println(this.year+" 年 "+this.month+" 月 "+this.day+" 日 ");
    }
}

public class Test {

    public static void main(String[] args) {
        Date date = new Date();
        date.func2(28);
        date.show();
    }
}

在func2()中,this表示访问当前对象的成员方法

3.调用当前对象的其他构造方法来简化代码

  class Date{
        public int year;
        public int month;
        public int day;

       public Date(){
           System.out.println("这是一个无参的构造方法");
        }//构造方法
    public Date(int year,int month){
         this();   //调用类中的无参构造方法
         this.year=year;
         this.month=month;
        System.out.println("这是有两个参数的构造方法");

    } //构造方法的重载
}
public class Test {

    public static void main(String[] args) {
        Date date=new Date(2023,7);//创建一个对象的时候会调用构造方法
    }
}

运行截图:

当创建一个对象的时候,会调用对应的构造方法。上面创建对象的时候传了两个参数,所以调用的是带两个参数的构造方法。带两个参数的构造方法的第一个代码是this(),意思是调用的无参的构造方法,所以先输出的是“这是一个无参的构造方法”。

注意:互相调用的时候不能成环,不然的话会死循环

☂️封装

什么是封装?

就是将类内的一些细节隐藏起来,并且提供一些公开的接口让用户进行交互。

访问修饰限定符

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

 当age被private修饰的时候,age就被封装了起来。我们可以看到通过person1引用是无法访问age的。这个时候如果我们想修改age或者访问age这个属性就可以给它一个对外的接口。

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

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

class Test1 {
    public static void main(String[] args) {
        PerSon person1 = new PerSon();
        person1.name = "张三";
        person1.setAge(18);
        System.out.println(person1.name);
        System.out.println(person1.getAge());
    }
}

运行截图:

 

☂️static修饰成员变量

特性:

1.static修饰的成员变量,称作静态成员变量;

2.静态的成员变量是不属于某一个具体对象的,而是属于类,也叫做类变量;

3.静态成员变量可以通过类名访问,也可以通过对象访问,但是更推荐类名访问,因为它不属于对象;

4.类变量(静态成员变量)存储在方法区;

为什么说静态成员变量不属于某个具体的对象呢?我们来看下面的代码:

 

通过类名访问classroom的时候,很明显编译器会有提示; 而通过对象调用的时候则没有提示;

☂️static修饰成员方法

被static修饰的成员方法称为静态成员方法,是类方法,不是某个对象所特有的;

【静态方法特性】
1. 不属于某个具体的对象,是类方法
2. 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用,更推荐使用后者
3. 不能在静态方法中访问任何非静态成员变量(静态方法中不能使用this)

只要是非静态的成员都需要通过对象来访问,获取静态的成员变量或者设置静态的成员变量,此时的方法最好是静态的,否则你要是非静态的,你还得实例化对象,就好比脱裤子放屁。

public static String getClassRoom(){
       System.out.println(this);
       return classRoom;
} // 编译失败:Error:(35, 28) java: 无法从静态上下文中引用非静态变量 this

public static String getClassRoom(){
      age += 1;
      return classRoom;
} // 编译失败:Error:(35, 9) java: 无法从静态上下文中引用非静态变量 age

public static String getClassRoom(){
      doClass();
      return classRoom;
} // 编译报错:Error:(35, 9) java: 无法从静态上下文中引用非静态方法 doClass()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

容器运行时

容器运行时 Docker运行时Containerd运行时CRI 版本支持Containerd安装配置 systemd cgroup 驱动 CRI-O运行时Mirantis 容器运行时 目前k8s支持的几个常用的运行时 containerdCRI-ODocker EngineMirantis Container Runtime v1.24 之前的 Kubernetes 版本直接集成了 Docker Engi…

IDEA+spring boot+activiti+shiro+layui+Mysql权限管理系统源码

IDEAspring bootactivitishirolayuiMysql权限管理系统 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.主页3.用户管理4.部门管理5. 菜单管理6. 角色管理7. 字典管理8.定时任务9.操作日志10.生成管理 三、部分代码UserMapper.javaUserController.javaUser.java 四、其他获…

Python Flask构建微信小程序订餐系统 (七)

🔥 账号管理显示状态 🔥 账号管理选择状态后并显示 修改前 修改后 运行效果 🔥 账号管理执行账号的删除 🔥 修改前 修改后 这里使用的图标库 font awesome</

引入Vue的方式

1.cdn引入 <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…

竞赛管理系统实现自动化测试

目录 一、为竞赛管理系统设计测试用例 二、根据测试用例进行测试 登录页面测试 功能测试 界面测试 用户注册页面 功能测试 界面测试 竞赛信息列表页面测试 界面测试 添加竞赛信息页面测试 功能测试 界面测试 修改竞赛信息页面测试 功能测试 一、为竞赛管理…

Rollup 的作用、使用教程、支持 Vue、以及与 Webpack / Babel 的区别

一、前置知识 没接触过前端模块化概念的同学可先参考&#xff1a;JS & Node 模块化解释&#xff1a;AMD、UMD、CommonJS、 ESM 二、什么是 Rollup &#xff1f; Rollup 工具可以将代码转成不同模块&#xff0c;实现一套代码多端&#xff08;浏览器/Node&#xff09;引入…

SpringBoot的静态资源文件访问问题

一、采用默认的文件存放位置&#xff1a; Spring Boot 对静态资源映射提供了默认配置&#xff0c; 默认将 /** 所有访问映射到以下目录&#xff1a; classpath:/static classpath:/public classpath:/resources classpath:/META-INF/resources在如上路径的文件可以被直接访问…

Havoc!新的开源命令和控制C2框架

工具介绍 Havoc是一款现代化可扩展的后渗透命令控制框架&#xff0c;可作为Cobalt Strike和Brute Ratel等付费选项的替代方案。 关注【Hack分享吧】公众号&#xff0c;回复关键字【230618】获取下载链接 Havoc包含各种各样的模块&#xff0c;允许渗透测试人员&#xff08;和黑…

Rust 数据类型 之 结构体(Struct)

目录 结构体&#xff08;Struct&#xff09; 定义与声明 结构体定义 结构体实例 结构体分类 单元结构体&#xff08;Unit Struct&#xff09; 元组结构体&#xff08;Tuple Struct&#xff09; 具名结构体&#xff08;Named Struct&#xff09; 结构体嵌套 结构体方法…

华为云ROMA Connect 的智能集成 – 现代企业数字化转型的新利器

在当今数字信息智能化的时代&#xff0c;人工智能技术逐渐深入企业的生产流程和实践中。人工智能的应用成为现代企业数字化转型的新利器。华为云的ROMA Connect作为企业级的融合集成服务 EiPaaS平台&#xff0c;从今年开始也进入了人工智能技术&#xff0c;针对几个主要的企业集…

新一代iPaaS全域融合集成平台ROMA Connect HDC.Cloud 2023内容值得再读!

华为云下一代ROMA Connect HDC.Cloud 2023 精彩内容摘要&#xff1a; 7月9号 分论坛上嘉宾分享一站式融合集成平台解决的用户痛点、应用场景、新一代全域升级的新特性、以及伙伴分享案例干活 ROMA Connect 展台提供开发者体验全新升级版ROMA Connect的 AI智能集成 HDC.Cloud…

华为OD机试真题 Java 实现【战场索敌】【2023 B卷 100分】,深度优先搜索dfs算法,这眼花缭乱的,你这是“战场索鬼”吧?

目录 专栏导读一、题目描述二、输入描述三、输出描述四、深度优先搜索dfs五、解题思路六、Java算法源码七、效果展示1、输入2、输出3、说明4、如果增加目标敌人数量K为55、来&#xff0c;上强度 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于…

从零开始 Spring Cloud 4:Nacos

从零开始 Spring Cloud 4&#xff1a;Nacos 图源&#xff1a;laiketui.com Nacos 是 Alibaba 研发的用于 Spring Cloud Alibaba 的服务注册中心组件&#xff0c;符合 Spring Cloud 官方标准&#xff0c;同样被 Spring Cloud 官方接纳&#xff0c;所以我们可以在 Spring Cloud …

FPGA XDMA 中断模式实现 PCIE3.0 测速试验 提供工程源码和QT上位机源码

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案XDMA简介XDMA中断模式QT上位机及其源码 5、vivado工程详解6、上板调试验证7、福利&#xff1a;工程代码的获取 1、前言 PCIE&#xff08;PCI Express&#xff09;采用了目前业内流行的点对点串行连接&#xf…

同步和异步的区别

同步&#xff0c;可以理解为在执行完一个函数或方法之后&#xff0c;一直等待系统返回值或消息&#xff0c;这时程序是处于阻塞的&#xff0c;只有接收到返回的值或消息后才往下执行其他的命令&#xff1b; 异步&#xff0c;执行完函数或方法后&#xff0c;不必阻塞性地等待返回…

缓存服务使用总结

1、介绍 分布式缓存方案缓存服务搭建 2、分布式缓存方案&#xff08;重点掌握&#xff09; 2.1、什么是缓存 通常将数据从数据库中同步一份到内存中&#xff0c;客户端直接从内存中查询数据&#xff0c;减少了和数据库的交互次数&#xff0c;提高查询性能&#xff08;因为内…

什么是 WebSocket?Java 中如何实现 WebSocket?

什么是 WebSocket&#xff1f;Java 中如何实现 WebSocket&#xff1f; WebSocket 简介 WebSocket 是一种新型的网络协议&#xff0c;它允许客户端和服务器之间进行双向通信&#xff0c;可以实现实时数据交互。WebSocket 协议是基于 HTTP 协议的&#xff0c;使用标准的 TCP 连…

java项目之(超市管理系统ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的超市管理系统。技术交流和部署相关看文章末尾&#xff01; 目录 开发环境&#xff1a; 后端&#xff1a; 前端&#xff1a; 数据库&…

【MySQL系列】深入学习数据类型

「前言」文章内容大致是数据库的数据类型。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、数据类型分类二、数值类型2.1 tinyint类型2.2 bit类型2.3 小数类型2.3.1 float类型2.3.2 decimal类型 2.4 字符串类型2.4.1 char类型2.4.2 varchar类型2.4.3 …

高时空分辨率、高精度一体化预测技术之风、光、水能源自动化预测技术应用

能源是国民经济发展和人民生活必须的重要物质基础。在过去的200多年里&#xff0c;建立在煤炭、石油、天然气等化石燃料基础上的能源体系极大的推动了人类社会的发展。但是人类在使用化石燃料的同时&#xff0c;也带来了严重的环境污染和生态系统破坏。近年来&#xff0c;世界各…