Java从入门到精通 第三版 读书笔记

第一章 初识Java

  1. Java同时是编译型(编译器将Java源代码静态编译为Java字节码)和解释型(JVM将Java字节码动态解释为本地机器码)语言。
  2. Java程序的运行需要解释器(如JVM)。

因Java字节码本具有平台无关性,那么若要在一个新目标平台上运行一个Java程序,则仅需解释器做好目标平台的移植适配,即可在其上正常运行Java程序。做为Java程序的开发者,无需关心目标平台是什么,亦或在底层需要做什么。

  1. Java程序运行2步骤:
    1. 编译阶段:
      在这里插入图片描述
  1. 编译成功后,会在与源代码文件(后缀名为 .java)的同级目录下生成后缀名为 .class 的、二进制的Java字节码文件。
  2. 当源码无改动时,若干次编译操作,实际只编译1次。
2. 运行阶段:

在这里插入图片描述

仅需1次编译,但需每次解释。

  1. 手动编译Java源代码的命令:
    javac 包含main()方法入口的Java源代码文件.java
    

第二章 熟悉Eclipse开发工具

略。

第三章 Java语言基础

  1. 9数据类型:
    在这里插入图片描述

  2. 命名规则:

    1. 类名与文件名一致。

      在单个Java源代码文件中,只能定义1个与文件名同名的 public 类,其余类必须为非 public 的。

    2. 变量名:
      1. 可含字母、下划线、美元符号、数字。
      2. 开头不能为数字。
      3. 不能含Java关键字。
      4. 区分大小写。
  3. 运行程序时的内存加载情况:
    系统内存组成:
    在这里插入图片描述

    1. 程序开始执行时:
      在这里插入图片描述
    2. 代码载入内存后,开始初始化变量、执行方法体时:
      在这里插入图片描述
  4. Java中的变量:
    在这里插入图片描述

  5. Java的运算符:

    1. 7分类:
      在这里插入图片描述
    1. Java中允许将赋值运算符 = 连用。

      例:
      x = y = z = 5;
      则x、y和z的值都为5。

    2. ++a 与 a++ 的区别:

      1. ++a 在使用a变量前,先使a的值自增1后,再参与运算。
      2. a++ 在使用a变量参与运算结束后,再对a的值自增1。
    3. & 与 && 的区别:

      1. &对整个表达式从左至右依次全部判断后得出结果。又称非短路运算符。
      2. && 从左至右依次有选择地判断后得出结果。判断期间若有任一条件为假,则短路剩余条件,直接得出为假。又称短路运算符。
    4. 只有整型(byte、short、int、long、char)才可用移位运算符。

    1. 运算符优先级(由高到低排列):
      1. 自增/自减运算符。
      2. 算数运算符。
      3. 比较运算符。
      4. 逻辑运算符。
      5. 赋值运算符。
  6. 数据类型的转换:

    1. 2方式:
      在这里插入图片描述
  7. Java的注释:
    在这里插入图片描述

    1. 在Java源代码中的任何地方都可以插入注释。
    2. 在多行注释中可嵌套单行注释。
    3. 多行注释中不能嵌套多行注释。
    4. 在生成JavaDoc文档时,会读取Java源代码中的注释,作为生成其文档的原始数据。

第四章 流程控制

  1. 关于复合语句
    1. 概述:
      包含在一对花括号间的、以代码块为单位的代码。
      又称块语句。
    2. 在复合语句内声明的变量的作用域,仅限于在此复合语句块内(包括嵌套的复合语句块内)。
      不能在此复合语句块外使用,因为其超出了此变量作用域范围。
  2. 关于多分支语句(switch-case)
    1. 允许的表达式类型:

      1. 整型(short、int、long)。
      2. 字符型(char)。
      3. 字符串型(String)。

        仅JDK 1.7及以后支持。

    2. 可省略 default 语句、break 语句。

  3. 关于循环语句
    1. do-while 与 while 的区别:
      1. do……while…… 无论执行循环体的条件是否满足,至少执行1次。
      2. while 当没有任何1次能满足循环体的执行条件时,永不执行。
    2. 基于for循环的死循环写法:
      for(;;) {// 代码段
      }
      
    3. foreach 不是Java关键字。

第五章 字符串

  1. 关于字符串

    1. 字符串对象的创建2方式:

      1. 将双引号引住的数值赋值给String型变量 此方法创建字符串对象时,会先去JVM堆内存上的字符串常量池中根据字符串内容查找是否存在此字符串对象。若有,则直接从池中返回这个对象的内存地址;否则,先JVM堆内存上的字符串常量池中创建这个字符串对象,然后再返回这个对象的内存地址。
        在这里插入图片描述
      2. 使用String类的构造方法 此方法创建字符串对象时,与前一种方式大体一致。不同的是,当未在字符串常量池中找到具有相同内容的字符串对象时,会先在JVM堆内存中创建这个字符串对象,然后再返回这个对象的内存地址。
        在这里插入图片描述

        关于String类的构造方法:

    2. 字符串拼接:

      1. 循环不要使用+号拼接字符串。会频繁创建很多的字符串对象,性能差。

      2. 在单线程环境下创建内部无锁的StringBuilder类的对象来拼接字符串,以复用同一字符串对象,加快拼接速度。
        在多线程环境下创建内部加锁的StringBuffer类的对象来拼接字符串,以保证线程安全。

        StringBuilder类与StringBuffer类均在原始对象上做拼接,不会创建额外的字符串对象。

    3. String类的常用方法:

      方法名概述入参返回值备注
      length获取字符串对象的总长度。-字符串对象的总长度。
      indexOf获取某字符串在指定字符串中首次出现的下标索引。需要查找的字符串。查找的字符串在指定字符串中首次出现的下标索引。
      > 若没有查找到字符串,则返回-1。
      下标计数从0开始。
      lastIndexOf获取某字符串在指定字符串中最后一次出现的下标索引。需要查找的字符串。查找的字符串在指定字符串中最后一次出现的下标索引。
      > 若没有查找到字符串,则返回-1。
      下标计数从0开始。
      charAt获取字符串中指定下标索引位置的字符。需要获取字符的下标索引值。char字符类型的对象。若传入的下标索引超出字符串的总长度将会抛出StringIndexOutOfBoundsException异常。
      substring截取从指定下标索引开始一直到字符串末尾的字符串。指定开始截取的下标索引。截取后的新字符串对象。
      substring截取从指定下标索引开始和从指定下标结束的字符串。1. 指定开始截取的下标索引。
      2. 指定截取结束的下标索引。
      截取后的新字符串对象。指定开始截取下标索引位置的字符会保留,而指定结束截取下标索引位置的字符将丢弃。
      指定截取结束的下标索引是从下标索引0的位置计数,而非从指定开始截取的下标索引开始计数。
      trim去除字符串首尾的空格。-去除首尾空格的新字符串对象。字符串中间的任何空格都不会被去除
      replace将字符串中某些字符或字符串内容,全局替换为指定的字符或字符串内容。1. 要替换的字符或字符串。
      2. 替换为的字符或字符串。
      替换后的新字符串对象。
      > 若要替换的字符或字符串没有出现在原字符串中,则返回原字符串。
      若要替换的字符或字符串在原字符串中出现多次,将会全局替换
      startWith判断某字符串中是否以指定的字符串开头。指定的开头字符串。布尔值:
      1. true 字符串中以指定的字符串开头。
      2. false 字符串中不以指定的字符串开头。
      endWith判断某字符串中是否以指定的字符串结尾。指定的结尾字符串。布尔值:
      1. true 字符串中以指定的字符串结尾。
      2. false 字符串中不以指定的字符串结尾。
      equals比较两个字符串对象的内容是否一致。要比较的另一字符串对象。布尔值:
      1. true 两字符串内容一致。
      2. false 两字符串内容不一致。
      使用==符号比较的是两字符串的内存地址,所以结果大多为false
      equalsIgnoreCase忽略大小写来比较两个字符串对象的内容是否一致。参与比较的另一字符串对象。布尔值:
      1. true 两字符串内容一致。
      2. false 两字符串内容不一致。
      compareTo按照字典顺序比较两个字符串。参与比较的另一字符串对象。整型值:
      1. 负整数 字符串对应ASCII码表的位置比参数中给定字符串对应ASCII码表的位置靠前。
      2. 正整数 字符串对应ASCII码表的位置比参数中给定字符串对应ASCII码表的位置靠后。
      3. 0 两字符串内容一致。
      例:
      在ASCII码表中,字符a在前,字符b在后。那么:
      + “b”.compareTo(“a”);返回1
      + “a”.compareTo(“b”);返回-1
      + “a”.compareTo(“a”);返回0
      toLowerCase将字符串中所有的字符改为小写字母。要转换的字符串对象。转换后的新字符串对象。数字或非字符不受影响。
      toUpperCase将字符串中所有的字符改为大写字母。要转换的字符串对象。转换后的新字符串对象。数字或非字符不受影响。
      split按照指定的字符或字符串将字符串分割为字符串数组。指定的分隔符(字符或字符串)。字符串数组。-
      format用格式化的方法创建字符串。1. 格式字符串。
      2. 格式字符串中格式符号对应的参数。
      以格式字符串为规范创建的新字符串对象。可用于数据类型、进制、日期时间、文本的格式化,生成特定的字符串内容。
      > 例:
      > 以下示代码将返回:
      > hello, world: 2012。
      css String.format("hello, %s: %d", "world", 2012);

      replace() 与 replaceAll() 的异同点:

      1. 均可以副本的方式全局替换字符串。
      2. replace()仅支持以字符、字符串全局替换;replaceAll()还支持以正则表达式全局替换。
  2. 关于Java的正则表达式

    例:
    以下将匹配1个前1~3位是数字(没有任何数字或最多只能有3个数字)、最后1位是任意字母的字符串。

    String reg = "^\\d{0,3}[A-Za-z]{1}$";
    System.out.print("123A".matches(reg)); // 输出 true
    

第六章 数组

  1. 关于数组

    1. 分类:
      在这里插入图片描述

    2. 二维数组示例:

      String arr[][] = new String[3][2]; // 定义一个3行2列的二维数组for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {arr[i][j] = String.format("我是第%d行第%d列", i + 1, j + 1);}
      }Stream.of(arr).forEach(item -> {log.info(String.format("我是行:%s,%s。", item[0], item[1]));
      });
      
      我是行:我是第1行第1列,我是第1行第2列。
      我是行:我是第2行第1列,我是第2行第2列。
      我是行:我是第3行第1列,我是第3行第2列。
      

  2. Arrays 类的常用方法:

    方法名概述方法定义备注
    Arrays.fill将某值逐位填充进某数组中。java /** * @param a 目标填充数组 * @param val 目标填充数字 */ public static void fill(int[] a, int val) { …… } > 不同的基本数据类型有不同的重载方法,此处仅写出了操作整型数组的方法定义。
    例:
    以下示例代码会将10逐位填充进长度为5的空数组中。
    java int arr[] = new int[5]; Arrays.fill(arr, 10);
    Arrays.sort升序排序数组。java /** * @param a 待排序的目标数组对象 */ public static void sort(int[] a) { …… } > 不同的基本数据类型有不同的重载方法,此处仅写出了操作整型数组的方法定义。
    底层基于双轴快排 DualPivotQuicksort。
    Arrays.copyOf以复制指定数组内元素的方式,创建新数组。java /** * @param original 原数组 * @param newLength 要复制的长度 * @return 复制后的新数组 */ public static int[] copyOf(int[] original, int newLength) { …… } > 不同的基本数据类型有不同的重载方法,此处仅写出了操作整型数组的方法定义。
    例:
    以下示例代码,会基于已有数组 arr 中的 3 个元素,创建新数组 newArr。
    当选择范围未超原数组长度时,正常参照创建。
    当选择范围超出原数组长度时,超出位的元素将以 0 代之。
    java int arr[] = new int[]{3, 6, 8}; int newArr[] = Arrays.copyOf(arr, 5); // 填充后,newArr中的元素为:3, 6, 8, 0,

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

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

相关文章

【零基础学习CAPL】——Panel之弹窗的创建与使用

🙋‍♂️【零基础学习CAPL】系列💁‍♂️点击跳转 ——————————————————————————————————–—— 从0开始学习CANoe使用 从0开始学习车载测试 相信时间的力量 星光不负赶路者,时光不负有心人。 文章目录 1.概述2. panel制作2.1 panel窗体…

C# OpenCV机器视觉:对位贴合

在热闹非凡的手机维修街上&#xff0c;阿强开了一家小小的手机贴膜店。每天看着顾客们自己贴膜贴得歪歪扭扭&#xff0c;不是膜的边缘贴不整齐&#xff0c;就是里面充满了气泡&#xff0c;阿强心里就想&#xff1a;“要是我能有个自动贴膜的神器&#xff0c;那该多好啊&#xf…

推荐一个免费的、开源的大数据工程学习教程

在当今信息爆炸的时代&#xff0c;每一个企业都会产生大量的数据&#xff0c;而大数据也已经成为很多企业发展的重要驱动力&#xff0c;然而如何有效得处理和分析这些海量的数据&#xff0c;却是一个非常有挑战的技术。 今天推荐一个免费的数据工程教程&#xff0c;带你系统化…

2月10日QT

作业> 将文本编辑器功能完善 include "widget.h" #include "ui_widget.h" #include <QMessageBox> //消息对话框类 #include <QFontDialog> //字体类对话框 #include <QFont> //字体类 #include <QColorDialog> //颜…

【Java】多线程和高并发编程(四):阻塞队列(上)基础概念、ArrayBlockingQueue

文章目录 四、阻塞队列1、基础概念1.1 生产者消费者概念1.2 JUC阻塞队列的存取方法 2、ArrayBlockingQueue2.1 ArrayBlockingQueue的基本使用2.2 生产者方法实现原理2.2.1 ArrayBlockingQueue的常见属性2.2.2 add方法实现2.2.3 offer方法实现2.2.4 offer(time,unit)方法2.2.5 p…

【Java】多线程和高并发编程(三):锁(下)深入ReentrantReadWriteLock

文章目录 4、深入ReentrantReadWriteLock4.1 为什么要出现读写锁4.2 读写锁的实现原理4.3 写锁分析4.3.1 写锁加锁流程概述4.3.2 写锁加锁源码分析4.3.3 写锁释放锁流程概述&释放锁源码 4.4 读锁分析4.4.1 读锁加锁流程概述4.4.1.1 基础读锁流程4.4.1.2 读锁重入流程4.4.1.…

【R语言】相关系数

一、cor()函数 cor()函数是R语言中用于计算相关系数的函数&#xff0c;相关系数用于衡量两个变量之间的线性关系强度和方向。 常见的相关系数有皮尔逊相关系数&#xff08;Pearson correlation coefficient&#xff09;、斯皮尔曼秩相关系数&#xff08;Spearmans rank corre…

编译和链接【一】

文章目录 编译和链接【一】从翻译单元到二进制文件 编译和链接【一】 在我大一的时候&#xff0c; 我使用VC6.0对C语言程序进行编译链接和运行 &#xff0c; 然后我接触了VS&#xff0c; VS code等众多IDE&#xff0c; 这些IDE界面友好&#xff0c; 使用方便&#xff0c; 例如…

Linux: ASoC 声卡硬件参数的设置过程简析

文章目录 1. 前言2. ASoC 声卡设备硬件参数2.1 将 DAI、Machine 平台的硬件参数添加到声卡2.2 打开 PCM 流时将声卡硬件参数配置到 PCM 流2.3 应用程序对 PCM 流参数进行修改调整 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&am…

ansible使用学习

一、查询手册 1、官网 ansible官网地址&#xff1a;https://docs.ansible.com 模块查看路径&#xff1a;https://docs.ansible.com/ansible/latest/collections/ansible/builtin/index.html#plugins-in-ansible-builtin 2、命令 ansible-doc -s command二、相关脚本 1、服务…

jmap使用

常用命令 jmap -heap PID jmap -histo PID | head -20 jmap -dump:formatb,fileheap_dump.hprof PID jmap 是 Java 开发工具包&#xff08;JDK&#xff09;提供的一个命令行工具&#xff0c;用于生成 Java 进程的内存映射信息。它可以帮助开发者分析 Java 堆内存的使用情况…

基于 SpringBoot 和 Vue 的智能腰带健康监测数据可视化平台开发(文末联系,整套资料提供)

基于 SpringBoot 和 Vue 的智能腰带健康监测数据可视化平台开发 一、系统介绍 随着人们生活水平的提高和健康意识的增强&#xff0c;智能健康监测设备越来越受到关注。智能腰带作为一种新型的健康监测设备&#xff0c;能够实时采集用户的腰部健康数据&#xff0c;如姿势、运动…

docker离线安装及部署各类中间件(x86系统架构)

前言&#xff1a;此文主要针对需要在x86内网服务器搭建系统的情况 一、docker离线安装 1、下载docker镜像 https://download.docker.com/linux/static/stable/x86_64/ 版本&#xff1a;docker-23.0.6.tgz 2、将docker-23.0.6.tgz 文件上传到服务器上面&#xff0c;这里放在…

从零到一:我的元宵灯谜小程序诞生记

缘起&#xff1a;一碗汤圆引发的灵感 去年元宵节&#xff0c;我正捧着热腾腾的汤圆刷朋友圈&#xff0c;满屏都是"转发锦鲤求灯谜答案"的动态。看着大家对着手机手忙脚乱地切换浏览器查答案&#xff0c;我突然拍案而起&#xff1a;为什么不做一个能即时猜灯谜的微信…

CSS3+动画

浏览器内核以及其前缀 css标准中各个属性都要经历从草案到推荐的过程&#xff0c;css3中的属性进展都不一样&#xff0c;浏览器厂商在标准尚未明确的情况下提前支持会有风险&#xff0c;浏览器厂商对新属性的支持情况也不同&#xff0c;所有会加厂商前缀加以区分。如果某个属性…

2025.2.8——二、Confusion1 SSTI模板注入|Jinja2模板

题目来源&#xff1a;攻防世界 Confusion1 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;查看网页源码信息 step 2&#xff1a;模板注入 step 3&#xff1a;构造payload&#xff0c;验证漏洞 step 4&#xff1a;已确认为SSTI漏洞中的Jinjia2…

数字电路-基础逻辑门实验

基础逻辑门是数字电路设计的核心元件&#xff0c;它们执行的是基本的逻辑运算。通过这些基本运算&#xff0c;可以构建出更为复杂的逻辑功能。常见的基础逻辑门包括与门&#xff08;AND&#xff09;、或门&#xff08;OR&#xff09;、非门&#xff08;NOT&#xff09;、异或门…

HC32功能复用说明

目录 引脚有哪些功能如何选择功能代码 引脚有哪些功能 数据手册中&#xff0c;每一个引脚功能有至多64个&#xff0c;对应列Func0~Func63 其中&#xff0c;Func0 ~Func31在《表 2-1 引脚功能表》中列出 Func32~Func63在《表 2-2 Func32~63 表》中列出。 Func32~Func63中的功…

数据库管理-第293期 奇怪的sys.user$授权+(20250210)

数据库管理293期 2025-02-10 数据库管理-第293期 奇怪的sys.user$授权&#xff08;20250210&#xff09;1 清空shared pool2 SR反馈总结 数据库管理-第293期 奇怪的sys.user$授权&#xff08;20250210&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&#xff09…

AutoMQ 如何实现没有写性能劣化的极致冷读效率

前言 追赶读&#xff08;Catch-up Read&#xff0c;冷读&#xff09;是消息和流系统常见和重要的场景。 削峰填谷&#xff1a;对于消息来说&#xff0c;消息通常用作业务间的解耦和削峰填谷。削峰填谷要求消息队列能将上游发送的数据堆积住&#xff0c;让下游在容量范围内消费…