java基础补漏
1.在方法中不能定义静态变量,因为两者之间的生命周期不同
2.new 关键字是用来分配堆内存空间,另看链接:java类与对象 详解
3.在一个程序的一个运行周期内,第一次使用某个类型的时候,会进行类加载,类加载只进行一次。(第二次使用的时候,不会进行类加载了)
4.对象本身(new class)存放在堆内存中 ,对象的引用(对象名,是个初始地址)存放在栈内存中,而类则在方法区中
5.int类型数据127之内的在方法区、常量池内,127之外的在栈中
6.在个类中局部变量和成员变量重名是允许的,但是局部变量优先。
7.在多态中
1)成员变量编译、运行都看左边,也就是看基类(父类)
2)非静态成员方法编译看左边,运行看右边,如果基类中没有方法则报错,如果有,则调用派生类中同都看左边名方法。
3)静态成员方法,编译运行
4)不能使用派生类特有的成员属性和方法
8.处理异常:
1)try 块: ⽤于捕获异常。其后可接零个或多个 catch 块,如果没有 catch 块,则必须跟⼀个finally 块。
2)finally 块: ⽆论是否捕获或处理异常,finally 块⾥的语句都会被执⾏。当在 try 块或catch 块中遇到 return 语句时,finally 语句块将在⽅法返回之前被执⾏。
在以下 4 种特殊情况下,finally 块不会被执⾏:(该部分抄写至他人总结)
1. 在前⾯的代码中⽤了 System.exit(int)已退出程序。 exit 是带参函数 ;若该语句在异常语句
之后,finally 会执⾏
2. 程序所在的线程死亡。
3. 关闭 CPU
如果try语句里有return,返回的是try语句块中变量值。
详细执行过程如下:
a.如果有返回值,就把返回值保存到局部变量中;
b.执行jsr指令跳到finally语句里执行;
c.执行完finally语句后,返回之前保存在局部变量表里的值。
如果try,finally语句里均有return,忽略try的return,而使用finally的return.
引用:https://github.com/Snailclimb/JavaGuide/issues/190
9.静态代码块: 静态代码块定义在类中方法外, 静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。 该类不管创建多少对象,静态代码块只执行一次。
执行顺序:–>静态代码块!–>非静态代码块!–>默认构造方法!–>静态方法中的内容! -->静态方法中的代码块!–
10.静态内部类(static修饰类的话只能修饰内部类): 静态内部类与非静态内部类之间存在一个最大的区别: 非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。没有这个引用就意味着:1. 它的创建是不需要依赖外围类的创建。2. 它不能使用任何外围类的非static成员变量和方法。