当前位置: 首页 > news >正文

Java学习之旅第二季-6:static关键字与this关键字

Java中有两个关键字,一个是static,与类有关;一个是this,与实例有关。

6.1 static关键字

static表示静态,在Java中可以用于修饰属性、方法、代码块,内部类等,还可以用于静态导入。本小节主要介绍它修饰属性及方法的意义与用法。

被static修饰的成员称为类成员(Class Member),否则称为实例成员(Instance Member),之前我们声明的属性与方法都是实例成员,分别称作实例属性或变量/实例方法。

下面按照它的使用场景分别介绍下它的作用

修饰属性

在声明类的属性,可以使用static关键字修饰,用于表示该属性是属于类而不是实例的。

 public class Static {static int num1;
}

在Static类中声明了一个静态属性 num1,除了这个修饰符外,还可以使用其他修饰符(public、final等)

使用它的时候,直接使用类加上点运算符就可以访问到,无需使用实例后的减运算符;如果是访问同一个类中的静态属性,就可以省略类名。

 int num2 = Static.num1;

当然,如果使用对象访问静态属性也是可行的,只不过开发中不建议使用实例来访问静态属性。

除了使用上的差异,在数据共享方面也有很大不同,实例变量的值是与每个实例密切相关的,换句话说,每个实例拥有自己的属性值。但是对于类的静态属性来说,它在整个JVM中是独一无二的,是全局共享的,属于"全局变量"。这意味这我们如果在一个类中修改了某个类的静态属性值,那么在任何时候任何类中访问这个类的静态属性,其值是会更新的。

修饰方法

同样的,static 还可以修饰方法,我们最先常见的静态方法是 main 方法。main 方法被声明为静态的,是因为当程序开始时,它必须由 JVM 调用。

除了main方法外,其他静态方法在调用时也是直接使用类加点运算符,比如:

public class Static {public static void method(){// 这是静态方法的方法体}
}

在main 方法中调用:

static void main() {Static.method();
}

由于static主要是与类相关,访问其修饰的成员时无需创建对象,只要类被加载就可以,所以静态方法中不能直接访问实例变量。如下的代码就存在语法问题:

public class Static { String s="实例变量";public static void method(){System.out.println(s);       // 语法错误}
}

如果非要访问实例变量,则需要先创建其所在类的实例,比如:

public class Static {String s = "实例变量";public static void method() {Static o = new Static();System.out.println(o.s);}
}

总结下,实例方法与静态方法访问各种形式的属性或方法时的规则,下表中,第一列是访问方,第一行是被访问方,交叉单元格是规则:

本类实例属性/方法其他类实例属性/方法本类静态属性/方法其他类静态属性/方法
实例方法直接访问实例加点运算符直接访问类加点运算符
静态方法实例加点运算符实例加点运算符直接访问类加点运算符

6.2 this关键字

this关键字在使用时可以用于访问本类的实例成员,运行时表示当前运行的实例。

它有两个使用场景:

  • 用于非静态方法中,由于它运行时表示当前实例,在静态方法中也不能使用this
  • 用于构造方法中

本小节主要介绍用于普通的非静态方法中,下面的例子演示了典型的场景:

public class ThisDemo {String name = "Laotan";           // 声明成员变量 name// 为属性name赋值public void setName(String name) {this.name = name;}public void printName() {String name = "老谭";           // 声明局部变量 nameSystem.out.println(name);      // 访问的是局部变量 nameSystem.out.println(this.name); // 访问的是成员变量 name}
}

上面的类中,有两个方法访问了唯一的属性name,第一个方法setName,其作用是将其参数的值赋值给类的属性,但是该方法的参数名是name,正好与类的属性name同名,如果在方法体中直接使用name访问到的是局部变量name,所以在name前加上this作为限定,这样就能将参数name赋值到类的属性name。

第二个方法中,声明了局部变量name,在第10行直接输出name,其实是输出它前面一行声明的局部变量。为了能访问到本类的属性name,就在name前加上this作为限定,这样第11行就能顺利访问到第2行的name了。

6.3 小结

本小节介绍了Java中static和this两个关键字的使用。static修饰类成员(属性、方法等),属于类而非实例,可直接通过类名访问;this指代当前实例,用于访问实例成员或解决变量名冲突。同时详细说明了static修饰属性(全局共享)和方法的规则,以及this在区分局部变量与实例变量时的应用场景,并对比了实例方法与静态方法访问成员时的不同规则。

http://www.dtcms.com/a/445729.html

相关文章:

  • 高校健康驿站建设指引妖精直播
  • 违规通知功能修改说明
  • SOFA 架构--01--简介
  • 家具网站首页模板郑州销售网站
  • 如何将Spring Boot 2接口改造为MCP服务,供大模型调用!
  • DC-DC电源芯片解读:RK860
  • 从零开始的C++学习生活 3:类和对象(中)
  • 做网站的技术员包装设计概念
  • 【深度学习02】TensorBoard 基础与 torchvision 图像变换工具详解(附代码演示)
  • k8s中Pod和Node的故事(1):过滤、打分、亲和性和拓扑分布
  • springboot自助甜品网站的设计与实现(代码+数据库+LW)
  • 网站建设业动态wordpress出现404
  • Vue3组件通信8大方式详解
  • LeetCode 刷题【100. 相同的树、101. 对称二叉树、102. 二叉树的层序遍历】
  • Go基础:Go语言应用的各种部署
  • 团购网站 seo电商网站怎么做
  • 无Dockerfile构建:云原生部署新姿势
  • 深入解析 IDM 插件开发挑战赛:技术要点与实践指南
  • 颜群JVM【03】类的初始化
  • 达梦数据库常用初始化参数与客户端工具使用
  • 命令行安装 MySQL 8.4.6
  • 数据库--数据库约束和表的设计
  • [Windows] 磁盘映像管理工具:WimTool v1.7.2025.1001
  • 公司自己做网站晋城企业网站建设价格
  • 【SpringCloud(1)】初识微服务架构:创建一个简单的微服务;java与Spring与微服务;初入RestTemplate
  • leetcode 79 单词搜索
  • 站长之家官网查询电子商务网站建设与实践上机指导
  • 二叉树实战笔记:结构、遍历、接口与 OJ 实战
  • 哈尔滨php网站开发公司设置网站默认首页
  • 华为OD机试C卷 - 分披萨 - 贪心 DFS - (Java C++ JavaScript Python)