A
数组
1)在java中数组属于引用类型,
2)数组对象在堆中储存,数组变量属于引用类型,存储数组对象的地址信息,指向数组的对象;
3)数组的元素可以看成数组随想的成员变量(只不过是类型全部相同)。
数组的元素可以是任何类型,当然搞垮哦引用类型。
对象的内存管理
编译好的java程序需要运行在JVM中;程序无论是代码还是数据都是存储在内存中;
JVM为java程序提供并管理所需要的内存空间;JVM吧内存分为:堆、栈、方法区三个区域,用于储存不同的数据。
堆:这部分空间储存使用new关键字创建的对象
访问对象需要依靠引用变量;当一个对象没有引用变量指向是,这个对象就被视为废弃的对象。就属于被回收的范围,该对象中的所有成员变量也随之被回收。
成员变量的生命周期:从对象在堆中创建开始到对象从堆中被回收结束。
垃圾回收机制(GC):是JVM自带的一个后台线程(自动运行着),用于回收没有任何引用指向的对象。
内存泄露是指,不在使用的内存没有被及时的回收。严重的内存泄露会因过多的内存用而导致程序的崩溃;GC线程判断对象是否可以回收的一举就是看此时对象
是否有引用指向。因此当我们确定该对象不再使用时,应该及时的将其引用置为空。
GC的回收对程序员来说是透明的,并不一定一发现有无引用的对象,就立刻回收。一般情况下。当我们需要GC线程立刻回收无用对象的时候,可以调用
System.gc()方法;此方法用于建议虚拟机马上调度GC线程回收资源,具体的实现策略取决于不同的虚拟机系统。
栈:这部分空间所储存的是在方法中声明的所有局部变量(包括方法参数变量)。
局部变量的生命周期:
1)一个运行的程序从开始到结束会有多次方法的调用。JVM会为每一个方法的调用在栈中分配一个对应的空间,这个空间就被称为该方法的栈帧。
2)一个栈帧对应着一个正在调用的方法,栈帧中储存了改方法的参数、局部变量等数据。当吧、某一个方法调用完成后,其对应的栈帧将被清除,局部变
量失效。
总结:成员变量和局部变量的区别与联系?
局部变量:
1)定义在方法中
2)局部变量没有默认值,必须自行设定初始值;
3)方法调用存在于栈中,方法调用结束,从栈中清除。
成员变量:
1)类中方法外;
2)有默认值可以不显示的初始化;
3)类被实例化后存在堆中,对象被回收时,成员变量失效。
方法区
方法区存放的是类的信息,java程序运行时,首先会通过类加载器载入字节码文件信息,经过解析后把其装入方法区。类的各种信息(方法的定义)都在方法
区储存。
当类的信息被加载到方法区时,除了类的类型信息之外,同时类内的方法定义也被加载到方法区
类在实例化对象时,多个对象拥有在堆中的空间,但所有的实例对象是公共在方法区中的一份方法定义。
继承
通过关键字extends实现类的继承;
子类可以继承父类的成员变量和方法,同时也可以定义自己的成员变量和方法;
java语言中不支持多继承,一个子类只能有一个父类,但一个父类可以有多个子类
子类的构造方法中必须通过super关键字调用父类的构造方法,这样可以妥善的初始化继承父类的成员变量。如果子类的构造方法中没有调用父类的构造方法,
java编译器会自动的加入父类无参构造方法的调用(如果父类没有无参的构造方法,会有编译错误)。
向上造型:把子类的对象地址赋给父类的引用。
一个子类的对象可以向上造型为父类的类型,即定义父类的引用可以指向子类的对象。
父类的引用可以指向子类的对象,但是通过父类的引用智能访问父类所定义的成员,不能访问子类扩展的部分。
网友评论