课时13:声明static方法

简介: 课时13介绍了Static方法的声明与使用。Static方法可通过类名直接调用,无需实例化对象。其主要特点是可以访问静态属性和其他静态方法,但不能直接访问非静态成员。通过示例代码展示了如何定义和调用Static方法,并解释了Static方法与普通方法的区别及限制。例如,在静态方法中不能使用`this`关键字,因为静态方法不依赖于具体的对象实例。此外,非静态方法可以调用静态方法,反之则不行,除非通过类的实例来调用。Static方法适用于描述公共属性或避免实例化对象时的操作。

课时13:声明 Static 方法

 

摘要:本次分享的主题是声明 Static 方法。

 

Static 关键字可以用于定义方法。 Static 方法的主要特点在于,它可以直接通过类名称在没有实例化对象的情况下进行调用。Static 属性可以在没有实例化对象时通过类名称调用。同样, Static 方法也是如此。 Static 方法与普通方法的区别在于, Static 方法不需要实例化对象即可调用,这一点与 Static 属性相同。


例如,我们现在定义一个 Static 方法。我们需要定义一个方法,因为之前的代码没有进行封装,而封装是必要的。因此,我们现在需要对代码进行封装。


Class Person {  // 创建所有同一个国家的类
private string name ;
private int age ;
private statie string country = "中华民国”; // 国家 
public Person(String name,int age) {
this.name= name;
this.age = age ;
}
public static void setCountry(String c) { // static方法
this.country=c:
}
// setter、getter略
public string getInfo() {
return "姓名:"+ this.name + "、年龄:"+ this.age +"、国家
}
public class JavaDemo {
public static void main(String args[]) {
Person.setCountry("中华人民共和国"
Person per = new Person("张三",10);
System.out.println(per.getInfo());
}
}
}

1741156816096.jpg

1741156803017.jpg

封装之后,我们在过程中找到 Set 方法。关于 Set 方法中的 Country 参数,我们习惯的写法应该是 String Country ,并将 This . Country 设置为 Country 。但是现在不能这么做,我暂时将参数名改为 C ,后面会解释原因。


这是 Static 方法的一个重要特征。Static 方法可以通过类名称调用。因此可以这样写: Person . SetCountry ,这样 SetCountry 方法就被调用了。现在正常实例化对象并输出结果,结果应该与之前完全相同。

1741156855886.jpg

关于这一点, This 关键字稍后再讨论,这里不能添加。刚才只修改了后面的部分,却忘记了修改前面的部分,因此这次不要添加。我们将代码放在这里进行编译和执行,同学们可以观察结果是否一致,结果是一样的。因此我们实际上相当于调用了 Static 方法。


在整个操作过程中,是否与我之前所说的一样,没有实例化对象?完成之后,这个地方可以通过类名直接调用,这就是 Static 方法。但是在这个地方我们需要加以注意。


此时,对于我们的程序而言,方法就有了两种: Static 方法、非 Static 方法。这两种方法在调用上存在限制,Static 方法只允许调用 Static 属性或 Static 方法。

1741156840901.jpg

编译一下,这里显示无法从静态上下文中引用非静态变量 Name ,这是不允许的。再看下面, Get info 是 Face Static ?于是我们再次编译,同样出现从静态上下文中引用非静态方法 Get info 的错误。现在我们发现第一个过程成立,这里可能只能调用静态的内容。


第二个过程。非 Static 的方法允许调用 Static 属性或 Static 方法。这一点需要注意,Face Static ,调用一个名为 Set country 的方法,随便传入一个值xxx。于是我们将代码放在这里,再次编译并执行。是否修改成功?修改是不允许的。


我们需要讨论这个问题,这是语法行为的定义,但我们要思考一下,为什么会有这种定义?最重要的特征是所有 Static 定义的属性和方法都可以在没有实例化对象的情况下使用。而所有非 Static 定义的属性和方法,必须在有实例化对象的情况下才能使用。我们在 Static 中为什么不能使用 This ?什么是当前对象? Static 能在没有实例化对象的情况下访问吗?那么使用 This 是否会产生冲突?


但是反过来,我们在非 Static 中能否使用 This . Country ?因为Country 是 Static ? Static 本来就可以通过对象访问,所以这是它的使用限制。如果现在能够理解这个限制,那么对于之前的方法定义就可以得出新的结论。


最早讲解方法定义时强调过,当前定义的方法都是在主类中定义的,并且由主方法直接调用,方法格式: Public Static Void ,我们跟上 Print 、Out . Print 、在整个代码中跟上 M2D 到3。当时是在主方法中都加上了 Public Static 。现在这个地方是可以直接调用。

 

1741156885911.jpg

 

然而,我们现在需要解释的是,为什么在这个地方我们必须添加Static ,这是 Static 方法,这是什么非 Static 方法? Static 方法能直接调用非 Static 方法吗?

不能。

 

1741156894136.jpg

 

如果非要调用,可以在这儿通过对象来调用。因为我们知道只有实例化 Java Demo 为对象之后,才能调用普通方法。于是咱们编译再一次执行,对于这种操作形式,希望大家能够去记住。当然写代码时,是不是还要去考虑这个主位,严格来讲这个主位之中,我们不会写特别多的代码。

1741156908297.jpg

所以对于 Static ,我们现在至少对它有一个认识,可以说Static 定义的方法或者是属性都不是在设计代码编写之初所需要考虑的内容中,只有在回避实例化对象调用并且描述公共属性的情况下,才会考虑使用 Static 定义的方法或者是属性。


相关文章
|
前端开发
Antd中Table列表行默认包含修改及删除功能的封装
Antd中Table列表行默认包含修改及删除功能的封装
387 0
|
Kubernetes 容器 Perl
【kubernetes】解决:pvc 一直处于Terminating 无法删除的问题
【kubernetes】解决:pvc 一直处于Terminating 无法删除的问题
1582 0
|
NoSQL Linux Redis
|
11月前
|
JavaScript 数据管理 虚拟化
ArkTS List组件基础:掌握列表渲染与动态数据管理
在HarmonyOS应用开发中,ArkTS的List组件是构建动态列表视图的核心。本文深入探讨了List组件的基础,包括数据展示、性能优化和用户交互,以及如何在实际开发中应用这些知识,提升开发效率和应用性能。通过定义数据源、渲染列表项和动态数据管理,结合虚拟化列表和条件渲染等技术,帮助开发者构建高效、响应式的用户界面。
912 2
|
7月前
|
存储 SQL Java
Flink CDC + Hologres高性能数据同步优化实践
本文整理自阿里云高级技术专家胡一博老师在Flink Forward Asia 2024数据集成(二)专场的分享,主要内容包括:1. Hologres介绍:实时数据仓库,支持毫秒级写入和高QPS查询;2. 写入优化:通过改进缓冲队列、连接池和COPY模式提高吞吐量和降低延迟;3. 消费优化:优化离线场景和分区表的消费逻辑,提升性能和资源利用率;4. 未来展望:进一步简化用户操作,支持更多DDL操作及全增量消费。Hologres 3.0全新升级为一体化实时湖仓平台,提供多项新功能并降低使用成本。
560 1
Flink CDC + Hologres高性能数据同步优化实践
|
8月前
|
人工智能 大数据
阿里云云计算ACA、大数据ACA、人工智能ACA三门认证升级调整公告
阿里云云计算ACA、大数据ACA、人工智能ACA三门认证升级调整公告
|
7月前
|
Linux 虚拟化 Docker
Linux服务器部署docker windows
在当今软件开发中,Docker成为流行的虚拟化技术,支持在Linux服务器上运行Windows容器。流程包括:1) 安装Docker;2) 配置支持Windows容器;3) 获取Windows镜像;4) 运行Windows容器;5) 验证容器状态。通过这些步骤,你可以在Linux环境中顺利部署和管理Windows应用,提高开发和运维效率。
858 1
|
12月前
|
存储 安全 算法
Java面试题之Java集合面试题 50道(带答案)
这篇文章提供了50道Java集合框架的面试题及其答案,涵盖了集合的基础知识、底层数据结构、不同集合类的特点和用法,以及一些高级主题如并发集合的使用。
1036 1
Java面试题之Java集合面试题 50道(带答案)
|
11月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
998 2
|
Java 应用服务中间件 调度
Tomcat 线程池
Tomcat 线程池