zoukankan      html  css  js  c++  java
  • java之static关键字

    static:

      1.翻译为“静态”

      2.所有static关键字修饰的都是类相关的,类级别的。

      3.所有static修饰的,都是采用“类名.”的方式访问。

      4.static修饰的变量: 静态变量

      5.static修饰的方法: 静态方法

    变量的分类:

      变量根据声明的位置进行划分:

        在方法体当中声明的变量叫做:局部变量

        在方法体外声明的变量叫做:成员变量

      成员变量又可分为:

        实例变量

        静态变量

     方法和变量是静态和非静态内存图是什么样子,看一下两幅图。

    当声明为静态变量的时候:
    public
    class Chinese { /** * 身份证号,唯一标识*/ public String idCard; /** * 姓名,一个人一份*/ public String name; /** * 国籍,加static的叫做静态变量 * 静态变量在类加载时初始化,不需要new对象,静态变量的空间就开辟出来了 * 静态变量存储在方法区*/ public static String country = "中国"; public Chinese(String idCard1,String name1){ idCard = idCard1; name = name1; } } -----------Statictest02.java------------------------------------------------------------ public class StaticTest02 { public static void main(String[] args) { /** * 访问中国人的国籍,静态变量应该使用类名.的方式访问*/ System.out.println(Chinese.country); Chinese c1 = new Chinese("1231456456456456","张三");
         System.out.println(c1.name);
         System.out.println(c1.idCard); Chinese c2
    = new Chinese("7897897896748564","李四");
        
    System.out.println(c2.name);
         System.out.println(c2.idCard);
    } }

    不是静态变量
    public class Chinese {
        /**
         * 身份证号,唯一标识*/
        public String idCard;
    
        /**
         * 姓名,一个人一份*/
        public String name;
    
        /**
         * 国籍*/
        public String country;
    
        public Chinese(String idCard1,String name1, String country1){
            idCard = idCard1;
            name = name1;
            country = country1;
        }
    }
    
    
    -----------------------------------------------------------------------
    public class StaticTest02 {
        public static void main(String[] args) {
    
            Chinese c1 = new Chinese("1231456456456456","张三","中国");
            System.out.println(c1.name);
            System.out.println(c1.idCard);
            System.out.println(c1.country);
            Chinese c2 = new Chinese("7897897896748564","李四","中国");
            System.out.println(c2.name);
            System.out.println(c2.idCard);
            System.out.println(c2.country);
        }
    }

     综上所述:什么时候用静态变量?

    如果这个类型的所有对象的某个属性值都是一样的,不建议定义为实例变量,浪费内存空间。建议定义为类级别特征,定义为静态变量,在方法区中只保留一份,节省内存开销。

     

    实例的:一定需要使用“引用.”来访问。

    静态的:建议使用“类名.”来访问,但使用“引用.”来访问也行(不建议这样使用)

        如果静态的使用“引用.”来访问会让程序员产生困惑,程序员以为是实例的。

    结论:空指针异常只有在什么情况下才会发生?

      只有在“空引用”访问“实例”相关的,都会出现空指针异常。

     综上所述:什么时候用静态方法

      当方法体当中,直接访问了实例变量,这个方法一定是实例变量。

      大部分情况下,如果是工具类的话,工具类当中的方法使用静态方法。

    静态代码块:

    /**
     * 1.使用static关键字可以定义:静态代码块
     * 2.什么是静态代码块,语法是什么?
     * static{
     *     java语句;
     *     java语句;
     *              }
     * 3.static静态代码块在什么时候执行呢?
     *      类加载时执行,并且只执行一次。
     *      静态代码块有这样的特征/特点
     * 4.注意:静态代码块在类加载时执行。并且在main方法执行之前执行。
     * 5.静态代码块一般是按照自上向下的顺序执行
     * 6.静态代码块有什么用?
     *      第一:静态代码块不是那么常用
     *      第二:静态代码块这种语法机制实际上是sun公司给我们java程序员的一个特殊的时刻,这个时机叫做:类加载时机
     * 
     * 具体的业务:
     *      项目经理说了,大家注意了,所有我们编写的程序中,只要是类加载了,请记录一下类加载的日志信息(那年那月那日几时几分几秒,那个类加载到
     *      了jvm当中)
     * 思考:这些记录日志的代码写到哪里呢?
     *      写到静态代码快当中*/
    public class StaticTest06 {
    
        //静态代码块(特殊的时机:类加载时机)
        static{
            System.out.println("A");
        }
        //一个类中可以编写多个静态代码块
        static{
            System.out.println("B");
        }
    
        public static void main(String[] args) {
            System.out.println("hello world");
        }
    
        static{
            System.out.println("C");
        }
    }

    结果:

    A
    B
    C
    hello world

    总结:方法执行顺序:

    第一:对于一个方法来说,方法体中的代码是有顺序的,遵循自上而下顺序执行。

    第二:静态代码块1和静态代码块2是有先后顺序的

    第三:静态代码块和静态变量是有先后顺序的。

  • 相关阅读:
    < java.util >-- Set接口
    Codeforces 627 A. XOR Equation (数学)
    Codeforces 161 B. Discounts (贪心)
    Codeforces 161 D. Distance in Tree (树dp)
    HDU 5534 Partial Tree (完全背包变形)
    HDU 5927 Auxiliary Set (dfs)
    Codeforces 27E. Number With The Given Amount Of Divisors (暴力)
    lght oj 1257
    Codeforces 219D. Choosing Capital for Treeland (树dp)
    Codeforces 479E. Riding in a Lift (dp + 前缀和优化)
  • 原文地址:https://www.cnblogs.com/peiminer/p/13645222.html
Copyright © 2011-2022 走看看