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

文章目录

  • 前言
  • 一、数据类型
    • 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 java.lang 包
    • 2 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这种操作是在原地址上操作。
  • 然后就是函数传参,由于传参传的是值的副本,那函数内怎么修改肯定不会影响外面的了。
a = 10
def f(a):a = a+1
f(a)
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还是有一个奇奇怪怪的区别:

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]
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)

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)代码示例

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中字符串必须使用双引号
public class HelloWord{public static void main(String[] args) {String a = "hello world!";   // java中字符串必须使用双引号System.out.println(a);}
}

二、变量与常量

1 变量

使用语法

  • 声明变量: 数据类型:变量名; 数据类型:变量名; 数据类型:变量名;
  • 初始化变量: 数据类型:变量名 = 数据值; 数据类型:变量名=数据值; 数据类型:变量名=数据值;
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一样同时打印多个变量
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.mzph.cn/news/871971.shtml

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

相关文章

线程的复习

目录 大纲Java中的线程概念创建线程的方法线程的生命周期线程的同步和通信线程的优先级和调度线程的中断 案例 大纲 Java中的线程概念 在Java中,线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中实际运作的部分。一个…

网络配置命令

文章目录 一、查看网络接口信息 ifconfig1.1 网络接口名称1.2 使用 ifconfig 查看网络接口信息1.2.1 输出示例1.2.2 输出解释 1.3 查看特定网络接口信息1.3.1 输出示例 1.4 查看所有网络接口信息1.5 特殊网络接口 二、修改网络配置文件2.1 配置文件示例2.2 使配置生效2.3 关闭 …

图——图的遍历(DFS与BFS)

前面的文章中我们学习了图的基本概念和存储结构,大家可以通过下面的链接学习: 图的定义和基本术语 图的类型定义和存储结构 这篇文章就来学习一下图的重要章节——图的遍历。 目录 一,图的遍历定义: 二,深度优先…

应用实践之基于MindNLP+MusicGen生成自己的个性化音乐

前言 MusicGen是基于单个语言模型(LM)的音乐生成模型,使用文本描述或音频提示生成高质量的音乐样本。它基于Transformer结构,包括文本编码器模型和音频压缩模型,以及一个解码器来预测离散的隐形状态音频token。与传统…

uni-data-select 插件配置接收字段,更改默认的text,value

当后台返回的数据源格式不是如下value,text字段时,需要自定义字段配置 range: [{ value: 0, text: "篮球" },{ value: 1, text: "足球" },{ value: 2, text: "游泳" },], 思路有两个, 思路一:前端遍历更改为…

PE文件(十一)移动导出表和重定位表

移动表的原因 一个PE文件中有很多节,每个节都存储不同的数据。而PE文件中的各种表也都分散存储在这些节当中。此时各种表的信息与程序的代码和数据相互混合在一起,如果我们直接对整个程序进行加密,那系统在初始化程序时就会出问题。比如&…

Linux系统之部署盖楼小游戏

Linux系统之部署盖楼小游戏 一、小游戏介绍1.1 小游戏简介1.2 小游戏玩法基本介绍1.3 项目预览二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍2.3 版本要求三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本四、安装node.js4.1 安装nvm4.2 查看nvm版本4.3 安装…

DHCP原理及配置

目录 一、DHCP原理 DHCP介绍 DHCP工作原理 DHCP分配方式 工作原理 DHCP重新登录 DHCP优点 二、DHCP配置 一、DHCP原理 1 DHCP介绍 大家都知道,现在出门很多地方基本上都有WIFI,那么有没有想过这样一个问题,平时在家里都是“固定”的…

【总结】实际业务场景中锁、事务、异常如何考虑使用?

文章目录 锁处理目的:考虑锁控制思路:生命周期接口并发控制解决方案:测试锁是否生效:模拟多线程并发场景的2种方式: 事务处理目的:考虑事务控制思路:解决方案: 总结 锁处理 目的&am…

利用AI辅助制作ppt封面

如何利用AI辅助制作一个炫酷的PPT封面 标题使用镂空字背景替换为动态视频 标题使用镂空字 1.首先,新建一个空白的ppt页面,插入一张你认为符合主题的图片,占满整个可视页面。 2.其次,插入一个矩形,右键选择设置形状格式…

C++ 入门12:模板(Template)

往期回顾: C 入门09:友元函数和友元类-CSDN博客 C 入门10:继承和派生类-CSDN博客 C 入门11:虚函数和多态-CSDN博客 C 入门12:模板(Template) 一、前言 在前面文章的学习中,我们掌握…

Centos---命令详解 vi 系统服务 网络

目录 一、CentOS vi命令详解 二、CentOS系统服务命令 三、CentOS权限管理命令: 四、CentOS网络管理命令介绍: 一、CentOS vi命令详解 Vi是一款强大的文本编辑器,在CentOS中广泛使用。以下是Vi编辑器的一些常用命令: 1. 打开…

北京交通大学《深度学习》专业课,实验2-前馈神经网络

1. 源代码 见资源“北京交通大学《深度学习》专业课,实验2-前馈神经网络” 2. 实验内容 (1)手动实现前馈神经网络解决上述回归、二分类、多分类任务 分析实验结果并绘制训练集和测试集的loss曲线 (2)利用to…

08-8.3.1 冒泡排序

👋 Hi, I’m Beast Cheng 👀 I’m interested in photography, hiking, landscape… 🌱 I’m currently learning python, javascript, kotlin… 📫 How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

keepalive:

keepalive: 调度器的高可用 vip地址在主备之间的切换,主在工作时,vip地址只在主上,主停止工作,vip漂移到备服务器。 在主备的优先级不变的情况下,主恢复工作,vip会飘回到主服务器。 1、配优…

企业网络运维-给华为交换机配置sftp,浏览交换机文件并下载上传

文章目录 需求实验开户stelnet权限已完成stelnet账号下的sftp配置使用xshell-sftp访问 需求 浏览交换机文件并下载上传 实验 开户stelnet权限 参考https://blog.csdn.net/xzzteach/article/details/140419150 已完成stelnet账号下的sftp配置 服务类型all包括stelnet和sf…

过滤器(Filter)和拦截器(Interceptor)的区别

过滤器(Filter)和拦截器(Interceptor)都是用于在请求处理过程中执行额外逻辑的机制,但它们在实现和使用上有一些重要的区别: 过滤器(Filter) 定义和用途: 过滤器主要用于…

强化学习编程实战-5 基于时间差分的方法

第4章中,当模型未知时,由于状态转移概率P未知,动态规划中值函数的评估方法不再适用,用蒙特卡洛的方法聘雇值函数。 在蒙特卡洛方法评估值函数时,需要采样一整条轨迹,即需要从初始状态s0到终止状态的整个序列…

[C++ 入门基础 - 函数重载]

在C编程中,函数重载(Function Overloading)是一种强大的特性,它允许我们定义多个同名函数,但这些函数具有不同的参数列表。通过函数重载,我们可以根据不同的参数类型或数量来实现类似但功能不同的函数&…

探索“搭旅万物皆可搭”小程序——构建旅行搭伴平台的创新实践

摘要 随着旅游市场的不断发展和个性化需求的日益增长,旅行搭伴平台逐渐成为连接志同道合旅者的桥梁。本文旨在介绍“搭旅万物皆可搭”小程序的设计理念、核心功能及其背后的技术实现,探讨如何通过算法优化、安全保障、社交互动等手段,打造一…