Java基础

Java垃圾回收机制 

Java的垃圾回收机制是Java虚拟机提供的一种内存回收机制,Java程序员不需要直接控制内存回收,Java程序的内存分配和回收都是Java虚拟机自动进行的。Java虚拟机会负责回收那些不再使用的内存,这种机制被称为垃圾回收。

 

Java垃圾回收,回收的是无任何对象引用指向的内存空间,而不是对象本身。

 

我们可以显示的调用System.gc()方法 或 Runtime.getRuntime().gc()来建议Java虚拟机进行内存回收;然而Java虚拟机不一定会马上进行内存回收,调用这两个方法的作用仅仅是我们建议Java虚拟机进行内存回收而已。

Java虚拟机垃圾回收是不可预知的;垃圾回收有可能发生在CPU空闲的时候;有可能发生在内存消耗到一定程度的时候;

 

Java虚拟机回收的是堆中的内存空间;

 

面向对象的基本特征

面向对象的基本特征有:封装、继承、多态

 

封装:所有封装,只的是把对象的具体实现细节隐藏起来,然后通过一些公用方法来暴露该对象的功能;

 

继承:继承指的是子类继承父类后,将直接获得父类的属性和方法。

 

多态:子类对象可以直接赋值给父类变量,但运行的时候依然表现出子类的行为特征。这就意味着同一个类型的对象在执行同一个方法的时候,可能表现出多种行为特征。

 

对象、引用和指针

Java把内存划分成两种:栈内存和堆内存;

Java中,在函数中定义的基本类型的变量和对象的引用变量,都是在函数的栈内存中分配;

当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量分配的内存空间。

 

堆内存用来存放由new创建的对象和数组;

Person p = new Person();

这个过程:

Java在栈开辟一个空间存放p,在推空间中开辟空间存放Person对象;栈中的p保存了堆空间中Person对象的引用。

Person p1 = new Person();

Person p2 = p1 ;

过程:

栈空间开辟了p1和p2两块内存空间,他们保存的地址都指向了堆空间Person对象。

一个栈内存只能指向一个对内存空间,如果要想再指向其他的堆内存空间,则必须先断开已有的指向才能分配新的指向

 

Java中常用的内存区域

1、栈空间:保存所有的对象的名称(保存了堆空间内存的引用)。

2、堆空间:保存每个对象的具体属性内容。

3、全局数据区:保存static类型的属性。

4、全局代码区:保存所有的方法定义。

 

对象的this引用

1、构造器中:代表该构造器正在初始化的对象。

2、方法中:表示调用该方法的对象。

 

Java方法的参数传递机制

1、基本类型(boolean,byte,short,char,int,long,float,double)是值传递。所谓值传递,可以理解为Java把原来对象复制了一份,把这个复制出来的值在方法中传递,故在传递过程中,该值被修改后,不会影响原来的值。

2、对象类型也是值传递。Java复制了一份对象引用的地址,来进行传递。

 

多态

class BaseClass{

public void test(){

System.out.print("BaseClass");

}

}

 

class SubClass extends BaseClass{

public void test(){

System.out.print("SubClass");

}

}

 

public static void main(String[] args){

BaseClass base = new BaseClass();

base.test();//调用的是BaseClass里的test方法

 

BaseClass sub = new SubClass();

sub.test();//调用的是SubClass里的test方法(如果SubClass子类没有重写test方法,则调用的是BaseClass里的test方法)

}

BaseClass sub = new SubClass();构造方法的调用过程

先调用BaseClass无参的构造方法,后调用SubClass的无参构造方法。

BaseClass sub = new SubClass("sanling");构造方法执行过程

先调用BaseClass无参的构造方法,后调用SubClass的有参构造方法。

 

 

 

 

 

你可能感兴趣的:(java基础)