tk's blog
  • tk's blog Read Me
  • 算法相关
    • 数据结构
      • 【集训整理】 旋转treap模板
      • 二叉树及相关数据结构的java语言实现
      • 快乐树0x01:AVL树的java实现
      • 快乐树0x02 线段树实现(c++)
      • 链表的Java语言实现
    • 算法
      • DP的背包问题小结-java语言描述
      • 【集训整理】2-SAT问题 模板题
      • 【集训整理】Tarjan算法 模板题
      • 【集训整理】差分约束 模板题
      • 【集训整理】最近公共祖先LCA 模板题
      • 二分查找与二分答案-java实现
      • 动态规划-java语言练习一:暴力DP
      • 快速幂
      • 状态压缩DP-java描述
      • 差分
      • 乘法逆元
    • 题解
      • CFRound-GoodBye2022题解
  • java相关
    • Java与算法竞赛——注意事项摘录
    • java面向对象简要总结 一
    • java面向对象简要总结 三
    • java面向对象简要总结 二
  • 后端相关
    • Linux-Crontab命令
    • Spring Data JPA 使用方法
    • Spring集成Artemis实现JSM的异步消息传递
    • Spring使用自定义配置项
    • MIT6.824分布式系统Lab1.MapReduce笔记
    • MIT6.824分布式系统Lab2-Raft-A笔记
    • MIT6.824分布式系统Lab2-Raft-B笔记
  • 杂谈
    • 杂谈-关于2021
  • 杂项
    • c语言 scanf的返回值
    • 系统设计
  • 计科基础
    • 编译原理
      • 编译原理:词法分析笔记
    • CSAPP 第二章笔记
    • 计算机组成原理笔记
    • CSAPP Lab1. Datalab
    • CSAPP Lab2 Bomblab
  • C++每日一题
    • C++每日一题 Day 1 肥宅水
    • C++每日一题 Day 2 数字反转
    • C++每日一题 Day 3 理五的凡尔赛风气
    • C++每日一题 Day 4 我喜欢这个数
    • C++每日一题 Day 5 数字楼梯
    • C++每日一题 Day 6 插火把
    • C++每日一题 Day 7 贪吃蛇
    • C++每日一题 Day 8 蒙德最强战力
    • C++每日一题 Day 9 璃月七星选举
    • C每日一题 Day 2 肥宅水
    • C每日一题 Day 3 理五的凡尔赛风气
    • C语言每日一题 Day 1 荧妹好感队
由 GitBook 提供支持
在本页
  • 一、引用类型
  • 四种引用类型
  • 1、强引用
  • 2、软引用
  • 3、弱引用
  • 4、虚引用
  • instanceof 运算符
  • 二、组合
  • 三、初始化块
  • 四、包装类
  1. java相关

java面向对象简要总结 三


一、引用类型

针对java的对象,我们操作的标识符实际上是“引用”,通过引用指向一个对象的地址,类似于C中的指针。我们通过标识符来对对象进行操作。

四种引用类型

java针对不同的引用类型有不同的垃圾回收方式。

1、强引用

java默认的声明方式就是强引用。只要引用还指向某个对象,该对象就不会被回收。

Object obj = new Object();//强引用
//如果需要让Object可以被回收,只需要:
obj = null;

手动将引用设置为“null”可以使对象能被回收。

2、软引用

java的软引用可以将对象设为可被清理状态,当JVM内存不足时,系统将会清理被标识为软引用的对象。

SoftReference<Object> ref = new SoftReference<>(obj);

可用ref.get()来获取引用指向的对象。

3、弱引用

设置弱引用,只要JVM进行垃圾回收,则弱引用指向的对象无论内存剩余情况如何,都会被系统清理。

WeakReference<Object> ref = new WeakReference<>(obj);

4、虚引用

虚引用是最弱的一种引用,即使有弱引用指向,没有其他引用指向的对象仍然会被回收。

PhantomReference<Object> ref = new PhantomReference<>(obj);

instanceof 运算符

instanceof是java保留字,用于测试它左边的对象书否是它右边类的实例。返回值是逻辑型。

String s = "String类是Object的子类";
boolean isObject = s instanceof Object;
//返回值是true

二、组合

组合是一种实现程序复用的手段,但不借助继承。相比继承,使用组合的方法进行代码复用能够保证更好的封装性。组合思想将要被复用的父类当做新类(子类)的组成部分,由新类直接调用父类的方法。

例子:

class father{
    public void do(){
        System.out.println("do sth..");
    }
}

class child{
    private father f;
    public child(father a){
        f = a; //将父类的对象引入
    }
    public void do(){
        //重新定义一个do方法
        f.do() //直接调用父类的方法
    }
}

在上述例子中,新建child对象时需要传递一个father对象。

father f1 = new father();
child c1 = new child(f1);

三、初始化块

初始化与构造器类似,都在类中定义用于对对象进行初始化操作。

初始化块分为静态初始化块和非静态初始化块两种:

  • 静态初始化块:

    在初始化块之前加上static修饰符,只会在类装载到系统时执行一次。

  • 非静态初始化块:

    不加任何修饰符,在该类的每个对象生成时都会执行一次,且执行顺序在构造方法之前。

初始化块语法格式:

class test{
    [修饰符] {
    dosth();
	}
}

初始化块没有命名,只有{ }。

可以定义多个初始化块,运行顺序仅依据定义的先后。

四、包装类

java是面向对象的语言,但其包含的8种基本数据类型并不是标准的对象,不支持面向对象的编程机制。如果需要将基本数据类型转换为对应的按类编写的引用类型,从而可以像对象一样对其进行操作。

int i = 1;
Integer itObj = new Integer(i);
int i2 = itObj.intValue(); //取出int变量
上一页java面向对象简要总结 一下一页java面向对象简要总结 二

最后更新于2年前