复习JAVA知识的小漏洞
1. 语句块
由{}构成在方法里。语句块内定义的变量只能属于自己,外部不能使用。语句块外部的变量在语句块内不能重复定义但可以使用,外部不能使用语句块内变量。
public class Testyujukuai {
public static void main(String[] args) {
int n=0;
double d=1.28;
{//语句块
//int n=100;//编译ERROR:不能重复定义!
n=20;//内部可以用外部的
String s="gggg";
}
//s="bbb";//ERROR:外部不能用内部
}
}
2.方法重载小点点儿
条件:形参类型、个数、顺序不同
只有返回值不同不可重载、形参名称不同不能重载!
3.JAVA虚拟机内存
JAVA虚拟机内存有三个区域:虚拟机栈Stack、堆Heap、方法去method area
(1)栈的特点:
①栈描述方法的内存模型,每个方法被调用都会创建一个内存栈帧来存储局部变量、操作数、方法出口,对象地址等。
②JVM为每一个线程创建一个栈,存放该线程的执行方法的信息。
③栈属于线程私有、不共享。
④方法执行完就会:先进后出,后进先出。
⑤栈是连续的内存空间,由系统自动分配,速度快。
(2)堆的特点:
①堆用于存储创建好的对象和数组(数组也是对象)。
②JVM只有一个堆,所有线程共享。
③堆是不连续的空间,灵活分配,速度慢。
④堆被所有线程共享,因此在堆的区域上,会被垃圾回收器进一步划分。
(3)方法区:
①方法区实际也是堆,只是用于存储类、常量相关的信息!有常量池,存放文本字符串、final常量。
②JVM只有一个方法区,各个线程共享。
③方法区用来存放永远不变的内容,类信息、静态变量、字符串常量。
**4.**静态变量、静态方法
①static方法中不可以直接访问非静态成员。
②static变量只有一份。
③属于类、被类所有实例对象共享、在载入时被初始化。
④一般用类名.类变量/方法来调用。
5.静态初始化块
构造方法用于对象的初始化!静态初始化块用于类操作的初始化,静态初始化块中不能直接访问非static成员。
静态初始化块的执行顺序:
先执行Object类的静态初始化块,再向下执行子类的静态初始化块。