1.数组存在的作用?
由于数据都是存储在内存中,而我们需要获取到数据的值(变量的值),数组被归纳为一种数据结构,方便我们对存储在内存中的数据操纵和获取。不然我们就只能通过地址去获取;
int[][] arr = new int[3][3]
一个二维数组,是通过一个一维数组在管理一个二维数组,嵌套管理。
arr
值为[[i@343ced
,一个[
代表一维数组,[[
代表二维数组,@343cde
实体的哈希值。
arr[0]
为null
,如果我们不给arr[0]初始化,那么在使用的时候会有NullPinterException
.
为什么要分堆内存和栈内存?
堆和栈其实是一种数据结构, 堆类似树一样的数据结构,我的理解是分散排列的,
java
通过new 对象
就是分配在堆中. 栈是一种先进后出的数据结构,我们程序需要运行,就需要读取内存,而我们的程序读取的就是栈内存当中的数据. 我们的基本数据类型是存储在栈内存中的,当然栈中也可以存储一份我们在堆中开辟内存对象的引用.
一些混淆的关键字
static
,静态关键子,让该代码块或者变量在类加载的时候加载;
this
:代表当前类的应用,使用一般是在局部变量和成员变量名相同的时候.
super
:在继承中用得比较多. Aextends
B 类,A中构造函数会默认有一行super()
其实就是调用父类的构造函数. 如果我们自己修改了构造函数的参数如super(1)
那么就会调用父类中相应构造函数. 我们在@overide
复写父类函数的时候.可以通过super
来决定什么时候调用父类的方法. 这个关键字在我理解看来解决了我们在对继承中父类中的方法什么时候调用或者不调用的弊端. 比如我们可以在父类定义一些方法.来控制逻辑;
fina
:被修饰了类或者方法,变量其实就变成了一个常量,只能被初始化一次.
多态的作用?
多态对于我来说, 我的理解增加了类的可复用性, 有时候我们需要定义一些接口,然后让其子类实现, 让后赋值给父类,那么父类就可以调用子类中的方法, 注意:在多态中子类的成员变量在运行的时候主要看
=
左边的值,也就是真正持有该对象的成员变量的值;