Java核心技术卷Ⅰ-第三章Java的基本程序设计结构

news2024/11/25 4:52:48

重点

1.数据类型

2.运算符

3.字符串

4.控制流程

5.数组


1.数据类型


  • 整型:Java程序必须保证在所有机器上都能得到相同的运行结果,所以各种数据类型的取值范围是固定的;在C/C++中,int和long类型的大小与目标平台相关
类型存储需求取值范围
int4字节-2147483648-2147483647
short2字节-32768-32767
long8字节-9223372036854775808-9223372036854775807
byte1字节-128-127
  • 浮点类型:浮点数类型不适用无法接受舍入误差的金融计算,比如2.0-1.1会打印0.8999999999999999而不是期望的0.9,这是因为浮点数采用二进制表示,而在二进制系统中无法精确表示分数1/10
类型存储需求取值范围
float4字节大约 ± 3.40282347 ∗ 1 0 38 \pm3.40282347*10^{38} ±3.402823471038
double8字节大约 ± 1.79769313486231570 ∗ 1 0 308 \pm1.79769313486231570*10^{308} ±1.7976931348623157010308
  • char类型:
    • 该类型原本用于表示单个字符,现在有些Unicode字符可以使用一个或两个char值描述
    • 该类型的值可以表示为16进制值,范围\u0000-\uFFFF
  • boolean类型:在Java中整数型和布尔值不能相互转换,而在C++中数值和指针都可以转换为布尔值
if(x=0){
    ...  // 该代码在C++中不会报错,在Java中会报错,因为x=0不能转换为布尔值
}

2.运算符


  • 整数被0除将产生异常,浮点数被0除会得到无穷大或NaN结果
System.out.println(10.0 / 0);  // Infinity
System.out.println(10 / 0);  // 报错
  • 如果一个计算溢出,数学运算符只是返回错误结果不会提示;使用Math库会产生异常,然后就可以捕获该异常或者让程序终止
System.out.println(1000000000 * 3);  // -1294967296
System.out.println(Math.multiplyExact(1000000000, 3));  // 报错
  • 数据类型之间的转换:

    • 下图中实线表示无信息丢失的转换,虚线表示可能存在精度丢失的转换

    在这里插入图片描述

    int n = 123456789;
    float f = n;
    System.out.println(f);  // 1.23456792E8
    
    • 试图将一个数强制转换为另一个类型,但是又超出了目标类型的范围,就截断为完全不同的数:
    double x = 9.01;
    int k = (int)x;
    System.out.println(k);  // 9
    System.out.println((byte) 270);  // 截断为14
    
    • 如果运算符左侧和右侧类型不一致,会发生强制转换:
    int x = 4;
    x += 3.5;  // 相当于x = (int)x+3.5 
    System.out.println(x);  // 输出7
    
  • 位运算符:

    • &&||是短路运算符:如果第一个操作数已经确定表达式的值,第二个操作数无需计算
    • $|不采用短路方式求值,如果应用在布尔值上就得到布尔值,应用在整数中就得到整数值
    boolean a = false;
    boolean b = true;
    System.out.println(a & b);  // false
    int a = 0b001;
    int b = 0b010;
    System.out.println(a | b);  // 3(即0b011)
    
    • >>>会用0填充高位(>>使用符号填充高位),不存在<<<运算符

3.字符串


  • 空串“”是一个Java对象,它具有自己的长度(0)和内容(空)。同时String变量还可以存储null,表示目前没有和任何对象关联
  • 字符串属于CharSequence接口,所以以CharSequence接口作为形参时可以传入String类型作为实参
  • nextLine方法读取下一行输入,next方法读取下一个单词(以空白符为分隔符)

4.控制流程


  • Java不能再嵌套的两个块中声明相同的变量,C++可以:
{
    int i;
     {
         int a;
         int i;  // 报错
     }
}
  • 循环中使用浮点数可能会无法终止,因为存在舍入误差导致达不到精确的最终值:
for(double x = 0; x != 10; x += 0.1){
    System.out.println("float存在误差");  // 一直打印
}
  • switch的使用在不同的JDK版本是有区别的:

    • switch分为表达式和语句,对于Java11及之前的版本而言,只有语句,而在Java14中可以使用表达式:
    String name = "psj";
    // switch语句
    int demo = 1;
    switch (name) {
        case "psj":   // 注意case后面不能写一个范围,而是一个具体的值
            demo = 2;
            break;
        default :
            demo = 3;
            break;
    }
    // switch表达式(Java14才能使用->)
    int demo = switch(name){
    	case "psj" -> 2;
        default -> 1;  // 不能写为return 1
    }
    
    • 在Java14中,case可以使用逗号将多个字符串分隔:
    String s = "";
    switch(s){
        case "psj", "psj2" -> ...
    }
    
  • 在Java中可以使用带标签的break(类似goto):

int a = 0, b = 0;
read_data:  // 此时while为带标签的语句块,如果满足if(b == 100)就会跳转到带标签的语句块末尾
while (a < 100) {
    a++;
    b += 50;
    if (b == 100) {
        break read_data;
    }
}
System.out.println(a);  // 3
System.out.println(b);  // 100

5.数组


  • new int[0]new int[]{}可以创建长度为0的数组,并且长度为0不等于null

  • 要使用forEach循环必须是一个数组或者是实现了Iterable接口的对象

  • Java中可以将数组变量拷贝到另一个数组变量(即两个变量引用同一个数组)

int[] a = {1,2};
int[] b = a;
b[0] = 3;
System.out.println(a[0]);  // 3
System.out.println(b[0]);  // 3
  • main方法中常见的String[] args的含义如下:
在命令行输入:java Test -g a b
agrs[0]:"-g" agrs[1]:"a" agrs[2]:"b"
  • 要快速打印二维数组可以使用Arrays.deepToString(xxx)
int[][] a = {{1, 2}, {2, 3}};
System.out.println(Arrays.deepToString(a));  // [[1, 2], [2, 3]]
  • 要创建一个不规则的数组(即每一行的长度不同),使用int[][] a = new int[10][]

其他知识点


  • 类名必须以字母开头(可以使用$_开头,但是标准命名是以大写字母开头,如果名称有多个单词组成则每个单词首字母大写),后面可以跟字母和数字的任意组合(也可以使用$_,但是没有意义),长度没有限制,但是不能使用Java保留字

  • 作为变量名的标识符由字母(可以是某种语言中表示字母的任意Unicode字符)、数字(表示数字的Unicode字符也可)、货币符号($、¥等)和标点连接符(_和波浪线等)

  • 从Java10开始,如果可以从变量的初始值推断变量类型,则不需要声明类型,使用var即可:

var a = 10;
  • final表示该变量只能被赋值一次,赋值后就不能更改,并且全部使用大写表示

  • java.math包中,BigInteger类实现任意精度的整数运算,BigDecimal实现任意精度的浮点数运算,这两个类都可以处理包含任意长度数字序列的数值

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

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

相关文章

基于粒子群算法的线性规划问题求解matlab程序

基于粒子群算法的线性规划问题求解matlab程序 1 基本粒子群算法流程 粒子群算法基于“种群”和“进化”的概念&#xff0c;通过个体间的协作与竞争&#xff0c;实现复杂空间最优解的搜索&#xff0c;其流程如下&#xff1a; &#xff08;1&#xff09;初始化粒子群&#xff…

Apache Maven

Apache Maven简介安装Eclipse中安装内置的Maven插件Maven官网下载&#xff0c;直接安装在电脑上Maven安装目录结构bin目录boot目录conf目录lib目录Maven生命周期与命令Maven生命周期clean&#xff1a;清理cleanup&#xff1a;清理所有default&#xff1a;默认site&#xff1a;站…

做数据集增强时,训练一半出现IndexError: tuple index out of range这种错误,不知道怎么改,有神仙赐教一下嘛?

在用YOLOv5做图像训练时&#xff0c;首先做了数据集的增强&#xff0c;但是增强中出现了如下的错误 首先出现这样的警告 (A:/stdy py37-g/agu_img.py:153: DeprecationWarning: An exception was ignored while fetching the attribute __array_interface__ from an object of …

maven部署方案之分离业务包

一、思想&#xff1a; 通过将业务包和公共包分离&#xff0c;集中管理所有包&#xff0c;打包时只构建业务包减少项目包的大小和传输时间。 为了观测稳定性&#xff0c;暂通过环境区分&#xff0c;较为频繁的联调环境采用该方式&#xff0c;测试、预发、正式暂保持一体化打包…

golang实现andflow流程引擎

1、andflow引擎 andflow_js可以实现在Html端设计流程&#xff0c;并将设计结果保存为json模型&#xff0c;andflow可以用于设计业务流程、数据处理流程、工作流、控制流等一切可流程化的过程。 由于golang具备高效、跨平台、并且还能够直接编译成可执行文件&#xff0c;这些优…

selenium 找不到元素:Unable to find element on closed window

浏览器&#xff1a;IE 报错信息&#xff1a; Unable to find element on closed window Unable to get browser 过程&#xff1a;登录》跳转页面&#xff08;同窗口&#xff09;》点击备份按钮 已知代码没有改过&#xff0c;而且部署到多个机子上&#xff0c;很多机子没有问…

C++11(一)

&#x1f9f8;&#x1f9f8;&#x1f9f8;各位大佬大家好&#xff0c;我是猪皮兄弟&#x1f9f8;&#x1f9f8;&#x1f9f8; 文章目录一、列表初始化initializer_list二、声明1.auto2.decltype3.nullptr三、C11 STL中的变化1.array2.forward_list3.STL其他变化四、C关键字新功…

NOIP 装箱问题

题目&#xff1a;[NOIP2001]装箱问题 &#xff0c;哈哈&#xff0c;我们今天来看一道很古老的题嘛&#xff0c;这是选自NOIP上的一道题&#xff0c;好了&#xff0c;我们一起来看看题意吧&#xff1a; 考虑到直接复制题目&#xff0c;或者截屏的方式不是很方便阅读&#xff0…

常见的网络协议

目录 一、TCP/IP协议簇 二、网络设备与五层模型对应关系&#xff1a; 三、常用网络协议总结&#xff08;TCP/IP协议簇&#xff09; 四、应用层服务协议 五、传输层协议组 TCP_UDP 六、网络层协议 IP_ICMP_ARP 七、物理层协议 MAC子层协议 一、TCP/IP协议簇 OSI七层模型…

视频怎么转换为音频文件?快来掌握这几种方式

大家平时在下载网课资源进行学习的时候&#xff0c;看久了眼睛也会开始疲劳&#xff0c;而且有些视频的画面看起来很枯燥。其实我们可以使用一些软件把视频中的音频分离出来&#xff0c;直接收听音频也可以学到知识&#xff0c;而且我们还可以处理其他的事情&#xff0c;是不是…

《计算机体系结构量化研究方法第六版》1.5 集成电路中的功耗和能耗趋势

1.5.1 功耗和能耗&#xff1a;系统视角 Q1&#xff1a;处理器需要的最大功耗是多少&#xff1f; 如果处理器的预期功耗大于电源系统能够提供的功耗&#xff08;试图汲取的电流大于电源系统可以提供的电流&#xff09;&#xff0c;通常会导致电压下降而让器件无法工作。在峰值…

食谱类小程序开发,升级美食服务质量

网络时代&#xff0c;人们可以在网上快速获取到各种资源信息&#xff0c;疫情的影响让人们被封控在家里出不了门&#xff0c;这也就给人们提供了一个回归厨房的契机&#xff0c;很多人在此期间开启了自己的美食制作之旅&#xff0c;朋友圈也变成了一个美食分享社区&#xff0c;…

AlphaFold2源码解析(1)--安装使用

AlphaFold2源码解析(1)–安装使用 AlphaFold2有两种安装方式&#xff1a; 具体可以参考我之前写的博客&#xff1a; Alphafold docker 安装: 参考GitHub&#xff1a;https://github.com/deepmind/alphafold 一步一步安装就可以了&#xff0c; Alphafold 非docker 安装指南 如…

基于PHP+MySQL蚕豆酱厂管理系统的设计与实现

论文阐述了安庆市胡玉美蚕豆酱厂管理系统的设计与实现&#xff0c;并对该系统的需求分析及系统需要实现的设计方法作了介绍。该系统的基本功能包括用户登录&#xff0c;管理员信息管理&#xff0c;车间主任信息管理&#xff0c;采购员信息管理&#xff0c;生产计划管理&#xf…

【正点原子FPGA连载】 第十七章 HDMI彩条显示实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十七章 HDMI彩…

基于PLC控制四自由度气动式机械手设计

目 录 1 绪论 1 1.1 机械手的概述 1 1.2 机械手的发展史 1 1.3 气动技术及气动机械手的发展过程 2 1.4 机械手未来的发展趋势 3 1.5 本课题研究内容 4 1.6 课题研究的意义 4 2 机械手的总体设计方案 6 2.1 机械手的工作原理及系统组成 6 2.2 机械手基本形式的选择 7 2.3 驱动机…

VO, DTO, DO, PO四胞胎傻傻分不清楚?那快来看这篇文章!

概念 VO(View Object) 视图对象&#xff0c;用于展示层&#xff0c;作用是把某个指定页面&#xff08;或组件的所有数据封装起来&#xff09;。 DTO(Data Transfer Object) 数据传输对象&#xff0c;这个概念来源于J2EE的设计模式&#xff0c;原来的目的是为了给EJB&#x…

第2关:创建表

为了完成本关任务&#xff0c;你需要掌握&#xff1a;如何使用HBase shell指令创建表。 Hbase shell操作 启动HBase之后&#xff0c;我们输入hbase shell进入到Hbase shell命令行窗口&#xff1a; hbase shell 在这里我们输入hbase shell会启动一个加入了一些Hbase特有命令的…

list模拟实现(15)

目录 1、简单框架 1、list.h 2、test.cpp 2、list迭代器实现 1、list.h 2、test.cpp 3、思考 1、迭代器中的拷贝构造和赋值重载是否需要自己实现&#xff1f;析构呢&#xff1f; 2、体会类型的力量 3、const迭代器实现 1、list.h 2、test.cpp 4、重载迭代器的oper…

【附源码】计算机毕业设计JAVA知识库系统

【附源码】计算机毕业设计JAVA知识库系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA mybatis …