2 Java的基本程序设计结构(基本语法1)

news/2024/9/13 23:25:32/ 标签: java, python, 开发语言

文章目录

  • 前言
  • 一、数据类型
    • 0 与Python的一些区别
    • 1 基本数据类型
      • (1)整型
      • (2)浮点数类型
      • (3)字符(char)类型
      • (4)布尔类型(true、false)
      • (5)代码示例
    • 2 引用数据类型
  • 二、变量与常量
    • 1 变量
    • 2 常量(*)
    • 3 枚举类型变量(*)
    • 4 变量的作用域
  • 三、变量和类起名规范
    • 1 硬性要求(变量、方法、类通用)
    • 2 软性要求(不遵守没关系,只是一些建议)
      • (1)小驼峰命名法:方法、变量
      • (2)大驼峰命名法:类名、文件名
      • (3)下划线分隔法(我自己习惯的):变量、方法
  • 四、java重要的两个包 java.lang和 java.util
  • 五、输入与输出方法
    • 1 简单打印输出 System.out.println("hello world!");
    • 2 格式化打印输出
      • (1)System.out.printf(formatString, arg1, arg2, ...);
      • (2)格式化语法
      • 示例详解
        • 示例 1:基本浮点数格式化
        • 示例 2:整数格式化
        • 示例 3:字符串格式化
      • 综合示例
    • 3 输入(键盘录入)Scanner类()
  • 六、生成随机数(Random类)
    • (1)nextInt(int bound): 生成一个范围在0(包括)到指定bound(不包括)之间的随机int值。不指定bound就是随机生成一个int值
    • (2)nextDouble(): 生成一个范围在0.0(包括)到1.0(不包括)之间的随机double值。不能指定范围
  • 七、运算符
    • 1 算术运算符
      • 补充:类型的隐式转换和强制转换(!!!重要)
        • (1)隐式转换(自动类型提升)
        • (2)强制转换 --- 数据类型互相转换
        • (3)字符串的 + 连接操作 和 字符的 + 运算
          • 字符串(String)的 + 连接操作
          • 字符(char)的 + 运算
    • 2 自增自减运算符
    • 3 赋值运算符
    • 4 比较(关系)运算符
    • 5 逻辑运算符
      • (1)四种常规逻辑运算符
      • (2)两种短路逻辑运算符
    • 6 三元(条件)运算符
    • 6 位运算符(*)
  • 八、判断与循环语句
    • 1 判断分支结构 if 和 switch
      • (1)if 分支结构
      • (2)switch分支结构
    • 2 循环结构
      • (1)for循环
      • (2)while循环
      • (3)do...while循环
      • (4)循环控制语句break和continue
  • 九、练习
    • 1 逢七过
    • 2 求平方根
    • 3 求质数
    • 4 猜数字小游戏


前言


一、数据类型

java数据类型分为两大类:基本数据类型和引用数据类型

  • 基本数据类型:整数、浮点数、字符(char)、布尔类型
  • 引用数据类型:封装在类对象里面的数据类型,字符串(不可变)、数组(可变)、集合(可变)、字典(可变)

0 与Python的一些区别

我们主要的目的就是为了搞清楚这些和Python里面有什么异同。
首先,Python传参传的全是传引用。

给出java里面传参规则:

  • 基本数据类型是传值:即传递的是这个变量的值的副本;

  • 引用数据类似是传引用:一般情况下传引用会修改一个就会影响另一个;但如果在类里面规定不可修改,其实也可以实现不影响另一个的;
    典型例子就是java里面的字符串是引用数据类型,但是不可变;对原字符串修改其实是新创建一个字符对象在赋值过去,并不是在原来的内存地址上面修改。

基本数据类型需解释一下这里和Python的区别,用整数来说吧。
Python里面整数是不可修改的,传的是引用,

  • 修改是新创建一个整数对象在赋值过去;
  • 且在函数中传参于全局变量与局部变量的关系和Python不可变数据类型的特殊修改方式,导致在函数内部修改不会影响外部的全局变量,因为内部只是一个局部变量;下面代码中的两个 a 实际上是两个不一样的东西,一个放在全局空间,一个放在局部空间。

但在java中,基本数据类型传的是值的副本。什么叫副本就是一个完全不相关的东西,修改一个不会影响另一个的那种。

  • 先说一下修改吧,java中基本数据类型是存在一个栈中,单独没有独立的内存地址(你当他有也行),我们就当它有吧,进行修改操作就直接是在原内存上修改值就可以了。意思理解成假设java中整数有地址,a = a + 1这种操作是在原地址上操作。
  • 然后就是函数传参,由于传参传的是值的副本,那函数内怎么修改肯定不会影响外面的了。
python">a = 10
def f(a):a = a+1
f(a)
java">public class Main {public static void main(String[] args) {int a = 10;modifyValue(a);     // 11   内部自动新创建了一个a的值的副本变量传了进去System.out.println("Outside method: " + a);  // 10}public static void modifyValue(int x) {   x = x + 1;System.out.println("Inside method: " + x);}
}

在这个例子中,a 是一个整数变量,初始值为10。当我们将 a 传递给 modifyValue 方法时,传递的是 a 的值的副本(即10)。在 modifyValue 方法内部,对参数 x 的修改不会影响外部的 a。这就是Java中基本类型按值传递的体现。
python里面用全局变量与局部变量解释,java里面更简单直接用传的是值的副本就可以解释了。

相信还有一个疑问,在Python中的不可变和java中的不可变什么意思;
整数在Python和java中都是不可变的,不可变指的是一个数据类型创建了,它的内存地址就不能改变。Python中直接就硬到底,整数对象生成了就赖在那个地方了;java宽松一点,地址不能变,但里面值还是可以变的。

数组这种虽然最外层的地址不可以变,但内部的其他地址随时都可以变,那就可变了呗。

【注】:java里面基本数据类型都看做不可变数据类型 ,不可变指的是地址不可变。对象创立了,无论内部地址还是外部地址都不能变的那种。如此看来,虽然Python和java内部规则有不同,但最终结果却是一样的,我们直接可以无缝衔接上。
所以看很多博客将Python的不可变数据函数传参解释成 ‘传值’ 也是有道理的,毕竟和真的传值最后结果是一样的,不过我们还是要牢牢记住还是传引用的。虽然最后结果一样,但档次不一样嘛,拿出去吹牛皮也好啊!

在函数内部Python和java还是有一个奇奇怪怪的区别:

python">a = 10
def add(a):a = 5      # 在Python中,函数内部这种 a 是创建了一个新的局部变量,并不是传进来的那个 a,# 可以看到,上面括号里面的a还是灰色的,说明压根没用上海
add(a)
print(a)   # 10lst = [1, 2, 3, 4, 5]
def add2(lst):lst = [1]add2(lst)
print(lst)   # [1, 2, 3, 4, 5]
java">public class Main {public static void main(String[] args) {int a = 10;modifyValue(a);     // 20System.out.println("Outside method: " + a);  // 10}public static void modifyValue(int x) {x = 20;       // java这里并没有创建局部变量(很显然没有声明变量的语法),说明用的就是传进来的 x ,和Python不一样System.out.println("Inside method: " + x);}
}

奇奇怪怪的吧!这些如果不注意不一定能发现!奇奇怪怪的知识又增加了。

1 基本数据类型

(1)整型

类型存储需求取值范围
int4字节-2 147 483 648 ~ 2 147 483 647(略高于20亿)
short2字节-32 768 ~ 32 767
long8字节-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
byte1字节-128 ~ 127

【注】:通常情况下 int 最常用,long也常用;short和byte类型主要在特定场合下用。
【特别注意】:使用long时需要再数据后面加一个大写或小写 L ,类似 long a = 999999999L。其他的正常,就long有点神经病

(2)浮点数类型

类型存储需求取值范围
float4字节大约 ± 3.40282347 × 1 0 38 \pm 3.402 823 47\times 10^{38} ±3.40282347×1038(6~7位有效数字)
double8字节大约 ± 1.79769313486231570 × 1 0 308 \pm 1.79769313486231570\times 10^{308} ±1.79769313486231570×10308(15位有效数字)

【注】:double的精度是float的两倍,故也称为双精度;通常float类型的精度并不能满足要求,因此用的少,实际中还是要用double
【特别注意】:由于默认是double,所以使用float是数据后面要加一个大写或小写的F,类似 float a = 0.99F

另外,有三个特殊的浮点数表示溢出和出错情况:

  • 正无穷大 :Double.POSITIVE_INFINITY
  • 负无穷大 : Double.NEGATIVE_INFINITY
  • NaN(不是一个数,或者称为一个无法表示的浮点数),例如 0/0 就出现 NaN : Double.NaN

【注】不能用 == 判断一个特定结果是否是Double.NaN ,但是可以用 Double.isNaN(x)

java">if (x==Double.NaN)   // 会报错if (Double.isNaN(x))  // 这样才行

【注】这里关于数据类型的取值大小关系:double>float>long>int>short>byte

(3)字符(char)类型

类型符号取值范围
字符char0-65535(这里是指编码表里对应的数,一般是Unicode编码)

(4)布尔类型(true、false)

类型符号取值范围
布尔booleantrue、false

(5)代码示例

java">public class HelloWord{public static void main(String[] args) {// intint i = 9999999;System.out.println(i);// shortshort s = 9999;System.out.println(s);// bytebyte b = 100;System.out.println(b);// longlong l = 999999999999999999L;    // long类型后面要加一个大写或小写LSystem.out.println(l);// doubledouble d = 0.98;System.out.println(d);// floatfloat f = 0.98F;       // float类型后面要加一个大写或小写FSystem.out.println(f);// charchar c = 'a';         // 字符必须用单引号System.out.println(c);// booleanboolean t = true;System.out.println(t);}
}

2 引用数据类型

  • 引用数据类型:封装在类对象里面的数据类型,字符串(不可变)、数组(可变)、集合(可变)、字典(可变)

【注】:这里只对字符串做一个简单的解释,具体的需要学到具体的在说

类型符号注意
字符串(不可变)Stringjava中字符串必须使用双引号
java">public class HelloWord{public static void main(String[] args) {String a = "hello world!";   // java中字符串必须使用双引号System.out.println(a);}
}

二、变量与常量

1 变量

使用语法

  • 声明变量: 数据类型:变量名; 数据类型:变量名; 数据类型:变量名;
  • 初始化变量: 数据类型:变量名 = 数据值; 数据类型:变量名=数据值; 数据类型:变量名=数据值;
java">public class HelloWord{public static void main(String[] args){int a;                  // 声明变量a = 10;System.out.println(a);  // 10double b = 2.0;          // 声明变量+初始化b = b + 10;System.out.println(b);   // 12.0int i,j = 0, 1; System.out.println(i,j);}}

【注】:声明变量类型只需要声明一次即可,声明过后后面再用直接用变量名即可;声明变量和变量初始化可以同时进行;
另外,声明变量名时声明变量名不能相同。

与Python相比的小细节

  • java支持同时声明多个变量,但多重赋值语法和Python有区别
  • java的打印函数不支持Python一样同时打印多个变量
java">public class HelloWord{public static void main(String[] args){int i,j;i = 0;j = 1;System.out.println(i);    // 0System.out.println(j);    // 1int a = 4 , b =5;         // java的多重赋值语法System.out.println(a);    // 4System.out.println(b);    // 5System.out.println

http://www.ppmy.cn/news/1475689.html

相关文章

Jmeter常用组件及执行顺序

一 常用组件 1.线程组 Thread Group 线程组是一系列线程的集合,每一个线程代表着一个正在使用应用程序的用户。在 jmeter 中,每个线程意味着模拟一个真实用户向服务器发起请求。 在 jmeter 中,线程组组件运行用户设置线程数量、初始化方式等…

golang json反序列化科学计数法的坑

问题背景 func CheckSign(c *gin.Context, signKey string, singExpire int) (string, error) {r : c.Requestvar formParams map[string]interface{}if c.Request.Body ! nil {bodyBytes, _ : io.ReadAll(c.Request.Body)defer c.Request.Body.Close()if len(bodyBytes) >…

蝙蝠避障:为盲人出行插上科技的翅膀

在这个五彩斑斓的世界里,每一步都充满了探索与惊喜。但对于我这样的视障者来说,每一次出行都是一场未知的冒险。我时常面临着难以想象的挑战:如何安全地穿越繁忙的街道,怎样准确地识别前方的障碍物,乃至简单地找到回家…

【机器翻译】基于术语词典干预的机器翻译挑战赛

文章目录 一、赛题链接二、安装库1.spacy2.torch_text 三、数据预处理赛题数据类定义 TranslationDataset批量处理函数 collate_fn 四、编码器和解码器Encoder 类Decoder 类Seq2Seq 类注意事项 五、主函数1. load_terminology_dictionary(dict_file)2. train(model, iterator, …

音频筑基:入门50问

音频筑基:入门50问 通用类编解码类 只问不答,意在启发。 通用类 为什么音频信号分析要从时域到频域?频域变换中,为啥要做TDAC时域混叠消除?人耳听觉频域敏感区是哪部分,为什么?人声发声频域重要…

Python酷库之旅-第三方库Pandas(023)

目录 一、用法精讲 58、pandas.isnull函数 58-1、语法 58-2、参数 58-3、功能 58-4、返回值 58-5、说明 58-6、用法 58-6-1、数据准备 58-6-2、代码示例 58-6-3、结果输出 59、pandas.notna函数 59-1、语法 59-2、参数 59-3、功能 59-4、返回值 59-5、说明 5…

Xcode依赖管理大师:精通项目依赖的艺术与实践

Xcode依赖管理大师:精通项目依赖的艺术与实践 在现代软件开发中,项目依赖管理是确保项目顺利进行的关键环节。Xcode,作为苹果官方的集成开发环境(IDE),提供了一套强大的工具来管理项目依赖。本文将深入探讨…

WordPress:无法创建新文章?创建新帖子时候页面空白

wordPress中我们新建文章的时候,会遇到页面空白,这个问题是怎么导致呢?我们可以打开F12开发者模式看下报错信息,这是一个警告信息 Warning: Creating default object from empty value in /pub 到数据库 wp_posts中查看生成了很…

XML Schema 指示器

XML Schema 指示器 1. 引言 XML Schema 是一种用于定义 XML 文档结构和内容的语言。它提供了一种强大的方式来描述 XML 文档中允许的元素、属性和数据类型。XML Schema 指示器是在 XML Schema 定义中使用的一些特殊元素和属性,它们用于指示 XML 处理器如何解析和验证 XML 文…

OpenCV中使用Canny算法在图像中查找边缘

操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:Visual Studio Code编程语言:C11 算法描述 Canny算法是一种广泛应用于计算机视觉和图像处理领域中的边缘检测算法。它由John F. Canny在1986年提出,旨在寻找给定噪声条件下的最佳边…

Python使用策略模式和openpyxl库创建Excel文件并追加内容

from openpyxl import load_workbook# 数据数组 data [[1, 2, 3],[4, 5, 6],[7, 8, 9] ]# 打开现有的 Excel 文件 excel_file sheetApend_example.xlsx wb load_workbook(excel_file)# 选择要追加数据的工作表 sheet_name test_Sheet2 # 指定要追加数据的工作表名称 sheet…

Facebook的AI革命:人工智能如何改变社交体验

随着科技的不断进步,人工智能(AI)作为一项革命性的技术,正在深刻影响着社交媒体的发展和用户体验。作为全球最大的社交平台之一,Facebook积极探索并应用AI技术,以提升用户的社交互动、内容分享和个性化体验…

Ubuntu系统安装mysql之后进行远程连接

1.首先要配置数据库允许进行远程连接 1.1 打开MySQL配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf1.2 修改 bind-address 行 #按i进入插入模式 bind-address 0.0.0.0 #按 Esc 键退出插入模式。 #输入:wq 然后按 Enter 保存并退…

C# SqlSugar 如何使用Sql语句进行查询,并带参数进行查询,防注入

一般ORM查询单表数据已经是很简单的一种方式了 详情可以看我的另一篇文章:ORM C# 封装SqlSugar 操作数据库_sqlsugar 基类封装-CSDN博客 下面是介绍有些数据是需要比较复杂的SQL语句来进行查询的时候,则需要自行组装SQL语句来进行查询,下面…

Mybatis-plus3.4.3下使用lambdaQuery报错

在 MyBatis-Plus 中,当使用 lambdaQuery().eq(CommonUser::getOpenId, openId).one() 进行查询时,如果未找到匹配的记录,不会抛出异常,而是会返回 null。 具体来说: 如果查询条件匹配到了数据库中的一条记录&#xf…

java 在pdf中根据关键字位置插入图片(公章、签名等)

java 在pdf中根据关键字位置插入图片&#xff08;公章、签名等&#xff09; 1.使用依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.1.12</version><type>pom</type>…

db期末复习自用[应试向 附习题]

第一章 数据库系统实现整体数据的结构化&#xff0c;主要特征之一&#xff0c;是db区别于文件系统的本质区别。 数据库系统三个阶段&#xff1a;人工、文件、数据库系统。 数据库管理系统的功能&#xff1a;数据库定义、操纵 、&#xff08;保护、存储、维护&#xff09;、数…

web安全及内网安全知识

本文来源无问社区&#xff08;wwlib.cn&#xff09;更多详细内容可前往观看http://www.wwlib.cn/index.php/artread/artid/7506.html Web安全 1、sql注入 Web程序中对于用户提交的参数未做过滤直接拼接到SQL语句中执行&#xff0c;导致参数中的特殊字符破坏了SQL语句原有逻…

【算法】二叉树-迭代法实现前后中序遍历

递归的实现就是:每一次递归调用都会把函数的局部变量&#xff0c;参数值和返回地址等压入调用栈中&#xff0c;然后递归返回的时候&#xff0c;从栈顶弹出上一次递归的各项参数&#xff0c;这就是递归为什么可以返回上一层位置的原因 可以用栈实现二叉树的前中后序遍历 1. 前序…

WSGI 服务器教程:`write` 方法解析

Python WSGI 服务器教程&#xff1a;write 方法解析 在本文中&#xff0c;我们将详细解析一个用于 WSGI 服务器的 write 方法。这个方法负责处理 HTTP 响应&#xff0c;包括设置响应头和发送响应数据。我们将逐行解释该方法的工作原理&#xff0c;并提供一些背景知识&#xff…