Think in java书籍阅读小结

2023-10-27

一、博客说明

本篇博客为本人看完think in java这本书后,个人查漏补缺的一些知识点,记录下来作为笔记使用

二、变量初始化顺序

     在一个类里,变量初始化的顺序是由变量在类内的定义顺序决定的。即使变量定义大量遍布于方法定义的后面,
那些变量仍会在调用任何方法之前得到初始化——甚至在构建器调用之前。

public class A{
    A(){
         str = “abc”;
    }
    String str = “a”;
    
}

对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。
可查看:https://blog.csdn.net/xyajia/article/details/80922329

三、private修改默认构造器 

      由于默认构建器是唯一获得定义的,而且它的属性是 private,所以可防止对这个类的继承,也可以防止别人通过 new 类名()得到类对象。

四、衍生类继承基础类时 

     若基础类的构造器进行了修改,衍生类继承基础类时,必须要在衍生类的构造器中通过super()调用基础类的构造器,否则会报错。
    这是因为创建衍生类的一个对象时,它在其中包含了基础类的一个“子对象”。这个子对象就象我们根据基础类本身创建了它的一个对象。从外部看,基础类的子对象已封装到衍生类的对象里了。

public class Car {
    public Car(String car){
    }
}

public class Redcar extends Car {
    public Redcar(String car) {
        super(car);
    }
}

五、继承的类对象可向上塑性

public class Car {
    static void getCar(Car car){
    }
}

public class Redcar extends Car {

    public static void main(String[] args) {
        Redcar rcar = new Redcar();
        Car.getCar(rcar);
    }
}

    代码里getCar()方法,它能接受一个 Car句柄。但在 Redcar.main()中,getCar()方法是通过为其赋予一个Redcar 句柄来调用的。由于Java 对类型检查特别严格,所以大家可能会感到很奇怪,为什么接收一种类型的方法也能接收另一种类型呢?

  我们一定要认识到一个Redcar 对象也是一个Car对象。在getCar()中,代码适用于 Car以及从 Car衍生出来的任何东西。在这里,我们将从一个Redcar 句柄转换成一个Car 句柄的行为叫作“上溯造型”。

六、什么是多态

    多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。

七、如何实现多态

    Java 实现多态有 3 个必要条件:继承、重写和向上转型。只有满足这 3 个条件,开发人员才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而执行不同的行为。
继承:在多态中必须存在有继承关系的子类和父类。
重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。

Shape s = new Circle();
s.draw();

在这里,我们创建了Circle 对象,并将结果句柄立即赋给一个Shape。Circle是子类属于Shape父类 的一种。
当我们调用其中一个基础类方法时(已在衍生类里覆盖):s.draw();
同样地,大家也许认为会调用Shape 的 draw(),因为这毕竟是一个 Shape句柄。那么编译器怎样才能知道该
做其他任何事情呢?但此时实际调用的是Circle.draw(),因为后期绑定已经介入(多态)

八、Java重写(覆盖)、重载、过载

重写,也称为覆盖,是指派生类重写了基础类的方法。
重载,指一个类里面的方法名相同但是参数列表不同。
过载,指在一个类中拥有多个同名但参数列表不同的方法,这样编译器就可以根据不同的参数来调用不同的方法实现过载

九、java类只允许继承一个类,但可以实现多个接口

java可以通过继承扩展接口,利用继承技术,可方便地为一个接口添加新的方法声明,也可以将几个接口合并成一个新接口

interface Monster {
	void menace();
}
interface DangerousMonster extends Monster {
	void destroy();
}

class DragonZilla implements DangerousMonster {
	public void menace() {}
	public void destroy() {}
}

interface Lethal {
	void kill();
}
interface Vampire extends DangerousMonster, Lethal {
    void drinkBlood();
}

最后Vampire接口包含了menace(),destroy(),kill(),drinkBlood()方法

十、接口和抽象类的选择

    如果事先知道某种东西会成为基础类,那么第一个选择就是把它变成一个接口。只有在必须使用方法定义或者成员变量的时候,才应考虑采用抽象类。所以就是优先选择接口。

十一、基本类型数组和对象数组的区别

无论使用的数组属于什么类型,数组标识符实际都是指向真实对象的一个句柄。
对象数组和基本数据类型数组在使用方法上几乎是完全一致的。
唯一的差别在于对象数组容纳的是句柄,而基本数据类型数组容纳的是具体的数值

十二、对象序列化

    对象的序列化是非常有趣的,因为利用它可以实现“有限持久化”。请记住“持久化”意味着对象的“生存时间”并不取决于程序是否正在执行——它存在或“生存”于程序的每一次调用之间。
通过序列化一个对象,将其写入磁盘,以后在程序重新调用时重新恢复那个对象,就能圆满实现一种“持久”效果。之所以称其为“有限”,是因为不能用某种“persistent”(持久)关键字简单地地定义一个对象,并让系统自动照看其他所有细节问题(尽管将来可能成为现实)。相反,必须在自己的程序中明确地序列化和组装对象。

十三、RTTI:运行时类型识别

一般通过类反射来实现

十四、java 深浅克隆

https://blog.csdn.net/lovezhaohaimig/article/details/80372233

十五、进程,线程的区别

    我们生活中有许许多多关于进程与线程的小栗子,比如:1.我们使用打开一个微信软件,这个时候就开启了一个进程,
当我们在微信里面进行各种操作(查看朋友圈,扫一扫...),这么多的操作就是线程。所以我们可以说“进程”是包含“线程”的,“线程”是“进程”的一个子集。

      进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。

     线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Think in java书籍阅读小结 的相关文章

  • 相关概念地址笔记

    公平锁与非公平锁 https www jianshu com p f584799f1c77 java socket编程https www cnblogs com mingforyou p 3258418 html java四种引用类型htt
  • RabbitMQ--交换机、队列、消息

    交换机 autoDelete 如果设置为true 唯一的一个交换机或者队列解绑 那么该队列将会被自动删除 交换机类型 faout 经过交换机的消息直接转到所有与这个交换器绑定的队列中 无视rounting key的存在 direct 经过交
  • RocketMQ解析

    文章目录 1 单机版消息中心 2 分布式消息中心 2 1 问题与解决 2 1 1 消息丢失的问题 2 1 2 同步落盘怎么才能快 2 1 3 消息堆积的问题 2 1 4 定时消息的实现 2 1 5 顺序消息的实现 2 1 6 分布式消息的实
  • Think in java书籍阅读小结

    一 博客说明 本篇博客为本人看完think in java这本书后 个人查漏补缺的一些知识点 记录下来作为笔记使用 二 变量初始化顺序 在一个类里 变量初始化的顺序是由变量在类内的定义顺序决定的 即使变量定义大量遍布于方法定义的后面 那些变
  • (java基础学习)异常

    1 基本概念 java语言中 将程序中发生的不正常情况称为 异常 开发过程中的语法错误和逻辑错误不是异常 2 异常事件分为两大类 1 Error 错误 2 Exception 1 Error 错误 java虚拟机无法解决的严重问题 如 JV
  • java入门二:java流程控制

    1 用户交互Scanner java util Scanner是Java5的新特性 可以通过Scanner类来获取用户的输入 基本语法 Scanner s new Scanner System in 通过Scanner类的next 与nex
  • java入门一:java语法基础

    1 注释 标识符 单行注释 多行注释 文字 文档注释 文字 注释不会被编译 写给程序员看 平时写代码一定写注释 方便别人看的懂你的代码 或者写久了自己忘了干嘛的 关键字 abstract assert boolean int class 不
  • java进阶一:java集合

    1 集合简介 集合和数组类似 都是储存元素的容器 数组像是静态容器 长度一旦创建就不能再改变 元素类型必须统一 只能通过下标去索引元素等 集合像是动态容器 集合的长度可以动态的改变 元素类型可以不一致 可以用某个映射的关系去索引元素等 ja
  • Android校招复习全书(1)-j2se

    一 九种基本数据类型的大小 以及他们的封装类 关于JAVA基本数据类型 名称 解释 长度 位 默认值 封装类 byte 字节 8 0 Byte shot 短整型 16 0 Short int 整型 32 0 Integer long 长整型
  • 关于java中File类的总结

    1 File类只是操作文件 不涉及内容 2 File类的重要方法 设置完整路径 public File String filename 删除文件 public boolean delete 判断文件是否存在 public boolean e
  • JAV学习Object类

    Obj类 首先我们要认识到 Object类是我们所有类的顶层父类 所有类都是直接或者间接的继承自他 我们可以将它new出来也就是格式 Object obj new Object 我们罗列出来objct类的常用方法然后再一一介绍 方法名 ob
  • Java中局部变量、静态变量、静态方法的有效范围与调用

    1 局部变量 定义 在成员方法中定义的变量称为局部变量 方法中的形参也可以作为局部变量 例 public void method1 n i均为局部变量 int n for int i 0 i lt 5 i System out printl
  • c# 中MD5.ComputeHash() aes加密,在Java和golang中的实现

    类似移植C 代码需求 需要加密效果一致 C 中使用了AesCryptoServiceProvider加密 文档链接 AesCryptoServiceProvider 类 下载里面代码在Visul Studio2019中可以针对原加密字符解密
  • JDK源码系列 & JAVA语言数据类型Byte

    目录 类的继承结构图 类的Diagram图 类 类的注释 源码分析 全局变量 静态内部类 构造方法 静态方法 parseByte 静态方法 valueOf 静态方法 toString 静态方法 hashCode 静态方法 decode 静态
  • Java学习(对象与类)——文档注释,生成JavaDoc文件

    目录 注释的插入 类注释 方法注释 字段注释 通用注释 包注释 生成帮助文档JavaDoc 注释的插入 javadoc实用工具从下面几项中抽取信息 模块 包 公共类和接口 公共的和受保护的字段 公共的和受保护的构造器及方法 每个文档注释 包
  • 30--子类对象的实例化过程

    在继承的操作中 对于子类的实例化也是有要求的 即子类对象在实例化之前必须首先调用父类中的构造方法 然后再调用子类自己的构造方法 实例1 定义父类 package com qwy bean public class Person privat
  • java入门四:数组

    1 数组概述 数组是最简单的数据结构 是相同类型数据的有序集合 数组描述的是相同类型的若干个数据 按照一定的先后次序排列组合而成的 数组中 每一个数据称作一个数组元素 每个数组元素可以通过一个下标来访问他们 2 数组的声明创建 首先必须声明
  • Java基础学习之函数式编程Predicate接口(JDK8)

    前言 今天继续来学习函数式编程接口之Predicate接口 1 上源码 package javax persistence criteria import java util List public interface Predicate
  • java入门六:java基础终章

    1 static关键字 静态变量和类一起加载 final修饰后的类无法被继承 2 抽象类 abstract修饰符可以用来修饰方法也可以修饰类 如果修饰方法 那么该方法就是抽象方法 如果修饰类 那么该类就是抽象类 抽象类中可以没有抽象方法 但
  • Java基础学习之并发篇:手写阻塞队列ArrayBlockingQueue

    学习目标 我们都知道在并发编程中 阻塞队列在多线程中的场景特别有用 比如在生产和消费者模型中 生产者生产数据到队列 队列满时需要阻塞线程 停止生产 消费者消费队列 对队列为空时阻塞线程停止消费 在Java中有提供不同场景的阻塞队列 那么接下

随机推荐

  • 2 RocketMQ Server安装

    RocketMQ依赖Java环境 要求有JDK 1 8以上版本 支持Windows和Linux平台 支持源码方式安装和使用已经编译好的安装包安装 我们用windows平台安装RocketMQ Server编译好的安装包 来讲解RocketM
  • 【Python打印图形问题】利用print打印一些规则的图形(通过特殊符号比如*和空格组成)

    目录 1 输出菱形 2 打印空心三角形 n 3 打印如下的空心菱形 n为边长 4 九九乘法表 1 输出菱形 描述 输入n 输出2 n 1行的菱形图形 输入 输出 示例1 2
  • 总结:常见的攻击服务器的手段

    一 拒绝服务 这是常见的一种方式 即DOS攻击或DDOS攻击 通过向某个站点服务器反复发送请求 导致无法承载大量的请求而 拒绝服务 被攻击的原因 服务器带宽不足 不能挡住攻击者的攻击流量 案例 SYN Flood 简单说一下tcp三次握手
  • matlab中查找y1与y2相近点,matlab – 寻找附近的邻居

    您可以通过使用 DelaunayTri class及其 edges和 nearestNeighbor方法来实现您的第一个想法 即选择其中点落在与Voronoi线交点的边 这里有一个x和y值的10个随机对的例子 x rand 10 1 Ran
  • tshark查看、指定网卡

    查看网卡 sudo tshark D 或是使用 ifconfig a 可以查看网卡与数据包的情况 指定网卡 sudo tshark i 网卡 例 sudo tshark i ens33
  • 05-ResultMap

    当我们在使用 MyBatis 进行数据库查询的时候 查询结果往往是以单个数据对象或一个对象列表的形式呈现的 这时候 我们可以使用 ResultMap 来告诉 MyBatis 如何将数据库查询结果映射成 Java 对象 ResultMap 是
  • C/C++中计算程序运行时间

    参考博客 C C 计算程序运行时间的代码 蔚蓝星辰mic的博客 CSDN博客 c计算程序运行时间 include
  • mysql修改表操作(DDL)

    1 修改表名 alter table 表名 rename 新表名 2 添加表字段 1 默认加到最后 alter table 表名 add 新字段 类型 字段完整性约束条件 2 指定加到某个字段之后 alter table 表名 add 新字
  • k8s-kubernetes错误集锦总结-环境搭建篇

    k8s kubernetes错误集锦 随笔 学习总结 写给以后的自己看的 所以文章会比较随意 root centos7 k8s auto kubectl get nodes The connection to the server loca
  • 【华为OD机试】太阳能板最大面积【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 给航天器一侧加装长方形或正方形的太阳能板 图中的红色斜线区域 需要先安装两个支柱 图中的黑色竖条 再在支柱的中间部分固定太阳能板 但航天器不同位置的支柱长度不同 太阳
  • NPOI组件下载、引用、基本使用

    前言 NPOI是一组dll库文件 也叫COM组件 对于Excel表格用代码操作 主要有三种方式 1 OLEDB类似于数据库的操作 需要安装AccessDataBase数据库引擎 2 Office组件 也是引用dll文件 依赖Office软件
  • openai.error.RateLimitError: You exceeded your current quota, please check your plan and billing det

    报错 此错误消息表明您已达到API的最大月支出 硬限制 这意味着您已经消耗了分配给计划的所有积分或单位 并且已经达到计费周期的限制 这种情况可能有几个原因 例如 您使用的是高容量或复杂的服务 每个请求需要消耗大量的信用额度或单位 您使用的是
  • OBS推流工具介绍及桌面录屏推流功能实现

    OBS推流工具介绍及桌面录屏推流功能实现 文章目录 OBS推流工具介绍及桌面录屏推流功能实现 1 OBS工具介绍 2 OBS工具安装及简单使用 2 1 安装步骤 2 2 简单使用介绍 3 OBS实现桌面录屏推流工具实现 4 总结 流媒体开发
  • 第十二届蓝桥杯c++b组

    问题 New Online Judge 1 空间 P1555 蓝桥杯2021初赛 空间 New Online Judge ecustacm cn 1MB 1024KB 1KB 1024B byte字节 1B byte字节 8b bit位 2
  • OpenGL平台上的Teapot绘制与渲染(代码详细注释)

    include
  • dcdc芯片效率不高的原因_DCDC变换器轻载时三种工作模式

    目前高频高效的DCDC变换器的应用越来越广泛 通常在满输出负载时 DCDC变换器工作于CCM即连续电流模式 但是 当系统的输出负载从满载到轻载然后到空载变化的过程中 系统的工作模式也会发生相应的改变 下面以降压型Buck变换器为例说明DCD
  • Qt6 for Android 环境搭建

    作者 一去 二三里 个人微信号 iwaleon 微信公众号 高效程序员 说起 Qt 各平台的开发环境搭建 最难的当属 Android 环境 因为要配置的东西比较多 而且配置过程很容易出现问题 例如 JDK Android SDK NDK 等
  • Python调用Stata

    一 软件要求 python3 Stata 17 PyCharm 二 环境配置 2 1 stata基础配置 stata激活 无论是MP版本 还是SE版本 都需要进行证书激活 即在stata安装目录下 存在LIC文件 stata中配置pytho
  • 202324读书笔记

    202323读书笔记 一枝瘦骨写空山 金农画的金石气 以一枝瘦骨 写空山之妙 一枝瘦骨写空山 金农画的金石气 文人画的真性 作者朱良志 荷风四面 人在当中 消受这世界的清凉 也回应这世界的灵韵 生命智慧 是金农之绘画艺术具有长久生命力的基点
  • Think in java书籍阅读小结

    一 博客说明 本篇博客为本人看完think in java这本书后 个人查漏补缺的一些知识点 记录下来作为笔记使用 二 变量初始化顺序 在一个类里 变量初始化的顺序是由变量在类内的定义顺序决定的 即使变量定义大量遍布于方法定义的后面 那些变