static关键字学习

chatgpt/2023/9/27 7:22:39
  • static关键字用于共享同一份数据,在类里面,当成员变量使用了static关键字之后,这个变量就属于这个类,而不是单独属于某个对象,所有的这个类的实例对象的这个static关键字的属性都是同一份数据,在堆内存里面使用的是同一个变量地址,所以当任意一个实例对象改变了static关键字修饰的成员变量之后,其他所有实例对象的对应的属性值也会变,因为共享使用一个堆中的变量。
  • 不加static关键字的成员变量属于实例化后的对象,而加了static关键字之后,这个成员变量就不再独属于某个对象,而是属于整个类的,被所有实例化的对象共享,这时,可以使用类.成员属性来访问这个公共的成员变量,也可以使用对象.成员属性来访问,但是推荐使用前者
  • 加了static关键字的成员方法也是一样,属于整个类的方法,而不是独属于某一个对象,推荐使用类.成员方法的方式来调用这个成员方法
  • 注意:
  1. 非静态方法不能访问静态方法,只有静态方法才可以访问静态方法(静态方法是更高一级的跟main同级的方法,非静态方法找不到静态方法)
  2. java是基于c语言写的,所以代码的底层执行流程肯定还是自顶向下的,被调用的方法肯定在调用的方法之前,c中执行是从main函数开始,Java也是,Java中的main方法使用了static关键字提高了执行的优先级,而static关键字修饰的成员变量和成员函数是类层级的,跟main同级,其他方法是更低一级的。当程序执行main方法的时候,会执行main中的被调用的成员函数,根据自顶向下的原则,这个被调用的成员函数必须要是跟main同级并且在main之前被创建,这时候main函数才可以成功调用这个成员函数,否则会找不到这个函数。我们其实只需要将成员函数的等级提升到跟main同级别,也就是static类级别,Java中自动帮我们先创建非main方法的其他同级方法,后面才执行main方法调用这些方法。
  3. 静态方法和静态代码是等级最高的,甚至比构造方法的优先级还高,在构造方法执行之前就已经被执行了,并且静态方法只被执行唯一的一次。比如当创建两个对象的时候,其实只执行了类中的非main函数的静态代码一次,这个过程都是在main函数里面执行,main执行结束之后程序就结束了,而非静态代码可以重复执行。
  • static关键字的共享数据

    public class static1 {public static void main(String[] args) {test();}public static void test(){Student s=new Student("zs",18,"h111");System.out.println(s.getName()+s.getAge()+s.getRoom());Student s1=new Student("ls",19,"h222");System.out.println(s.getName()+s.getAge()+s.getRoom());System.out.println(s1.getName()+s1.getAge()+s1.getRoom());}
    }public class Student {
    //    属性设置为privateprivate String name;private int age;private static String room;//无参数构造public Student() {}//有参数构造public Student(String name, int age, String room) {this.name = name;this.age = age;this.room=room;}//getter方法public String getName() {return name;}public int getAge() {return age;}public static String getRoom() {return room;}//setter方法public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}public static void setRoom(String room) {Student.room = room;}
    }

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

HttpRunner自动化工具之实现参数化传递

参数化实现及重复执行 参数化测试:在接口测试中,为了实现不同组数据对同一个功能模块进行测试,需要准备多组测试数据对模块进行测试的过程。 在httprunner中可以通过如下方式实现参数化: 1、在YAML/JSON 中直接指定参数列表 2、…

vue中的require

vue中的require 一、基本概念二、具体演示1.引入json2.引入图片 三、require.context引入图片:引入json引入模块js:引入vue文件: 一、基本概念 require 是 node 中的一个方法,他的作用是 用于引入模块、 JSON、或本地静态文件。r…

SpringBoot临时属性设置

在Spring Boot中,可以通过设置临时属性来覆盖应用程序中定义的属性。这在某些情况下很有用,例如在命令行中指定配置参数或在测试环境中覆盖默认值。 你可以使用--(双破折号)语法来设置临时属性。以下是一些示例: 1. …

【【51单片机11.0592晶振红外遥控】】

51单片机11.0592晶振红外遥控 红外遥控,51单片机完结 这是初步实现的架构 怎么实现内部的详细逻辑 我们用状态机的方法 0状态时一个空闲状态 当它接收到下降沿开始计时然后转为1状态 1状态下 寻找start 或者repeat的信号 再来下降沿读出定时器的值 如果是start 那…

如何自学springboot+vue做一个小项目?然后参与开源项目!

如何自学springbootvue做一个小项目?然后参与开源项目! 最近在和几位小伙伴做基于springbootvue开源商城和库存管理系统,今天分享一下我们自学前后端开发然后参与开源的一些经验。希望大家都能通过编程来编写美好前程。 跟着视频去学 不建议…

HJ99 自守数+OR86N 返回小于N的质数个数

HJ99 自守数 自守数_牛客题霸_牛客网 (nowcoder.com) #include <iostream> #include<cmath> using namespace std; bool Ending_Same(int a) {int a_a a * a;if (a_a a)return true;int i 1;while (a_a ! 0 && a_a/ (int)pow(10, i)!0)//保证a*a有足够…

Redis与其他缓存解决方案(如Memcached)的区别是什么?

Redis和其他缓存解决方案&#xff08;如Memcached&#xff09;在设计理念、功能和特点上有一些区别&#xff0c;以下是它们的主要区别&#xff1a; 数据类型支持&#xff1a;Redis支持多种数据类型&#xff08;如字符串、哈希表、列表、集合、有序集合等&#xff09;&#xff0…

【数据分享】2000—2022年250米分辨率逐月归一化植被指数(NDVI)数据(免费获取/全国/分省/分市)

NDVI&#xff0c;全名为Normalized Difference Vegetation Index&#xff0c;中文名称为归一化植被指数。这个指数可以用来定性和定量评价植被覆盖及其生长活力&#xff0c;我们也可以简单地将它理解为体现植被密度和健康状况的一个指标。 之前我们给大家分享过来源于MOD13A3数…
推荐文章