JAVA面向对象基础(二)

一. 构造方法

     构造器也称之为构造方法(constructor),用于对象的初始化。构造方法具有如下特性:

  • 通过new关键字调用;
  • 构造器的返回值为对象在堆中的地址,但是不能在构造器中使用return语句;
  • 如果我们没有定义构造器,则编译器会自动添加一个无参构造器;如果已定义,则编译器不会自动添加;
  • 构造器的方法名必须和类名一致。

注意:

     对象的创建并不是完全由构造方法来完成的,构造方法是创建JAVA对象的重要途径,通过new关键字调用构造器时,构造器也确实返回了该对象,但这个对象并不是完全由构造器负责创建的。对象的创建过程如下:

  1. 在堆中分配对象空间,并将对象成员变量初始化为0或null;
  2. 执行属性值的显示初始化;
  3. 执行构造方法;
  4. 返回对象的地址给相关的变量。
public class User {
    int id;
    String name;
    String pwd;

    public User(){}

    public User(int id, String name){
        this.id = id;
        this.name = name;
    }

    public User(int id, String name, String pwd){
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }

    public User(User user){
        this.id = user.id + 1;
        this.name = user.name;
        this.pwd = user.pwd;
    }

    public static void main(String[] args){
        User user1 = new User();
        User user2 = new User(1, "WuJi");
        User user3 = new User(2, "SanFeng", "123456");
        User user4 = new User(user3);
    }
}

二. 内存管理和垃圾回收机制

       Java引入了垃圾回收机制(Garbage Collection),Java程序员可以讲更多的精力放到业务逻辑,而不是像C++程序员的内存管理工作,大大提高了开发效率。JAVA的内存管理很大层度上指的就是对象管理,包括对象空间的分配和释放:

  • 对象空间的分配:使用new关键字创建对象即可;
  • 对象空间的释放:将对象赋值null即可;垃圾回收机制负责回收所有“不可达”对象的内存空间。

       任何一种垃圾回收算法一般要做2件基本事情:

  • 发现无用对象;
  • 回收无用对象占用的内存空间;

       垃圾回收机制保证可以将无用对象进行回收,无用对象指的是“没有任何变量引用该对象”。JAVA垃圾回收器将通过算法发现无用对象,进行清除和整理。关于垃圾回收的常见算法有如下2个:

  1. 引用计数法

       堆中每个对象都有一个引用计数,被引用一次,计数+1,被引用变量计数变为null,则计数-1。直到计数为0,则表示变为无用对象。有点是算法简单,缺点是“被循环引用的无用对象无法被识别”。

    2. 引用可达法(根搜索算法)

       程序把所有的引用关系看做一张图,从一个节点开始,寻找对应的引用节点,找到此节点后,继续查找这个节点的引用节点,当所有的引用节点寻找完毕后,剩余的节点则被认为是没有被引用到的节点,即无用节点。

三. 容易造成内存泄漏的操作

       在实际开发中,经常会造成内存的崩溃,以下是几个极易造成内存泄漏的场景:

  • 创建大量无用对象:在字符串拼接时使用了String,而不是StringBuilder或StringBuffer
  • 静态集合类的使用:静态变量的生命周期和应用程序一致,因此,容器中存储的所有的对象也不能被释放。
  • 各种连接对象(IO流对象、数据库连接对象、网络连接对象)未关闭:IO流对象、数据库连接对象、网络连接对象属于物理连接,和硬盘或者网络连接,不使用时一定要关闭。
  • 监听器的使用:释放对象时,没有删除相应的监听器。

注意:

  • 程序员无权调用垃圾回收器;
  • 程序员可以调用System.gc(),该方法知识同志JVM,并非运行垃圾回收器。尽量少用,会申请启动Full GC,成本高,会影响系统性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值