对象创建和构造器

创建对象方法调用顺序

  • 1.静态代码块
  • 2.构造代码块
  • 3.构造器
  • 4.先父类,再子类

对象创建

  • new关键字
    • 需要有相应构造器
      • 根据class类在堆中为对象分配空间
      • 调用相应的构造器来初始化对象
      • 将在堆中分配的空间地址的传递给在栈中的引用
  • 反射
    • 利用Class类的newInstance方法,创建对象。
    • 底层调用无参构造器,所以需要确保有无参构造器
  • 反序列化
    • 将已经序列化的对象,反序列化到内存中创建对象
    • 需要实现Serializable接口
  • 克隆
    • 克隆一个已存在的对象
    • 原对象实现cloneable接口,并且重写clone方法
    • 注意浅拷贝问题

构造器

  • 概念

    • 类中用来初始化对象的方法,构造器与类名相同,且没有返回值
    • 特点:

      • 名称与类名相同
      • 方法没有返回值和返回值类型
      • 只能和new一起使用
      • 修饰符不能为abstract static final
      • 可以存在return语句,但是后面不能跟返回值
      • 调用其他构造器用this()关键字
      • 构造器见不要互相调用
    • 作用

      • 初始化对象属性,不是创建对象
    • 空构造器

      • 没有参数的构造器
      • 如果没有,编译时自动加入空构造

引用与内存分析

  • 引用特点
    • 引用存在栈中,对象存在堆中
    • 同一时刻,一个引用只能指向一个对象
    • 一个对象可以有多个引用,任意一个对其修改,其他引用也可见该变化
    • java一切为值传递,不过引用传递拷贝的是地址值

this

  • 作用
    • 代表当前对象
  • 注意点
    • this(。。。)指代构造器,只能放构造器的第一行
    • this。属性,调用成员属性
    • this不能出现在被static修饰的内容中

单例模式

  • 核心
    • 对外只提供一个实例化对象
  • 步骤
    • 构造器私有
    • 对象内部持有当前对象的引用
    • 对外提供一个获取当前对象的方法
  • 懒汉式单例
    • 调用获取对象的方法时创建单例的实例化对象
public class  Student {
                private static Student student;
                private  Student () {
                }
                public static Student getInstance () {
                     if (student == null) {
                        student = new  Student();
                     }
                    return student;
                }
            }
  • 饿汉式单例
    • 类加载时,就创建一个单例的实例化对象
public class  Student {
        private static Student student =  new Student();        
        static {
            student =  new Student();
            }
        private Student () {
            }
        public Student getInstance () {         
            return student;
        }   
}

代码块

  • 静态代码块
    • 格式:static{}
    • 位置:类内,方法外
    • 执行时间:加载class文件时
    • 其内不能使用成员变量
    • 只在类加载时执行一次,其余不加载
  • 构造代码块
    • 格式{}
    • 位置:类内,方法外
    • 执行时间:构造器之前
    • 可以使用成员变量,静态的和非静态的
    • 在每次创建对象时加载
  • 普通代码块

    • 格式:{}
    • 位置:方法内
    • 每次方法被调用时加载
  • 同步代码块

    • synchronized(){}

垃圾回收

System.gc:通知jvm进行垃圾回收,但是jvm有自己内部的垃圾回收机制,所以何时回收不知道。
回收时,调用finalize方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值