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

  • 相关阅读:
    python_django_分页
    python_django_中间件
    python_django_静态文件
    Django项目基础配置和基本使用
    python_django__验证码
    python_django_The requested URL /sunck/login/sunck/showmain/ was not found on this server.错误
    python_django_template_url反向解析
    python_django_template模块
    Andrew Ng机器学习算法入门(一):简介
    Vue.js 条件语句
  • 原文地址:https://www.cnblogs.com/damonzh/p/5501291.html
Copyright © 2011-2022 走看看