• Java-static关键字详解


    从学习Java开始,学习static关键字相关已有多次,但还是未能明确区分static在不同地方的作用,以及被修饰的内容在JVM中内存的分配,还有程序执行时的加载过程。
    所以在此从到到尾总结下Java中static的使用。

    包括以下内容:

    修饰变量、方法

    1. 使用

    static修饰能够与变量、方法一起使用,表示“静态”的。

    静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以static修饰的成员又称作类变量和类方法。静态变量与实例变量不同,实例变量总是通过对象来访问,因为它们的值在对象和对象之间有所不同。

    public class Demo {
        static int i = 10;
        int j;
        Demo() {
            this.j = 20;
        }
        public static void main(String[] args) {
            System.out.println("类变量 i=" + Demo.i);
            Demo obj = new Demo();
            System.out.println("实例变量 j=" + obj.j);
        }
    }
    

    运行结果:

    类变量 i=10
    实例变量 j=20
    

    2. static的内存分配

    静态变量属于类,不属于任何独立的对象,所以无需创建类的实例就可以访问静态变量。之所以会产生这样的结果,是因为编译器只为整个类创建了一个静态变量的副本,也就是只分配一个内存空间,虽然有多个实例,但这些实例共享该内存。实例变量则不同,每创建一个对象,都会分配一次内存空间,不同变量的内存相互独立,互不影响,改变 a 对象的实例变量不会影响 b 对象。 ```java public class Demo { static int i; int j; public static void main(String[] args) { Demo obj1 = new Demo(); obj1.i = 10; obj1.j = 20;
        Demo obj2 = new Demo();
       
        System.out.println("obj1.i=" + obj1.i + ", obj1.j=" + obj1.j);
        System.out.println("obj2.i=" + obj2.i + ", obj2.j=" + obj2.j);
    }
    

    }

    **静态变量虽然也可以通过对象来访问,但是不被提倡,编译器也会产生警告。**
    
    <h2 id="4">static静态代码块</h2>
    static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。例如:
    ```java
    public class Test5 {    
    	private static int a;    
    	private int b;    
        
    	static{    
    		Test5.a=3;    
    		System.out.println(a);    
    		Test5 t=new Test5();    
    		t.f();    
    		t.b=1000;    
    		System.out.println(t.b);    
    	}    
    	static{    
    		Test5.a=4;    
    		System.out.println(a);    
    	}    
    	public static void main(String[] args) {    
    	// TODO 自动生成方法存根    
    	}    
    	static{    
    		Test5.a=5;    
    		System.out.println(a);    
    	}    
    	public void f(){    
    		System.out.println("hhahhahah");    
    	}    
    }
    

    运行结果:

    3 
    hhahhahah 
    1000 
    4 
    5
    

    利用静态代码块可以对一些static变量进行赋值,最后再看一眼这些例子,都一个static的main方法,这样JVM在运行main方法的时候可以直接调用而不用创建实例。

    参考链接:

    http://www.weixueyuan.net/view/6003.html
    http://developer.51cto.com/art/201204/332155.htm

  • 相关阅读:
    [读书笔记]-技术学习-微服务架构与实践
    [文章转载]-Java后端,应该日常翻看的中文技术网站 -江南白衣
    [文章转载]-我的Java后端书架-江南白衣
    正则表达式有多强大一看便知!
    微信小程序支付功能完整流程
    判断字符串是否合法(1)
    ES6新增常用方法
    JS求一个字符串在另一个字符串中出现的次数
    根据对象的某个属性排序
    数组去除重复值的四种超简便方法
  • 原文地址:https://www.cnblogs.com/damonzh/p/5501291.html
Copyright © 2020-2023  润新知