1、环境变量配置原因:方便运行程序,不需要加上程序所在的绝对位置路径,系统会为我们去自动加载我们所进行配置过的环境变量。会将变量名自动解析成我们设置的对应地址
2、字符串常量池,程序中直接写上的双引号字符串,就放在字符串常量池中。字符串常量池是在堆中,字符串常量池中的字符串对象其实保存的是一个地址,这个地址是堆中的一个byte[]数组的地址,里面将数组值按一个一个的ASCII码值存储
对于基本类型来说,==是进行数值的比较
对于引用类型来说,==是进行地址值的比较
String str1 = "abc"; //这里str1保存其实的是字符串对象在堆中的字符串常量池中的地址
String str2 = "abc";
char[] charArray = {'a','b','c'};
String str3 = new String(charArray);
str1 == str2 //true 指向同一个地址
str1 == str3 //false 指向不同对象
上诉例子的内存图:
3、多态特性: 使用 左父右子就是多态的一种表现 。例如: Fu person = new Zi();
成员变量的访问规则:
1、子类不能覆盖、重写父类中的成员变量,调用成员变量时会向上查找,不会使用子类中的成员变量。
2、可以使用成员方法间接调用成员变量,比如在子类方法中调用子类中的成员变量,这样就优先使用当前类也就是子类中的成员变量(成员方法是优先实现当前类中的方法)
成员方法的访问规则:
看new的是谁,就优先用谁,没有就往上找。
总结:使用上面的多态写法,不得调用子类中自己写的成员变量和成员方法,如果都有相同的成员变量和成员方法,则成员变量使用父类的,成员方法优先使用子类的。
多态的好处:
1、提高了代码的维护性(继承保证,也就是维护时只需修改父类就好)
2、提高了代码的扩展性 (多态保证,一个父类可以有多个子类,子类在父类的基础上,有能够拥有自己独特的方法(父类方法的重写),拥有其自己的表现形式