zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    使用FolderBrowserDialog组件选择文件夹
    使用OpenFileDialog组件打开多个文
    使用OpenFileDialog组件打开对话框
    获取弹出对话框的相关返回值
    PAT 甲级 1139 First Contact (30 分)
    PAT 甲级 1139 First Contact (30 分)
    PAT 甲级 1138 Postorder Traversal (25 分)
    PAT 甲级 1138 Postorder Traversal (25 分)
    PAT 甲级 1137 Final Grading (25 分)
    PAT 甲级 1137 Final Grading (25 分)
  • 原文地址:https://www.cnblogs.com/damonzh/p/5501291.html
Copyright © 2011-2022 走看看