首页 > 其他分享 >对Static访问规则的理解

对Static访问规则的理解

时间:2023-02-25 21:23:24浏览次数:30  
标签:访问 static 内存 Student 规则 修饰 Static public 加载

  • 代码层面理解
  • 内存层面理解

Static修饰的内容主要有以下3种访问规则:

代码层面理解

  • 看下面一段代码
package Test;

public class Student {
    public String name;
    public int age;
    public String address;
    public Student(){};
    
    public void show (){
        System.out.println("姓名:"+this.name +" 年龄:"+this.age +" 地址" + this.address);
    }
}

以上是Student类中一段很常见的代码,其中this表示调用者的地址,表明现在的变量表示的是成员变量,可以避免和局部变量混淆

其实如果从代码的角度来说其实这是不合适的,为什么this作为调用者的地址不进行传参到函数中就可以随便使用了?其实在这里java把调用者的地址隐形得传递了,只是没有写在参数列表中


如上图所示,我们在方法中加上Student this我们的代码并不会报错,但是这个this我们在调用的时候不能手动复制,在调用的时候由JVM统一赋值

我们将方法改为静态方法:

可以发现代码在语法层面将会直接报错,说明java在设计的时候就不允许将this传入其中

内存层面的理解

我们的代码要先加载到内存中才会被执行,同样我们的程序在执行时需要先被加载,而static修饰的内容和非static修饰的内容执行顺序是有差异的

程序的加载是以类为单位进行的,我们的类是当被用到才会被加载,并且只会被加载一次。当我们的类被加载时static修饰的变量和方法会随着类的加载一同被加载到内存中,此时如果我们没有创建对象,我们的非static 修饰的内容是不存在的


在上面的图面中,当我们要使用Student类时,Student类的字节码文件会被加载到方法取中,并且static修饰的变量会被加载到内存中并被初始化,static修饰的方法也会被加载的内存中。当我们用类名调用method方法,method方法里面又调用name变量,此时我们还没有创建对象,所有并没有name,所有此时程序将会报错

对规则的解释
1.静态方法在访问的时候可以没有对象,但是静态的变量和方法一定已经被加载到内存中了
2.当非静态方法访问的时候,对象和静态的方法和变量已经在内存中存在了
3.静态方法被调用的时候对象可能不存在

标签:访问,static,内存,Student,规则,修饰,Static,public,加载
From: https://www.cnblogs.com/swtaa/p/17155293.html

相关文章

  • C++函数名修饰规则
    C++函数名修饰规则这是啥函数的名字修饰(DecoratedName)就是编译器在编译期间创建的一个字符串。用来指明函数的定义或原型。修饰规则C++的修饰规则为“?+函数名+标......
  • calc()语法规则
    1、calc()中的参数是一个计算公式这个计算公式把计算宽度和数值的任务扔给不同尺寸下的浏览器,让页面能够自己得出宽度或数值的结论,这些计算公式也都是很简单的加()减(-)......
  • Nginx 前后端动态路径访问配置
    部分场景下一台测试服务器上部署多个前后端应用,需要多次更改nginx配置文件,如何配置一个即可动态访问?这里记录一下nginx正则表达式方式配置动态路径目录​​场景说明​​​......
  • 用规则来搭建团队:写周报不一定是坏事
    你好,我是Smile,一位有二十年工作经验的技术专家。今天我会结合我的经历,和你聊聊搭建技术团队这个话题。众所周知,技术团队很大程度上决定了一个公司业务的生命力和生命周期,因......
  • 【Azure 应用服务】应用代码中需要使用客户端证书访问服务接口,部署在应用服务后报错不
    问题描述在应用中,需要访问另一个服务接口,这个接口需要使用客户端证书进行认证。在代码中使用System.Security.Cryptography.X509Certificates加载Window系统中 CurrentU......
  • Joomla未授权访问漏洞(CVE-2023-23752)
    漏洞简介​在Joomla!版本为4.0.0到4.2.7中发现了一个漏洞,在Joomla受影响的版本中由于对Web服务端点的访问限制不当,远程攻击者可以绕过安全限制获得Web应用程......
  • 纯新手教程:国内用户3分钟快速搭建网络环境访问chatgpt教程
    访问chatgpt其实很简单,但是由于chatgpt官方是禁止中国用户使用的,所以用本地环境去上chatgpt很有可能会被拉黑,这里小编提供一个更简单稳定的办法访问chatgpt。1、首先购买一......
  • 阿里云中配置安全组规则,添加端口号(windows server)
           ......
  • k8s-授权apiserver访问kubelet
    本文章是 k8s二进制高可用集群部署 的分支。详细步骤请参考目录。应用场景:例如kubectllogscat>apiserver-to-kubelet-rbac.yaml<<EOFapiVersion:rbac.authoriz......
  • MySQL登录,访问,退出操作
    查看MySQL的安装结果1)安装了WindowsService:MySQL80,并且已经启动。 2)安装了MySQL软件。安装位置为:C:\ProgramFiles\MySQL。 (MySQL文件下放的是软件的内容)3)安......