zoukankan      html  css  js  c++  java
  • 这是什么操作?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,谁在最后,谁说了算!

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

  • 相关阅读:
    安装oracle 使用vnc无法打开terminal,解决办法
    linux服务器配置本地yum仓库
    less css 框架介绍
    html的概念
    html
    WEB前端第三十八课——js类和对象,继承,设计模式
    WEB前端第三十七课——jsBOM操作-DataParse、jsEngine、性能、history、道岔、closure
    WEB前端第三十六课——jsBOM操作-window、timer
    WEB前端第三十五课——事件绑定应用案例
    WEB前端第三十四课——js事件对象this、event
  • 原文地址:https://www.cnblogs.com/a1111/p/13297054.html
Copyright © 2011-2022 走看看