• static关键字(pass)


    静态变量和静态方法

    1. 修饰变量,变量叫静态变量,表示变量是类变量,不是实例变量,所有实例共享这一个变量。
    2. 修饰方法,方法叫静态方法,表示方法是类方法,不是实例方法,可以用类名.方法名直接调用,也可以实例化一个对象来调用。

      静态方法和静态变量都是类的静态资源,是类实例之间共享的。静态资源是类初始化的时候加载的,而非静态资源是实例初始化也就是new一个对象的时候加载的。所以:

    1. 静态方法不能引用非静态资源,因为静态方法调用时非静态资源有可能还没加载。
    2. 静态方法可以引用其它静态资源。
    3. 非静态方法可以引用静态资源,因为非静态资源调用时静态资源已经加载好了。

    静态块

      静态块和静态变量/静态方法一样,也是在类初始化的时候执行,且只执行一次。静态块有三个需要注意的地方:

    1. 静态资源的加载顺序是严格按照静态资源的定义顺序来加载的。
    2. 静态代码块对定义在它之后的变量,只能赋值,不能访问。
    3. 在有继承关系的父子类中,静态代码块执行顺序是父类静态代码块先,子类静态代码块后,且只执行一次。

    示例1:

    package com.basic;
    
    public class StaticBlockTest {
    
        public static int a = test();
        static {
            System.out.println("second");
        }
        
        static {
            System.out.println("first");
        }
        
        static int test() {
            System.out.println("third");
            return 1;
        }
        
        public static void main(String[] args) {
            StaticBlockTest test = new StaticBlockTest();
        }
    }

    结果:

    third
    second
    first

    示例2:

    package com.basic;
    
    public class StaticBlockTest {
    
        static int a = test();
        static {
            System.out.println("second");
        }
        
        static {
            System.out.println(b);
        }
        
        static int test() {
            System.out.println("third");
            return 1;
        }
        
        static int b = 4;
        
        public static void main(String[] args) {
            StaticBlockTest test = new StaticBlockTest();
        }
    }

    编译器报错:“Cannot reference a field before it is defined“

    示例3:

    package com.basic;
    
    public class StaticBlockTest extends Father{
    
        static int a = test();
        static {
            System.out.println("second");
        }
        
        static {
    //        System.out.println(b);
            System.out.println("first");
        }
        
        static int test() {
            System.out.println("third");
            return 1;
        }
        
        static int b = 4;
        
        public void print() {
            System.out.println("Child");
        }
        
        public static void main(String[] args) {
            StaticBlockTest test = new StaticBlockTest();
            test.print();
        }
    }
    
    class Father {
        static {
            System.out.println("Father");
        }
        
        public void print() {
            System.out.println("Father");
        }
    }

    结果:

    Father
    third
    second
    first
    Child

    静态内部类

    import static

    可以指定倒入某个类中的指定静态资源,并且不需要使用类名.资源名,可以直接使用资源名。

    package com.basic;
    
    import static com.imooc.demo2.StringBuilderDemo.IMPORT_STATIC;
    public class ImportStaticTest {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            System.out.println(IMPORT_STATIC);
        }
    
    }

    结果:

    import static key word
  • 相关阅读:
    spark 随机森林算法案例实战
    AngularJS 下拉列表demo
    机器学习案例学习【每周一例】之 Titanic: Machine Learning from Disaster
    sklearn中的数据预处理----good!! 标准化 归一化 在何时使用
    kaggle 中使用ipython
    机器学习中的数据不平衡问题----通过随机采样比例大的类别使得训练集中大类的个数与小类相当,或者模型中加入惩罚项
    机器学习 数据量不足问题----1 做好特征工程 2 不要用太多的特征 3 做好交叉验证 使用线性svm
    [029] 微信公众帐号开发教程第5篇-各种消息的接收与响应(转)
    [028] 微信公众帐号开发教程第4篇-消息及消息处理工具的封装(转)
    微信公众帐号开发教程第3篇-开发模式启用及接口配置(转)
  • 原文地址:https://www.cnblogs.com/IvySue/p/7488038.html
Copyright © 2020-2023  润新知