• Java程序员的日常 —— static的用法讲解实践


    之前文章说过Java中static的作用,有朋友想看个例子。于是便抽空写了个小栗子

    代码

    package xing.test.thinking.chap5;
    class A{
    	public A() {
    		System.out.println("A constructor");
    	}
    }
    
    class VarTest{
    	static A a = new A();
    	public static int b = 0;
    	public int c = 0;
    	static{
    		System.out.println("VarTest static");
    	}
    	public VarTest() {
    		System.out.println("VarTest constructor");
    	}
    	public static void test(){
    		System.out.println("in static test func");
    	}
    }
    public class StaticTest {
    	public static void main(String[] args) {
    		System.out.println("start testing!");
    		System.out.println("如果不new VarTest或者使用VarTest的静态内容,就不会触发VarTest静态块的执行");
    		try {
    			Thread.sleep(5000);
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    		VarTest.test();//也会触发静态块的执行
    		
    		VarTest testa = new VarTest();
    		VarTest testb = new VarTest();
    		System.out.println("testa.b: "+testa.b);
    		System.out.println("testb.b: "+testb.b);
    		System.out.println("testa.c: "+testa.c);
    		System.out.println("testb.c: "+testb.c);
    		//如果修改b属性的值,所有对象的内容都会改变
    		testa.b = 3;
    		System.out.println("testa.b: "+testa.b);
    		System.out.println("testb.b: "+testb.b);
    	}
    }
    
    
    

    执行结果

    start testing!
    如果不new VarTest或者使用VarTest的静态内容,就不会触发VarTest静态块的执行
    A constructor
    VarTest static
    in static test func
    VarTest constructor
    VarTest constructor
    testa.b: 0
    testb.b: 0
    testa.c: 0
    testb.c: 0
    testa.b: 3
    testb.b: 3
    

    static修饰的变量

    首先先来说说静态修饰的变量,使用static修饰的变量会有两个效果:

    • 第一,就是可以通过类直接访问这个对象,而不需要创建对象
    • 第二,就是所有的创建的对象,都指向同一份对象,也就是这个静态对象是所有的类对象共享的。因此修改它的值,相当于修改了所有对象的变量。

    应用场景

    通常用于存储类公用的属性,如logger。

    static修饰的方法

    静态修饰的方法,可以直接通过类来使用。如上面的VarTest的test方法,直接基于Class就可以访问。

    应用场景

    通常用于编写工具类方法,如FileUtil、BeanUtil等。

    static块

    static另一个应用场景就是写静态块,如上面的static{}。这部分静态块会在第一次加载使用类的时候执行一次,仅仅会执行一次!
    加载的方式有两种,一种是new对象;另一种就是访问类的静态内容。
    如上面的例子中,就是访问了类的静态方法。

    应用场景

    这种静态块一般用于某些线程池或者连接池的初始化,比如JDBC连接池。

    关于属性的初始化

    在Java中都是属性先进行初始化,然后再执行构造器方法!

  • 相关阅读:
    用对象模式实现QTP的远程调用
    Python 常用类库
    User32.dll 函数的相关方法整理
    python ConfigParser – 配置文件解析
    python 中的 __init__()解释
    Access to the database file is not allowed. [ File name = ***\DataBase.sdf
    在遗忘中成长
    在MVC3里如何关闭Form标签
    javascript 中写cookie
    .NET之死和观念的力量【】
  • 原文地址:https://www.cnblogs.com/xing901022/p/5493774.html
Copyright © 2020-2023  润新知