小知识点
对于局部变量String a;必须初始化才能使用(=null也是一种初始化),否则IDE会提示报错。
-
对于全局变量String a;如果没有初始化,也可以直接使用,编译器不会报错。
- 现在假如你是java语言的开发者,你已经将对象保存在了堆内存中,而将局部变量保存在了栈内存中,你会怎么做呢?其实,不管是局部变量还是成员变量,都是必须要初始化的,那为什么成员变量会自动初始化?其实正是因为成员变量属于对象,而对象是保存在 堆中的,所以jvm就在初始化类的时候把成员变量初始化呢,而如果我们在调用方法的时候,还要jvm去将局部变量也进行初始化,是不是对会影响到性能呢?因此,直接强制局部变量必须要初始化反而更好。
- 一个我们编写的java源码类(机器码)要想被正式运行,必须先编译成字节码(class文件),然后虚拟机经过类加载过程后才能真正使用。
而这个类加载过程包括了对字节码 加载 验证 准备 解析 初始化等过程。在这个过程中,我们会对我们定义的成员变量进行两次初始化,一次赋默认初值(0值,boolean赋为false),一次赋我们定义的初值,如:
class Test{=
int a = 2;=
}
先赋0,再赋2.
而方法,需要进栈执行,这个过程是没有赋初值过程的。成员变量和局部变量赋不赋初值的原因就在这里,成员变量我们不主动初始化赋初值,有大佬照顾,给他赋零值,而局部变量,姥姥不疼,舅舅不爱,必须自力更生,我们必须主动初始化进行赋值,否则编译器不通过。
文件名必须与public类的名字匹配,在一个源文件中,只能有一个公有类,但是可以有无限个非公有类。最终编译器会为每一个类生成一个.class文件。
不能在构造方法中定义与成员变量同名的变量,否则编译器会报错。
-
内联函数就是在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来直接进行替换:https://blog.csdn.net/ke_weiquan/article/details/51946174
对于域属性为引用数据类型,在get方法内部应该返回该对象的克隆对象而不是该引用对象的地址,以保护其不会被更改。
- 静态属性,静态域
- 什么情况下考虑将方法定义为静态的
- 为什么使用工厂方法,而不是构造方法
- java中只有值传递,没有引用传递
- 代码块
静态代码块,代码块,构造方法之间的执行顺序
静态代码块 > 代码块(多个之间按照代码书写顺序执行) > 构造方法析构函数
- 静态导入
//导入一个类
import java.util.List;
//导入一个静态域(注意static)
import static com.futao.springmvcdemo.model.system.ErrorMessage.GEN_URI_FAIL;
- 包注释
- 大数值
- this与super的区别
- 多态
- 一个类必须实现Cloneable接口并重写clone()方法,其实例才能调用clone()方法,否则会抛出“CloneNotSupportedException”异常。
- equals与hashcode
- 枚举类
- 多态
多态可以让我们不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法,而这些方法通过一个抽象类或者接口来实现,多态就是提供父类调用子类代码的一个手段而已。