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

在看到标题之后,大家肯定会怀疑,我赵某人用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,谁在最后,谁说了算!

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

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

  1. java中静态变量,静态代码块,静态方法,实例变量,匿名代码块的加载顺序

    1. java中静态变量,静态代码块,静态方法,实例变量,匿名代码块 在Java中,使用{}括起来的代码称为代码块,代码块可以分为以下四种: (1)普通代码块:就是类中方法的方法体 public vo ...

  2. JAVA中的变量和常量

    第一节 JAVA中的关键字 java中的关键字有以下部分 第二节 认识Java中的标识符 标识符就是用于给 Java 程序中变量.类.方法等命名的符号. package com.imooc: publ ...

  3. java中的变量是原子的_Java原子变量

    概述 多个线程操作共享变量(Java堆内存上的数据)会带来bug,Java提供了锁机制(Lock)来管理多线程并发,比如synchronized,但是会带来额外的性能开销(线程阻塞,上下文切换等).为 ...

  4. java中原子变量AtomicInteger等用法

    在java中的变量在++等操作是不是原子操作,分为先加一,然后赋值,从而在多线程编码时需要加上synchronizeed,为了增加易用性,java当前提供了原子变量,当前的原子变量有AtomicBoo ...

  5. java中静态变量和静态方法分别有什么特点?

    java中静态变量和静态方法分别有什么特点? 悬赏分:0 - 解决时间:2006-4-10 10:28 提问者: vv_clear - 二级 最佳答案 为什么问了两次?再贴上另一篇 Thinking: ...

  6. 谈谈java中成员变量与成员方法继承的问题

    谈谈java中成员变量与成员方法继承的问题 关于成员变量和成员方法的的继承问题,我也可以做一个小测试,来看看结果. 首先我们先创建一个父类: 其次再创建一个子类,子类中要比父类中少一个成员方法: 这样 ...

  7. java中任何变量都可以被赋值为null,java中当给一个对象赋值为null时发生了什么...

    比如下面的代码 String[] arr = new String[10]; arr=null; 将arr这个引用置空,不指向任何对象. 上面new的那个数组对象,则没有任何引用指向它,垃圾回收器可以 ...

  8. java中实例变量指什么呢?

    转自: java中实例变量指什么呢? java中实例变量简介说明 在类的声明中,属性是用变量来表示的,我们将这种变量称之为实例变量,每个对象都为类维护着自己的一份实例变量 实例变量简介:       ...

  9. 【笔记】Java中使用变量的规则(使用变量,遵循就近原则)、成员变量和局部变量的区别

    文章目录 一.使用变量的规则 二.成员变量和局部变量的区别 一.使用变量的规则 最终输出的是"小黑正在努力学习" 使用变量,遵循就近原则 例:将上述代码敲一遍 Student部分 ...

最新文章

  1. Scons构建C++项目
  2. 谷歌发布最新看图说话模型,可实现零样本学习,多类型任务也能直接上手
  3. 你以为美国商业航天那么牛只是因为马斯克?更多原因在这里!
  4. 高斯用服务器能算chk文件么,教程(二十四)使用freqchk命令进行热力学校正
  5. Spring AOP根据JdbcTemplate方法名动态设置数据源
  6. 源服务器信息,软件源搭建
  7. AccountManagment
  8. s6 android 7.0 国行,三星S6电信版/S6 Edge国行版升级安卓7.0
  9. gRPC in ASP.NET Core 3.x - gRPC 消息定义
  10. maven的常用命令
  11. diskgenius单文件专业版_金蝶KIS专业版系列——系统工具六(业务套打工具)
  12. 为什么现在还有很多人喜欢在银行存定期?
  13. Lasso估计学习笔记(二)
  14. Docker零基础入门指南(一):Docker介绍
  15. Java、Java Web面试题(来源于MLDN、北方网)
  16. 西门子step7安装注册表删除_如何完全删除step 7
  17. 网络通信安全基础和OpenSSL
  18. 2020-09-07关皓
  19. 2021年计算机二级考试系统是哪个版本?
  20. 互联网(软件)公司项目管理软件调研报告

热门文章

  1. 给出TREE_INSERT过程的非递归版本(算法导论第三版12.3-1)
  2. Sorting It All Out (易错题+拓扑排序+有向图(判环+判有序)优先级)
  3. 第一讲 工作区和GOPATH
  4. 噪声与振动控制工程手册_声学分享客噪声与振动控制篇大型隔振工程案例介绍...
  5. exceptionhandler注解_SpringMVC 中 @ControllerAdvice 注解的三种使用场景!
  6. 数据结构-第九章 内部排序-知识点总结1
  7. 命令行操作mysql
  8. 2021牛客暑期多校训练营1 G Game of Swapping Numbers 思维 + 巧妙的转换
  9. Codeforces Round #614 (Div. 2) D. Aroma‘s Search 暴力 + 思维
  10. 【CF1215E】Marbles【状压DP】