关于Java的内存模型,使用的是尚学堂的图

 2019-12-10 16:02  阅读(991)
文章分类:Java Core

Java当中的内存模型

内存: code segment (存放代码)

Data segment (静态变量 字符串常量)

Stack 栈 (局部变量)

Heap (new出来的东西)

20191210001513\_1.png

大部分情况下都是用new关键字来创建对象(因为我们还有单例模式,呵呵)。

使用对象.成员变量来引用对象的成员变量。

使用对象.方法(参数列表)来调用对象的方法。

注意:

同一个类的每个对象有不同的成员变量存储空间。

同一个类的每个对象对象共享类的方法。

Java中进行方法调用中传递参数时,遵循值传递的原则:基本数据类型传递的是数据值本身。引用类型传递的是“对对象的引用”,而不是对象本身。

构造方法

构造方法与类同名而且没有返回值。所以不用写void。

如果子类调用super的构造方法,那么必须写在构造方法的第一行。也就是说,super()必须是子类的构造方法的第一行语句。

子类的构造方法必须调用其父类的构造方法。如果子类的构造方法没有显式的调用父类的构造方法,系统默认调用父类无参数的构造方法。如果子类构造方法中没有显式的调用父类的构造方法,而父类中又没有无参的构造方法,就会编译出错。

Tips:重写一个方法,一般采取copy原方法名,避免出现打字错误(大小写问题)。

重写方法不能比被重写方法限制有更严格的访问级别。重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常。

对象转型和多态

一个父类的引用类型变量可以”指向”子类的对象。

一个父类的引用不可以访问其子类对象新增加的成员(属性和方法)。可以说,父类引用子类对象,看不到子类的成员。

可以使用引用变量instanceof类名来判断该引用型变量所指向的对象是否属于该类或者该类的子类。

子类的对象可以当做基类的对象来使用称为向上转型(upcasting),反之成为向下转型(downcasting)强制转换?!

如果非要访问子类对象就必须用强制类型转换。

Animal a= new Dog();

Dog d=(Dog) a;

多态是面向对象的核心!!!

多态的存在的条件(主要是为了提高程序的扩展性):

  1. 要有继承
  2. 要有重写
  3. 父类引用指向子类对象。

动态绑定,迟邦定,多态

执行期间(而不是编译期间)判断所引用对象的实际类型,根据实际的类型调用其相应的方法。其实一般的做法就是父类引用指向子类对象。

对于对象的方法,是根据实际的new出来的类型来确定调用哪个方法。(不是引用的方法,而是子类的方法)多态是指对于方法而言的,也不能应用于属性。

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> 关于Java的内存模型,使用的是尚学堂的图

相关推荐