这是什么操作?java中的变量竟然可以先使用后声明?

相信大家在看到标题之后,是疑惑的点进来看内容的。

在看到标题之后,大家肯定会怀疑,我赵某人用java写了好几年的代码了,还真就没见过java中的变量能先用在声明,今天就是进来看看你在没有声明变量的前提下是怎么用的!怎么用的!!!

各位,先别激动,能不能你先自己看,我们先来写个例子:

/*** 
*    
* 项目名称:BianChengXiGuan   
* 类名称:TestMain   
* 类描述:   静态变量
* 创建人:Mu Xiongxiong  
* 创建时间:2020-6-17 下午10:53:54   
* 修改人:Mu Xiongxiong   
* 修改时间:2020-6-17 下午10:53:54   
* 修改备注:   
* 个人博客:https://blog.csdn.net/qq_34137397
* 微信公众号:雄雄的小课堂
* @version    
**/
public class TestMain {public static int num = 10;static{num = 100;}public static void main(String[] args) {System.out.println(num);}}

这个例子很简单,输出结果我不说大家也都知道,是100,正确。那么我们稍微改一下上面的代码:

/*** 
*    
* 项目名称:BianChengXiGuan   
* 类名称:TestMain   
* 类描述:   静态变量
* 创建人:Mu Xiongxiong  
* 创建时间:2020-6-17 下午10:53:54   
* 修改人:Mu Xiongxiong   
* 修改时间:2020-6-17 下午10:53:54   
* 修改备注:   
* 个人博客:https://blog.csdn.net/qq_34137397
* 微信公众号:雄雄的小课堂
* @version    
**/
public class TestMain {static{num = 100;}public static int num = 10;public static void main(String[] args) {System.out.println(num);}}

注意了,我将声明num的和赋值num的代码替换了位置,你肯定会问:兄弟,你这代码能编译通过吗?即便你能编译通过,那输出来是多少???(这里可以看到num是先赋值后声明的)

这段代码可以编译通过,并且输出的num结果是10,是不是有点出乎意料了,不着急,要想把这里说通,我们还得回到静态变量的诞生说起,总所周知,静态变量是在我们第一次使用类(加载类)的时候别分配到数据区的,它在内存中之后一次拷贝,不会被分配多次,其后不管给它赋值多少遍,都是值在改变,而地址不变。

当类被加载时,首先会找到类中的所有静态声明,然后给它们分配空间,这个时候仅仅只是分配空间,并未赋值,此后,JVM就会根据静态赋值或者静态块的先后顺序去执行,到这里相信大家差不多就明白了。

回到我们的代码中,TestMain类被加载时,JVM首先在内存中开辟出了一块空间,并且将该地址传递给num,也就是执行的是public static int num,其次按照先后顺序,就该执行num = 100;了,接着往下执行,碰到了num = 10;显而易见,最后输出的结果就是num为10,谁在最后,谁说了算!

最后温馨提示一下大家,正常情况下,我们还是先声明在赋值比较靠谱点,免得本来想装个大神来着,结果出现了语料未及的结果,造成没必要的麻烦可就不值得了。
在这里插入图片描述

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

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

相关文章

重写(override / overwrite)

方法的重写(override / overwrite) 1.重写:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作 2.应用:重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法时,…

ssl1613-最短路径问题【图论,最短路径(还不明显?)】

题目 一个图,求两个点的最短路径 输入 第一行为一个整数n。 n行,两个整数x和y,一个点的坐标 一个整数m,表示图中线的个数。 m行,一条线,i,j,表示第i个点和第j个点之间有线。 最后一行&am…

jQuery 表格实现

<script type"text/javascript">$(function(){/******实现全选的操作****/$("#chks").click(function(){//获得当前框的勾选状态var flag $("#chks").prop("checked");$("input[namechk]").prop(checked,flag);})/*…

来吧学学.Net Core之项目文件简介及配置文件与IOC的使用

序言 在当前编程语言蓬勃发展与竞争的时期,对于我们.net从业者来说,.Net Core是风头正紧,势不可挡的.芸芸口水之中,不学习使用Core,你的圈内处境或许会渐渐的被边缘化.所以我们还是抽出一点点时间学学.net core吧. 那VS Code 可以编写,也可以调试Core本人也尝试啦下,但是感觉…

真正的问题应该在我身上……

渐渐地&#xff0c;学生已进入学习状态。在未测试之前&#xff0c;一直以为大家都学的很好&#xff0c;从课堂上的互动氛围就可以看得出来&#xff0c;一问问题&#xff0c;你一言他一语的……在测试之后&#xff0c;真是让我大跌眼镜&#xff0c;平时感觉表现很好的学生们&…

搞定计算机网络面试,看这篇就够了

转载自 搞定计算机网络面试&#xff0c;看这篇就够了 文章目录结构&#xff1a; 一 OSI与TCP/IP各层的结构与功能&#xff0c;都有哪些协议 运输层主要使用以下两种协议&#xff1a; UDP的主要特点&#xff1a; TCP的主要特点&#xff1a; 域名系统&#xff08;Domain Nam…

来吧学学.Net Core之登录认证与跨域资源使用

序言 学习core登录认证与跨域资源共享是越不过的砍,所以我在学习中同样也遇到啦这两个问题,今天我们就用示例来演示下使用下这2个技术点吧. 本篇主要内容如下: 1、展示一个登录认证的简单示例 2、跨域资源访问 3、跨域获取登录认证的用户信息 .Net Core使用身份认证(Auth…

ssl1760-商店选址问题【图论,最短路】

题目 给出一个城市的地图&#xff08;用邻接矩阵表示&#xff09;&#xff0c;商店设在一点&#xff0c;使各个地方到商店距离之和最短。 输入 第一行为n&#xff08;共有几个城市&#xff09;&#xff1b; N小于201 之后邻接矩阵 3 0 3 1 3 0 2 1 2 0 输出 最短路径…

JSP 获得服务器时间和浏览器时间

发布项目到服务器并访问 创建Web项目&#xff0c;开发静态页面 部署到服务器Tomcat 启动服务器Tomcat 不同用户通过浏览器来访问Web项目 Web项目和Java项目的区别 Web项目需要JavaEE的类库 Web项目中还可以存放静态网页和动态网页 开发目录和部署目录的区别 开发目录&…

如果要你选择某读书APP的图标,你会选择哪一个?

声明&#xff1a;介于尊重每位同学的劳动成果&#xff0c;故本文所有广告收入、赞赏均会均分给同学们&#xff01;最近学到了平面设计基础&#xff0c;于是让同学们用所学知识以“读书”为主题&#xff0c;原创了各式各样的图标&#xff0c;也许屏幕前的你只是轻轻的一划而过&a…

从理论知识到落地能力,你欠缺了什么?

转载自 从理论知识到落地能力&#xff0c;你欠缺了什么&#xff1f; 本文是一个理论过度到实践的典型案例&#xff0c;借助程序员经常遇到的一个问题——网络为什么不通&#xff0c;来具体说明怎么将书本上的死知识真正变成我们解决问题的能力。 大学学到的基本概念 我相信…

三大特性之多态性

1.理解多态性&#xff1a;可以理解为一个事物的多种形态。 2.何为多态性&#xff1a; 对象的多态性&#xff1a;父类的引用指向子类的对象&#xff08;或子类的对象赋给父类的引用&#xff09; 3.多态的使用&#xff1a;虚拟方法调用 有了对象的多态性以后&#xff0c;我们在编…

在这里,我们为您绘制了专属海报,请您查收!

树叶在空中飘荡&#xff0c;谱写着一曲感恩的乐章&#xff0c;那是大树对滋养它的大地的感恩;白云在蔚蓝的天空中飘荡&#xff0c;绘画着那一幅幅感人的画面&#xff0c;那是白云对哺育它的蓝天的感恩。我们沐浴着爱的阳光长大&#xff0c;我们滋润着人间的真情成长&#xff0c…

ssl1761-城市问题【图论,最短路,Dijkstra】

题目 一个图&#xff0c;输出从k点到每个点的最短路 输入 第一行有两个整数n和k&#xff0c;中间用空格隔开&#xff1b;以下是一个NxN的矩阵&#xff0c;表示点间的距离。 3 1 0 3 1 3 0 2 1 2 0 输出 输出点k到各点的距离 3 0 2 解题思路 用Dijkstra算法&#xff…

10分钟就能学会的.NET Core配置

.NET Core为我们提供了一套用于配置的API&#xff0c;它为程序提供了运行时从文件、命令行参数、环境变量等读取配置的方法。配置都是键值对的形式&#xff0c;并且支持嵌套&#xff0c;.NET Core还内建了从配置反序列化为POCO对象的支持。 目前支持以下配置Provider&#xff…

String 使用不当可能导致内存泄露

转载自 String 使用不当可能导致内存泄露 String是Java中一个比较基础的类&#xff0c;每一个开发人员都会经常接触到。而且&#xff0c;String也是面试中经常会考的知识点。String有很多方法&#xff0c;有些方法比较常用&#xff0c;有些方法不太常用。 今天介绍一个Strin…

instanceof关键字

instanceof关键字的使用 a instanceof A:判断对象a是否是类A的实例。如果是&#xff0c;返回true&#xff1b;如果不是&#xff0c;返回false。 使用情境&#xff1a;为了避免在向下转型时出现ClassCastException的异常&#xff0c;我们在向下转型之前&#xff0c;先 进行ins…

王宝兴同学谈学习!

对于学习&#xff0c;我认为心态很重要。只要我们明白就应做什么&#xff0c;此刻需要做什么&#xff0c;才能不断地向前迈进&#xff0c;直至终点。不要怕累。其实谁都一样&#xff0c;学习很累&#xff0c;可这个累只是暂时的。只要坚持下去&#xff0c;努力下去&#xff0c;…

ssl1614-医院设置【图论,最短路】

题目 一个像树一样的无向图&#xff0c;每个点有个值&#xff0c;每条边权值都是1&#xff0c;然后 若医院建在&#xff1a;   1处&#xff0c;则距离和4122*202*40136   3处&#xff0c;则距离和4*213204081 要求距离和最小 输入 第一行一个整数n&#xff0c;表示…

.NET Core运行时和基础类库性能提升

微软宣布改进了.NET Core运行时和基础类库的性能。虽然没有像改进ASP.NET Core的性能那样大肆宣传&#xff0c;但这些改进同样重要。 其中&#xff0c;以下10个方面的变化比较显著&#xff1a;集合、LINQ、压缩、加密、数学运算、序列化、文本处理、文件I/O、网络和并发。至于…