Java教程

【JAVA学习】二.面向对象基础

本文主要是介绍【JAVA学习】二.面向对象基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

二、面向对象基础

1.对象(object,instance):在内存中是一个内存块,用来表示相关联的数据,其中包括对象的属性和方法。

2.类(class):可以看作对象的模板,是对象的抽象。

3.一个类可以是另一个类的属性。

4.内存分析:

java虚拟机的内存可以分为三个区域:栈stack,堆heap,方法区method area。
栈:

  1. 栈描述的是方法执行的内存模型,每个方法被调用都会创建一个栈帧(局部变量,操作数,方法出口)。当一个方法被调用的时候该方法进栈,当该方法中又会调用其他方法时,再把其他方法进栈。其他方法执行完之后出栈,该方法继续执行。
  2. JVM会为每一个线程创建一个栈。线程执行完之后,这个栈就被关闭。
  3. 栈属于线程私有,不能实现线程间的共享。
  4. 先进后出,后进先出。
  5. 栈是系统自动分配,速度很快,是一个连续的内存空间。
  6. JVM只有一个堆,被所有线程共享。
  7. 用于存储创建好的对象和数组(数组也是对象)。(new。。。就是放在堆里)
  8. 是一个不连续的空间,分配灵活但是速度慢。
    方法区(静态区)
  9. JVM只有一个方法堆,被所有线程共享。
  10. 实际上也是堆,只是用于存储类,常量相关的信息。
  11. 用来存放程序中永远不变或唯一的内容。(类信息,静态变量,字符串常量)
    在这里插入图片描述

5.构造方法/构造器(constructor),用于对象的初始化。

  1. 构造方法和类名称一致,通过New关键调用。
  2. 虽然有返回值 ,但是不需要声明返回类型。
  3. 如果没有定义构造方法,编译器会添加一个无参构造器。如果已定义方法,则不会生成无参构造器!!!

6.构造方法重载

  1. 传入的参数和类中定义的属性名称一样,使用就近原则,表示的是传入的参数。如果这个时候想要表示类中的属性,需要在前面加this.。
  2. 构造方法的第一句总是super();

7.垃圾回收机制

有一个”服务员“GC,自动回收垃圾。

  1. 发现无用的对象。
  2. 回收无用对象占用的内存空间。
    相关算法:
  3. 引用计数法:每个对象有一个引用计数,被引用一次计数加一,被引用变量值变为null,计数减一。直至0变成无用对象。缺点是循环引用的无用对象无法识别。
  4. 引用可达法:把程序所有的引用关系看成一张图。

8.分代垃圾回收机制

将对象分为三种状态:年轻代,年老代,持久代。虚拟机将内存划为Eden,Survivor和Tenured

  1. 年轻代
    所有新生成的对象首先放在Eden区,目的是尽可能快的手机掉生命周期短的对象,对应的是Minor GC。
  2. 年老代
    在年轻代中经历了N(15)次垃圾回收后仍然存活的对象就会被放到年老代中。当年老代对象过多,就要启动Major GC和Full GC来一次大扫除,全面清理年轻代和年老代的区域。
  3. 持久代
    用于存放静态文件,如Java类,方法等。
垃圾回收过程
  1. 新建的对象,大部分放在Eden中。
  2. 当Eden满了,触发垃圾回收机制(GC),将无用对象清理掉,然后剩余对象复制到某个Survivor中(S1),清空Eden区。
  3. 当Eden再次满了之后,将S1中不能清空的对象放在另一个Survivor中(S2),同时将Eden中不能清空的对象方在S1中保证Eden和S1均被清空。
  4. 重复多次Survivor中没有被清理的对象,放在年老代(Tenured)中
  5. 当年老代满了之后,触发一次完整的垃圾回收(Full GC),之前新生地的垃圾回收为(minor GC)
  6. 使用代码System.gc()可以建议启动GC,但是只是建议没有决定权
容易造成内存泄漏的操作
  1. 创建大量的无用对象
  2. 静态集合类的使用:HashMap,Vector等使用最容易造成内存泄漏,他们的生命周期和应用程序一致。
  3. 各种连接对象(IO流对象,数据库连接对象,网络连接对象)未关闭。
  4. 监听器的使用

9.对象创建的过程和this的本质

  1. 分配对象空间,并将对象成员变量初始化为0或空
  2. 执行属性值的显式初始化
  3. 执行构造方法
  4. 返回对象的地址给相关变量
    this的本质就是创建好的对象的地址,在构造方法调用前,对象已经创建,所以在构造方法中可以使用this代表当前对象。
    this不能用于static方法中,因为this指当前对象而static方法在方法区中。

10.static关键字(静态)

它声明的成员变量为静态成员变量,也称为类变量。类变量的生命周期和类相同, 在整个应用程序执行期间都有效。static修饰的成员变量和方法从属于类,普通变量和方法从属于对象。

11.静态初始化块

构造方法用于对象初始化,静态初始化块用于类的初始化。在静态初始化块中不能直接访问非static成员。
初始化快的执行顺序和继承有关,上溯到Object类,先执行父类的静态初始化块。
static{
这里面不能调用非静态的方法和属性
}
静态快在类加载的时候执行,也就是在构造器之前执行。

这篇关于【JAVA学习】二.面向对象基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!