• Static相关


    【理解】

    说到static,脑中浮现的几个Key Words是什么?

    • main

    • 唯一空间

    • 所有对象共享

    • static只能处理static


    很好,解释一下上面的意思:

    • main static fieldsstatic block的初始化timing是类中任意static方法被触发时,main()是static的,也是第一个执行的方法。因此可以认为,static fields和static block的初始化是在main()的第一行代码执行之前。

    • static修饰的fields、method是属于类本身的,被该类的所有instance共享。因此可以通过类名.static变量名/方法名的形式使用。

    • 唯一空间 static fields被分配的是唯一一块内存空间,有且仅有的一份。

    • 所有对象共享 某个instance修改了static field的值,其他instance的这个field值也相应修改。每个instance都可以对static field进行++,常用来做instance total的合计

    • static只能处理static 从语法上讲,static method只能操作static methodstatic field。当然runtime时,这个static method可能是被instance调用,但不要忘记,只要存在static field/method在实例化前被调用的可能性,语法上严格执行:“static method只能操作static method或static field”才是唯一正确的。


    其他:

    static修饰:变量,代码块,方法=静态方法,也叫类方法(可以用类名.方法名调用)
    static int a = 3;
    static{……}
    static method01(){
        ……
    }

    1,可以认为static修饰的变量和代码在Main()运行时已经执行了。因为main()是static的。
    ❤系统只为static变量分配1次存储空间。timing是在执行main方法时。
    2,static变量初始化最先进行。Only运行一次,被所有instance共享,任意instance对类变量的修改,都将影响其他对象。值可以被instance或class本身访问修改。
    3,static块Only在所在Class被new时运行1次。再new也不执行了。
    4,static块运行timing:所在class的任何method被触碰时。static块优先于构造函数运行:因为构造函数无修饰。
    5,static方法只能处理/调用static方法、static变量、static block,不能访问instance方法/变量(容易理解。static method是用

    类名.方法名调用的,这时候instance还没有形成,操作谁?)
    instance方法可以处理所有:static或非static方法/变量/块。(instance.方法名调用,这时候static和非static的一切都已分配

    空间完毕,各归其位,当然没问题。)
    ?6,static method不能以任何方式引用this或super。
    ❤常量定义:
    static final double PI = 3.14159;

    【应用1】
    static变量:被所有对象共享
    →用类变量color,规定所有对象的color

    例1:
    Class Car{
    static int color = 0;

    static int getColor(){
        return color;
    }
    }

    public class Demo01{

    public static void main(String[] args){
        Color c1=new Color;
        Color c2=new Color;

        c1.color=99;
        out(c2.getColor)
    }

    }

    【应用2】
    static变量:total,sum
    static block:在其中初始化total=0
    在constructor中total+1
    →可以做一个销售记录,或者入学学生总人数记录。

    例1:
    Class Student{
    static int school=0;
    string name;

    Student(String name){
        school+=1;
        out(张三入学);
    }

    static int getSchoolStudentTotal(){
        out(这所学校有这么多学生:school)
    }
    }

    例2:
    Class BMW{
    static double incomeTotal;

    static{
        incomeTotal=0;
    }
    BMW(){
        incomeTotal+=1;
    }
    static double getIncomeTotal(){
        out(总收入:incomeTotal)
    }
    }

  • 相关阅读:
    累计定时中断次数使LED灯闪烁
    累计主循环次数使LED灯闪烁
    树莓派
    树莓派
    树莓派--bcm2835 library (2) 交叉编译BCM2835
    树莓派 -- bcm2835 library (1)
    树莓派
    树莓派
    树莓派
    树莓派-3 启用root
  • 原文地址:https://www.cnblogs.com/dlsunf/p/8534391.html
Copyright © 2020-2023  润新知