1. java是基于C++
2. 堆和栈的区别
- 栈和堆都是java用来在Ram中存放数据的地方,java自动管理栈和堆。
- 栈的存取速度大于堆的速度,仅次于寄存器,缺点是栈中的数据大小与生存期必须是确定的,缺乏灵活性,栈中的数据可以共享。
- 堆的优势是动态分配内存大小,生存期不需要事先高数编译器,缺点是动态分配内存,读取速度比较慢。
- 栈是先进后出,后进先出的原则,类似与弹簧,即先分配的内存后释放。
- 堆的内存释放没有先后顺序,堆是属于全局的。
- 栈存放存放函数的参数值,局部变量,基本类型等。
- 包装类数据,如Integer, String, Double等将相应的基本数据类型包装起来的类。这些类数据全部存在于堆中,new出来的存储在堆中,引用变量存储在栈中。
例如:
String a = "abc";
String b = new String("abc");
String c = "abc";
a和b和c都存储在栈中,"abc"也存储在栈中,new String("abc")存储在堆中,c和a指向同一个内存地址。
总结:
分析堆和栈考虑以下4个方面:
1. 共同点
2. 不同点(存取速度,灵活性)
3. 内存的释放先后顺序
4. 存储的参数类型
3. static
- 静态变量或者静态方法,不需要依赖任何对象就可以进行访问,对于静态方法来讲,是没有this的,所以静态方法中不能访问类中非静态方法和非静态成员方法,反之是可以的 。
- 类的构造器实际上就是静态方法。
- 静态变量在内存中只有一个副本,仅当在类初次加载时会被初始化。
4. 注释的代码在编译的时候不会编译
5. finfal
- final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。
- 如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。