zoukankan      html  css  js  c++  java
  • java基础之static(静态)

    静态的属性、方法等属于类而不是对象。

    静态的方法能够由类直接调用,不须要将类实例化。

    本篇主要说明:1、态的代码、成员变量要比构造方法先运行。


    2、

    子类的构造方法会默认去调用父类的不带參数的构造方法,假设父类不提供不带參数的构造方法,则子类的构造方法要显示使用super(param),去调用父类的带參数的构造方法

    下面代码,能够将凝视掉的内容放开,或增改參数类型、參数定义的位置等,然后运行main看看打印结果,就会更加明确:静态的代码(块)、成员变量要比构造方法先运行。

    /**
     * author Ding Chengyun
     * 2014-2-23
     */
    package test;
    
    /**
     * @author Ding Chengyun
     * 2014-2-23
     */
    public class StaticTest {
    	private static StaticTest instance = new StaticTest();
    	public static int i;
    	public static int j = 0;
    	private StaticTest() {
    //		System.out.println("static constract");
    		i++;
    		j++;
    	}
    	
    //	static {
    //		System.out.println("static block");
    //		i = 2;
    //		j = 3;
    //	}
    	public static StaticTest getInstance() {
    		return instance;
    	}
    	public static void main(String[] args) {
    
    		StaticTest st = StaticTest.getInstance();
    		System.out.println(st.i + "," + st.j);
    		
    		//问:输出结果是什么
    		//答:输出结果是1,0.由于java静态成员变量的载入顺序是从类的開始从上到下顺序载入的。
    		//从main方法開始,然后运行到第一行代码private static StaticTest instance = new StaticTest();
    		//此时须要调用构造方法,在构造方法中给两个变量分别++。对于int类型的变量,默认初始化值都为0,因此,构造方法运行完成。i,j的值都为1
    		//继续运行到第二行代码public static int i;由于构造方法已经赋值过了。此处不再赋值操作。i=1
    		//运行第三行代码public static int j = 0;此处显示的给j赋值为0。因此覆盖了构造方法中的赋值1。此时,j=0.
    		//因此运行完成main方法,结果输出 1,0
    		
    		//同理,假设将代码的书写顺序进行变化将public static int i;		public static int j = 0;放到
    		//private static StaticTest instance = new StaticTest();之前。那么运行结果将会发生变化,
    		//以此类推,结果输出将是1,1
    		
    		//假设添加一段静态代码块,如上被凝视的代码,运行结果类推,应为2,3,由于静态代码最后运行的是静态代码块。
    		//可是假设将静态代码块放到最上面、两句变量定义之后等不同位置,运行结果都会发生变化。
    		//然则,基本原则是不变的:静态成员变量运行顺序是从类的開始从上往下运行。
    	}
    
    }
    
    
    
    /**
     * author Ding Chengyun
     * 2014-2-23
     */
    package test;
    
    /**
     * @author Ding Chengyun
     * 2014-2-23
     */
    public class OrderStaticTest {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		new Childs();//问题:输出什么?
    //		parent block
    //		child block 2
    //		child block 1
    //		parent constract
    //		child constract
    		
    	}
    
    }
    
    class Parents {
    	static String name = "hello";
    	public Parents() {
    		System.out.println("parent constract");
    	}
    	static {
    		System.out.println("parent block");
    	}
    	
    }
    
    class Childs extends Parents{
    	static String childName = "world";
    	public Childs() {
    		System.out.println("child constract");
    	}
    	static {
    		System.out.println("child block 2");
    	}
    	static {
    		System.out.println("child block 1");
    	}
    	
    	
    }

    
    
    
       
    
  • 相关阅读:
    mysql sql的分类、运算符、常用的数据类型
    mysql 03章_完整性、约束
    java 在数组{1,2,3,4,6,7,8,9,10}中插入一个数5,使其插入完成后仍然有序
    mysql 数据库基本命令
    java 迷你DVD管理器
    15.Request对象的主要方法有哪些?
    get和post的区别?
    什么情况下调用doGet()和doPost()?
    spring的作用
    分享Bromon的blog上对IoC与DI浅显易懂的讲解
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/5095270.html
Copyright © 2011-2022 走看看