Java三大特性
继承,封装 ,多态
基础数据类型
-
包装类的自动拆箱,自动装箱
-
String类型
String拼接String str = “a” + “b”;
String str2 = str + “a”;
表达式中只有常量,在编译期间就会完成拼接计算。
表达式存在变量,等到运行期才会计算。
注意指向地址问题.String.intern()
在jdk1.6中,程序会从常量池中返回或者创建
在jdk.1.7中,程序会从常量池中返回,没有就去堆中查询和创建。(new 出来的都在堆里面)String.equals()
判断的是地址用==
然后比内容。 -
StringBuffer 和 StringBuild
两者最底层都继承自可变字符数组
> char[] value
>初始化容量为16,扩容方式为: length2+2
>如果length2+2大于等于int.MAX_VALUE,就取int.MAX_VALUE,否则就抛出异常了。OutOfMemoryError(); -
String的不可变性
即对String进行赋值或者修改的话,实现是直接修改指针,指向新值就行了。、
原因:
底层实现为数组,被final修饰,不可继承,private私有。private final char value[];
final关键字
- 修饰类,方法,引用
- 修饰类,该类不能被继承。并且这个类的对象在堆中分配内存后地址不可变。
修饰方法,方法不能被子类重写。
修饰引用,引用无法改变,对于基本类型,无法修改值,对于引用,虽然不能修改地址> > 值,但是可以对指向对象的内部进行修改。
抽象类和接口
1 抽象类一般会实现一部分操作,并且留一些抽象方法让子类自己实现,比如Stringbuffer和Stringbuilder的父类abstractStringbuilder。
2 接口一般指一种规定,比如一个map接口中,可能需要实现增删改查等功能,如果你想实现一个具体map,这些方法就必须按照规定去实现。
3 另外,一个类可以实现多个接口,但是不能继承多个类。
然而接口却可以继承多个其他接口。这一点很神奇。
代码和代码块加载顺序
局部代码块
主要作用是限定变量生命周期,达到GC标准来做内存管理。
方法内部。
构造代码块
构造代码块先于构造方法执行,每次创建对象时都会执行一次。
用于对象初始化。
类内部。
静态代码块
静态代码块只执行一次,所以对象共用。用于初始信息配置。
内部类
待续…