变量池是存储字符串常量的。
栈是弄方法的(基本数据类型在这)。
堆是保存new的参数(引用数据类型是在这,所以他通过形参会改变)。
方法区是存储方法有些啥。
类只加载一次。
jdk1.7前叫方法区,1.8改名元空间。
堆区
堆是java虚拟机所管理的内存中最大的一块内存区域,也是被各个线程共享的内存区域,该内存区域存放了对象实例及数组(但不是所有的对象实例都在堆中)。
如果new了一个字符串常量,会先索引到堆中,堆有索引到常量池中。
实参在堆区。
方法区
主要就是存放从class文件里加载进来的类的,而且常量池(存放字符串常量)也是在这块区域内的。
静态变量、静态方法在该区域,所以对象共享。
栈区
每个线程在创建时都会创建一个栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用。从main函数开始压栈。
形参变量随方法的创建在栈区。随方法释放而释放。
[JAVA基础] 成员变量和局部变量(一看就懂的总结归纳篇)_局部变量的值,成员变量和参数列表中的变量进行了访问或改变-CSDN博客
重载是参数列表不同就好(数量,类别,顺序)
switch可以遍历那些数据类型,可以遍历byte short int char String 枚举,因为switch是讲数据转换成int型,所以比int小的可以,浮点数不可以。
静态变量随类加载就加载了,不是随对象加载而加载。优于对象存在。
使用sc读取键盘输入时,如果先使用nextint()在使用nextline()会跳过字符串的输入。要改用next()
原因就是,你在输入的时候,你输入的所有内容(包括空格和回车)都会存在缓冲区,next(), nextInt()这些会从缓冲区中读取你的输入,但是在遇到空格或者回车的时候会停止,不会将空格或者回车读入,而只有nextLine()会将空格和回车读入。所以在我第一次输入数字并敲下回车后,这个回车并没有被nextInt()读入,而是留在了缓冲区,并被nextLine()读到了这个回车,所以nextLine()直接就返回了,程序会直接结束。