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