静态方法和静态变量

173 阅读3分钟

一今天学了什么 static本质,静态方法,静态变量,静态初始化块

二、学习的具体内容

栈,堆,方法区 栈:每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用,是线程私有的。它的生命周期与线程相同 来源juejin.cn/post/707744… 随线程而生,随线程而灭(理解:每次创建新的项目,会新建包,类等等,这里的线程与项目含义应该是相同的

Java编写的程序都运行在Java虚拟机(JVM)中,每当使用Java命令启动一个Java应用程序时,就会启动一个JVM进程。在这个JVM进程内部,所有Java程序代码都是以线程来运行的。JVM找到程序的入口点main()方法,然后运行main()方法,这样就产生了一个线程,这个线程被称为主线程。当main()方法结束后,主线程运行完成,JVM进程也随即退出。

线程是指“进程代码段”的一次顺序执行流程。线程是CPU调度的最小单位。一个进程可以有一个或多个线程,各个线程之间共享进程的内存空间、系统资源,进程仍然是操作系统资源分配的最小单位。 来源:blog.csdn.net/Kangyucheng…

栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧用于存储 局部变量表、操作数栈、动态链接、方法返回等信息。 每个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。 在活动线程中,只有位于栈顶的栈帧才是有效的,称为 当前栈帧,与这个栈帧相关联的方法称为 当前方法。执行引擎运行的所有字节码指令都只针对当前栈帧进行操作(理解:当前栈帧指的是最后的数据结构)

链接:juejin.cn/post/684490…

堆:存放实例对象,即创建的对象,如id,name等等,包括新生代和老年代

方法区:存储已被虚拟机加载的 类信息、常量、静态变量、即时编译器编译后的代码等数据 具体详解:juejin.cn/post/684490…

线程即执行流程

/**
 * 测试static
 */


public class TestStatic {
    int id;//id
    String name;//账户名

    static String company = "北京尚学堂";//公司名称
    public TestStatic(int id,String name){
        this.id = id;
        this.name = name;
    }
    public void login(){
        System.out.println(name);
    }
    public static void printCompany(){
        //login();//调用非静态成员就会报错
        System.out.println(company);
    }
    public static void main(String[] args){
        TestStatic u = new TestStatic(101,"高小七");
        TestStatic.printCompany();
        TestStatic.company = "北京阿里爷爷";
        TestStatic.printCompany();
    }
}

静态初始化块 构造方法用于对象的普通属性初始化。 静态初始化块,用于类的初始化初始化操作,初始化静态属性。 在静态初始化块中不能直接访问非static成员。 从Object类再向下执行子类的静态初始化块再到类的静态初始化块

三、总结

四、有哪些会了,哪些不会 thisd的作用