【理解】

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

  • main

  • 唯一空间

  • 所有对象共享

  • static只能处理static


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

  • main static fields和static 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 method或static 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)
}
}

Static相关的更多相关文章

  1. 概念:静态static相关知识

    在面向对象中,有‘静态’概念,通过关键字static进行说明, 例如: 静态属性:public static $name = '小仓鼠' 静态方法:public static function Nam ...

  2. Java基础相关总结

    临近面试,权当复习了吧 final相关 定义常量的方法  eg:final int i=0;//则i不能被修改 final修饰的类不能被继承,因此没有子类,且它的类中的方法默认是final final ...

  3. Staitic(静态) 相关知识点介绍

    一.什么是 Static? Static 关键字:表明一个成员变量或者是成员方法可以在没有所属的类的实例的情况下直接被访问 当成员被静态修饰后,就多了一个调用方式,除了可被对象调用外还可以直接被类名调 ...

  4. Djanto static静态文件配置

    django的settings中包含三个static相关设置项: STATIC_ROOT STATIC_URL STATICFILES_DIRS   STATIC_URL 好理解,就是映射到静态文件的 ...

  5. JAVA基础2——类初始化相关执行顺序

    类初始化相关执行顺序 几个概念说明 代码块的含义与作用 static静态代码块: 一般用于初始化类中的静态变量.比如:给静态的数组或者list变量赋初值.使用static静态代码块进行初始化与直接在定 ...

  6. Java基础(十)--static关键字

    static关键字通常应用在字段.方法.静态块,还有冷门一点的内容:静态内部类.静态导入 static字段: static字段也就是静态变量,是属于类的,被所有的对象所共享,只有当类初次加载的时候保存 ...

  7. 各大IT公司校园招聘程序猿笔试、面试题集锦

    转自:http://blog.csdn.net/hackbuteer1/article/details/7959921#t4 百度一面 1.给定一个字符串比如“abcdef”,要求写个函数编程“def ...

  8. JAVA基础知识点(转载的)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/8846697 1.使用浮点型数值时,默认的类型是double,后面加上f或F才被识别为flo ...

  9. 【thinking in java】读书笔记(一)

    近期開始读tij,好记性不如烂笔头,所以还是记录一下,方便以后查阅. 一.各种初始化问题: 方法重载的问题: 方法的重载,差别是靠传入方法的參数,而不是返回值.比方f(),假设是返回值的话,easy产 ...

随机推荐

  1. 用dfs求解八皇后问题

    相信大家都已经很熟悉八皇后问题了,就是指:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法.主要思路:按行进行深度优先搜索,在该 ...

  2. 用Python计算最长公共子序列和最长公共子串

    如何用Python计算最长公共子序列和最长公共子串 1. 什么是最长公共子序列?什么是最长公共子串? 1.1. 最长公共子序列(Longest-Common-Subsequences,LCS) 最长公 ...

  3. JavaScript BOM DOM 对象

    title: JavaScript BOM DOM 对象 tags: JavaScript --- browser object model document onject model BOM对象 w ...

  4. linux程序安装及包管理

    程序包的封装类型: RPM软件包:扩展名为“.rpm”,使用rpm命令安装. DEB软件包:扩展名为“.deb”,使用DPKG包管理器. 源代码软件安装:程序员开发完成的原始代码,一般制作成“.tar ...

  5. WINDOWS-API:关于线程 GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId

    {返回当前线程的虚拟句柄} GetCurrentThread: THandle; {返回当前线程 ID} GetCurrentThreadId: DWORD; {返回当前进程的虚拟句柄} GetCur ...

  6. nodejs个人博客系统

    说明:本人目前还是一名C#程程序,在公司干过一年的前端(ps切图,html+css,js),二年的后台C#(b/s,c/s)的开发.因为想转型所以学习了nodejs这门感觉非常棒的一门语言.于是写了一 ...

  7. Spring中c3p0连接池 jar包下载 c3p0-0.9.2.1 jar包和mchange-commons-java-0.2.3.4 jar 包

    c3p0-0.9.2.1 jar包和mchange-commons-java-0.2.3.4 jar 包 下载地址: https://pan.baidu.com/s/1jHDiR7g 密码 tyek

  8. linux 下使用 curl 访问带多参数,GET掉参数解决方案

    url 为 http://mywebsite.com/index.php?a=1&b=2&c=3 web形式下访问url地址,使用 $_GET是可以获取到所有的参数 curl  -s  ...

  9. android 通过adb 和 ndk调试堆栈

    打开终端 , 输入以下命令, armeabi是应用编译好的.so库的路径 adb logcat|ndk-stack -sym ./armeabi/ 如果堆栈报错,会弹出报错内容. 如下: C:\Use ...

  10. [译]The Python Tutorial#6. Modules

    [译]The Python Tutorial#Modules 6. Modules 如果你从Python解释器中退出然后重新进入,之前定义的名字(函数和变量)都丢失了.因此,如果你想写长一点的程序,使 ...