《疯狂Java讲义》读书笔记4

news2024/11/28 22:51:30

初始化块

是构造器的补充,在构造器之前执行。

是一段固定的代码,不接受任何参数。

构造器其实是一个假象,编译Java类后,初始化块会消失,当中的代码被还原到构造器中,且位于构造器前面。

静态初始化块

用 static 修饰,属于类的静态成员,不能访问非静态成员。

package com.ittht.day06;
class Root{
    static {
        System.out.println("Root中的静态初始化块");
    }
    {
        System.out.println("Root中的普通初始化块");
    }
    public Root(){
        System.out.println("Root中的无参构造器");
    }
}
class Mid extends  Root{
    static {
        System.out.println("Mid中的静态初始化块");
    }
    {
        System.out.println("Mid中的普通初始化块");
    }
    public Mid(){
        System.out.println("MId中的无参构造器");
    }
    public Mid(String ch){
        this();
        System.out.println("Mid中的带参构造器,其中的参数:"+ch);
    }
}
class Leaf extends Mid{
    static {
        System.out.println("Leaf中的静态初始化块");
    }
    {
        System.out.println("Leaf中的普通初始化块");
    }
    public Leaf(){
        super("java");//使用super显式调用父类的构造器
        System.out.println("执行Leaf中的构造器");
    }
}
public class Test {
    public static void main(String[] args) {
        new Leaf();
    }
}

输出结果为:

Root中的静态初始化块
Mid中的静态初始化块
Leaf中的静态初始化块
Root中的普通初始化块
Root中的无参构造器
Mid中的普通初始化块
MId中的无参构造器
Mid中的带参构造器,其中的参数:java
Leaf中的普通初始化块
执行Leaf中的构造器

编译时,要执行其父类的静态初始化块,一直上溯至  java.lang.Object 类(如果有静态初始化块),执行其的静态初始化块,最后才执行该类的静态初始化块。

然后对于普通初始化块,是在构造器之前执行,也是上溯至 java.lang.Object 类(如果有普通初始化块或者构造器),先执行它的初始化块,然后执行它的构造器……最后才执行该类的普通初始化块和构造器。

Java 系统加载并初始化某个类时,总是保证该类的所有父类(包括直接父类和间接父类)全部加载并初始化。

 声明和静态初始化块

package com.ittht.day06;

public class StaticInitTest {
    static {
        a=9;//语句1
    }
    static int a=10;//语句2

    public static void main(String[] args) {
        System.out.println(StaticInitTest.a);
    }
}

 其中语句 1 代表的是静态初始化块,语句 2 代表的是声明,当前代码输出的为 10。

但是交换语句 1 和语句 2 的位置,输出的值会变化。

这是因为静态初始化块和声明变量指定的初始值都是该类的初始化代码,它们的执行顺序与源程序中的顺序有关。

 当 JVM 第一次主动执行某类时,系统会在类准备阶段为该类的所有静态成员变量分配内存;在初始化阶段则负责初始化这些静态成员变量,初始化静态成员变量就是执行类初始化代码或声明类变量时指定的初始值,他们的执行顺序与源代码中的排序相同。

包装类

 

包装类是将基本数据类型首字母大写,只有 int 和 char 特殊一些,int 对应的是 Integer,char 对应的是 Character。

自动装箱:把一个基本数据类型变量直接赋给对应的包装类变量,或者直接赋值给 Object 变量。(Object 类是所有类的父类,子类对象可以直接赋给父类变量)

自动拆箱:允许直接把包装类对象赋给一个对应的基本数据类型变量。

package com.ittht.day06;

public class AutoBoxingUnboxing {
    public static void main(String[] args) {
        //把一个基本数据类型赋给Integer对象
        Integer in=5;
        //直接把一个boolean类型变量赋给Object类型的变量
        Object ob=true;
        //把一个Integer变量赋给int类型的变量
        int it=in;
        if(ob instanceof Boolean)//判断转换能不能实现
        {
            //把Object对象强制转换为Boolean类型,再赋给boolean(有先后)
            boolean oc=(boolean) ob;
            System.out.println(ob);
        }
    }
}

对于包装类的作用还不是很清楚,所以去查了一下:

  • 集合只能存放引用数据类型,不能存放基本数据类型,如 add(Object o)
  • 基本数据类型和包装类可以互相转换(自动装箱拆箱)
  • 包装类的 parse 方法可以实现基本数据类型+string 类型的相互转换
  • 函数需要传递进去的参数为 Object 类型,传入基本数据类型不行

把字符串类型转换为基本类型的值:

  • 利用包装类提供的 parseXxx(String s)静态方法(除 Character 之外的所有包装类都提供了该方法)
  • 利用包装类提供的 valueOf(String s)静态方法

将基本数据类型转换为字符串:

  • String.valueOf(primitive) 转换
  • 在基本数据类型后+“”,会自动转换为字符串
package com.ittht.day06;

public class Primitive {
    public static void main(String[] args) {
        //把字符串类型转换成基本数据类型
        String str1="123";
        int it1=Integer.parseInt(str1);
        int it2=Integer.valueOf(str1);
        System.out.println(it1);
        System.out.println(it2);
        String str2="5.69";
        float ft1=Float.parseFloat(str2);
        float ft2=Float.valueOf(str2);
        System.out.println(ft1);
        System.out.println(ft2);
        //把基本数据类型转换成字符串类型
        String ftStr=String.valueOf(2.25f);
        String dtStr=String.valueOf(8.33);
        System.out.println(ftStr);
        System.out.println(dtStr);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/524183.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot+vue家政服务管理平台(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的家政服务管理平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风…

R语言相关系数的可视化

R相关系数的可视化 文章目录 R相关系数的可视化[toc]1、序列自相关2、序列偏自相关3、简单相关4、相关图可视化5、不同方法6、其他一些修饰 1、序列自相关 自相关是指同一时间序列在不同时间 t t t上取值的相关程度,假设时间序列 { X t } t 1 T \{X_t\}_{t1}^{T} …

电子电气架构——车载以太网防火墙

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本文主要分享关于车用基础软件的内核和中间件核心技术—虚拟化的典型应用案例。 车辆内部的以太网网络是一个相对封闭的环境,没有因特网那么复杂。由于车辆…

[LeetCode周赛复盘] 第 345 场周赛20230514

[LeetCode周赛复盘] 第 345 场周赛20230514 一、本周周赛总结6430. 找出转圈游戏输家1. 题目描述2. 思路分析3. 代码实现 6431. 相邻值的按位异或1. 题目描述2. 思路分析3. 代码实现 6433. 矩阵中移动的最大次数1. 题目描述2. 思路分析3. 代码实现 6432. 统计完全连通分量的数…

多核与多处理器的区别

一、定义 多核:单块CPU上面能处理数据的芯片组的数量,比如,双核就是包括2个相对独立的CPU核心单元组,四核就包含4个相对独立的CPU核心单元组。 多处理器:主板上实际插入的cpu数量,一般有两个或者多个处理…

AutoSar之DaVinci开发环境

文章目录 前言一、AutoSar架构简介二、开发环境组成1.DaVinci Developer2.DaVinci Configurator3.SIP 总结 前言 作为初学者,接触AutoSar的开发,除了需要掌握基本的AutoSar架构知识外,还需要熟悉设计和配置AutoSar的工具链。接下来我会以Vec…

ChatGPT在小红书文案实践

今天聊一聊ChatGPT在小红书这个实际应用场景的案例。ChatGPT 以较低的门槛提高了使用者创作水平,有较高的下限,但如何创造更高质量的内容就要依靠使用者在领域的能力和AI使用技巧,作者无任何小红书推广和文案写作经验,文章内容来自…

【MySQL】C语言连接数据库

在使用数据库的时候&#xff0c;我们是操作客户端方的&#xff0c;向服务器请求数据。MySQL的端口号-3306 连接mysql需要头文件&#xff1a;#include<mysql/mysql.h> 基础连接步骤&#xff1a; 1.创建连接句柄 MYSQL mysql_con;//连接句柄 2.初始化连接句柄mysql_i…

LabVIEWCompactRIO 开发指南18 使用网络流发送消息和命令

LabVIEWCompactRIO 开发指南18 使用网络流发送消息和命令 默认情况下&#xff0c;网络流旨在最大化吞吐量&#xff0c;但可以轻松实现它们以最大化发送命令或消息的低延迟。 为本部分提供LabVIEW示例代码 命令发送器体系结构 命令发送器是CompactRIO控制器必须响应的任何命…

如何构建“Buy Me a Coffee”DeFi dApp

&#x1f978; 本教程来自官网&#xff1a;https://docs.alchemy.com/docs。对原文部分内容进行了修改。教程中所有实例经过本人实践&#xff0c;代码可见&#xff1a;https://github.com/ChuXiaoYi/web3Study 区块链技术令人惊叹&#xff0c;因为它使我们能够使用代码和软件编…

【Linux初阶】进程地址空间 | CUP与可执行程序的交互原理

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【Linux初阶】 ✒️✒️本篇内容&#xff1a;计算机空间初识&#xff08;子进程变量修改实验&#xff09;&#xff0c;感性理解进程虚拟地址空间&#xff0…

Web自动化测试工具大对决:细致比较Selenium、Protractor和Cypress

目录 前言&#xff1a; Selenium Protractor Cypress 结论 Web自动化测试步骤结构图&#xff1a; 前言&#xff1a; 随着Web应用程序的广泛使用&#xff0c;Web自动化测试工具的需求也越来越高。Web自动化测试工具可以模拟用户在Web浏览器中的行为&#xff0c;并且可以快…

NICE-SLAM学习

NICE-SLAM简介&#xff1a; 是浙大和ETH提出的一种神经隐式SLAM方法主要创新点在于解决了基于传统nerf的方案如imap无法应用在较大场景的问题。 关于该工程的前身和当前领域的主要研究现状见&#xff1a;&#xff08;知乎&#xff1a;秦通&#xff09;基于神经辐射场的&#…

接口自动化测试-Pytest核心固件Fixture详解以及应用实战

目录 前言&#xff1a; 一、Fixture概述 二、Fixture分类 在Pytest中&#xff0c;Fixture可以分为4类&#xff1a; 三、Fixture使用 下面结合实例说明如何使用Fixture。 3.1 session级别的Fixture 3.2 module级别的Fixture 3.3 function级别的Fixture 3.4 class级别的F…

2023.5.13前端设计

SpringbootVue架构设计&#xff08;一&#xff09; 项目中的文件来自B站视频&#xff08;程序员青戈&#xff09; https://www.bilibili.com/video/BV1U44y1W77D 前端设计 assets 文件夹通常用于存放静态资源文件&#xff0c;例如图像、CSS、字体等。components 文件夹通常用…

2023.5.14数据库设计

SpringbootVue架构设计&#xff08;二&#xff09; 项目中的文件来自B站视频&#xff08;程序员青戈&#xff09; https://www.bilibili.com/video/BV1U44y1W77D 数据库设计 1、article 在关系型数据库中&#xff0c;text类型和varchar类型都是用来存储字符串的数据类型。它…

【ShaderToy中图形效果转译到UnityShaderlab案例分享_Flame】

ShaderToy内的源码与效果图如下: float noise(vec3 p) //Thx to Las^Mercury {vec3 i = floor(p);vec4 a = dot(i

电动力学专题:电磁波传播时的色散效应

本文中假定波动方程的性质足够好&#xff0c;不要杠&#xff0c;杠你就输了 数学分析中的问题和XX 波动方程&#xff1a;\frac{\partial^2 u}{\partial t^2} - a^2 \frac{\partial^2 u}{\partial x^2} 0......(1) 波的色散 波动方程描写的是以恒定速度a传播的非衰减波。方程&…

【电厂用 交流三相电流继电器HJL-F93/AY 导轨安装 JOSEF约瑟供应 】

名称&#xff1a;交流三相电流继电器&#xff0c;品牌&#xff1a;JOSEF约瑟&#xff0c;型号&#xff1a;HJL-F93/AY&#xff0c;功率消耗&#xff1a;≤5W&#xff0c;触点容量&#xff1a;250V/5A&#xff0c;额定电压&#xff1a;58、100、110、220V 上海约瑟供应 交流三相…

第十四届蓝桥杯青少组选拔赛Python真题 (2022年10月30日),包含答案

目录 一、选择题 二、编程题 第十四届蓝桥杯青少组选拔赛Python真题 (2022年10月30日) 一、选择题 第 1 题 单选题 执行print (5%3) 语句后,输出的结果是 ( ) 答案:C 第2题单选题 以下选项中,哪一个是乘法运算符?() 答案:C 第3题 单选题 已知x-3,求x//2+x”2的…