【从零开始重学Java】第5天

发布时间 2024-01-09 14:49:45作者: 迷路的哨兵甲

前情提示

从零开始重学Java 第0天
从零开始重学Java 第1天
从零开始重学Java 第2天
从零开始重学Java 第3天
从零开始重学Java 第4天

进一步讨论对象和类

抽象数据类型

概述

定义方法

按值传送

有一个非常好的知乎回答Java 到底是值传递还是引用传递?

重载方法名

对象的构造和初始化

和整体项目风格尽量保持一致

显式成员初始化

构造方法

默认的构造方法

工具类这种,可以private构造方法拒绝外部实例化

构造方法重载

finalize()方法

本意是JVM在垃圾回收对象时,释放一些JVM不能自动释放的资源
诞生于JDK1.0时代,设计有问题,后续已经有AutoClosable、CLeaner等更好的替代品
JDK9以后已经弃用了,垃圾回收完全由JVM自己管控就可以,程序员不应该也无法主动完全控制

this引用

子类

is-a关系

extends关键字

单重继承

转换对象

方法自变量和异类集合

方法重写

方法重写示例

应用重写的规则

  • 访问权限不能比父类小
  • 异常不能比父类多

父类构造方法调用

多态

Java包

Java包的概念

import语句

可以使用IDEA的code-> optimize imports 来清理多余的引入

optimize imports

目录层次关系及CLASSPATH变量

访问权限与数据隐藏

封装

类成员

类变量

也就是俗话常说的全局/静态变量

类方法

也就是俗话常说的静态方法

关键字final

终极类

终极方法

终极变量

抽象类

接口

接口的定义

  • 接口里定义的变量默认且必须是public static final的

接口的实现

JDK8以后 接口运行有默认的方法实现

public interface InterfaceDemo {

    int VAL = 1;
    default void interfaceMethodExample(){
        System.out.println("default interface method");
    }
}

内部类

MyBatis的xml resultType内部类记得要用$来分隔而不是.
JDK9以后一个文件允许拥有多个public class
静态与非静态内部类的区别就在于,静态内部类可以单独使用实例化,非静态内部类必须依赖外部的类实例化它才能实例化

内部类的概念

匿名类

JDK8以后的匿名类建议用Lambda表达式代替,可读性更高
最典型的就是开启新线程

传统匿名类
lambda匿名类

内部类的工作方式

包装类

第五章习题

  • 类的定义、抽象类、接口、方法重写重载、this、super关键字作用、静态方法、静态变量、内部类、匿名类
  • Java包的作用

包(package)是一种用于组织和管理类、接口和其他相关资源的机制。它提供了一种命名空间的概念,使得在大型项目中可以更好地组织和管理代码。
其实就是用来代替C++的namespace,因为代码不可避免类会重名的问题,于是加上了包名予以区分

  • 为什么有时候会用到 -deprecation参数

警示使用已过时的API,使用过时的API会生成生成警告信息