[Java基础]基本概念(下)运算符,表达式和语句,分支,循环,方法,变量的作用域,递归调用

news/2024/11/16 18:38:39/

        在上一篇文章[Java基础]基本概念(上)(标识符,关键字,基本数据类型)_小王师傅66的博客-CSDN博客中,我们学习了Java基础基本概念中的标识符,关键字,基本数据类型。这篇文章,我们将学习:运算符,表达式和语句,分支,循环,方法,变量的作用域,递归调用。

目录

运算符:

表达式:

语句:

方法:

变量的作用域:

递归调用:


运算符:

Java中支持的运算符:

算数运算符+,-,*,/,%,++,--
关系运算符>, >=, <, <=, <>, !=, ==
逻辑运算符!, &, |, ^, &&, ||
位运算符~, &, |, ^, <<, >>, >>>
赋值运算符=
扩展赋值运算符+=, -=, *=, /=
字符串连接运算符+

算术运算符:

++或--:符号在数字后面,先运算再取值;否则,先取值后运算;

int i = 0;
int j = i++; // j = 0, i = 1等同于:
int j = i;
i = i + 1;
int i = 0;
int j = ++i; // j = 1, i = 1等同于
i = i + 1;
int j = i;

逻辑运算符:

!:逻辑非, &:逻辑与, |:逻辑或, ^:逻辑异或, &&:短路与, ||:短路或

ab!aa&ba|ba^ba&&ba||b
truetruefalsetruetruefalsetruetrue
truefalsefalsefalsetruetruefalsetrue
falsetruetruefalsetruetruefalsetrue
falsefalsetruefalsefalsefalsefalsefalse

&&:符号左边为false时,停止运算;

||:符号左边为true时,停止运算;

字符串连接运算符:

+:+两边只要有一个操作数是字符串类型,系统自动将另一个操作数转为字符串类型,再进行字符串连接。

当进行打印时,打印的对象无论是否是字符串,都转成字符串打印。

表达式:

java表达式由运算符和操作数构成。运算符代表运算的动作,操作数是要操作的数据。操作数可以是常量也可以是变量。表达式的类型由运算结果的类型决定。

语句:

包括三大类:顺序,选择,循环。

语句
顺序语句

自上而下一句一句执行;

(按照地址内容的顺序执行指令)

选择语句

if语句,switch语句;

(根据条件执行任意地址的指令)

switch语句:

1、小心case穿透,推荐使用break;

2、多个case可以合并;

3、default可以省略,但不推荐;

4、Java中switch只能探测int类型(包括可以自动转成int的类型,比如char,byte,short)

循环语句

for循环,while循环,do while循环。

(重复执行同一个地址的指令)

1、break:中断语句块的执行,用于循环语句体中,退出循环;

2、continue:终止某次循环,跳出循环体,执行下一次循环。

方法:

        Java中的方法类似于其他语言的函数,是用于完成特定功能的片段。

        形式:[修饰符1 修饰符2 ...] 返回值类型 方法名(形参列表){

                java 语句

        }

       1) 形式参数:被调用方法上用于接收外界输入的参数;

       2) 实际参数:调用方法时传给方法的参数;

       3)返回值:方法执行完成后返回给调用环境的数据;

       4)返回值类型:事先约定好的返回值类型;如果没有返回值,用void;必须给出返回值类型。

       5)方法的调用方式:对象.方法名(实参列表);

       6)实参的数目,数据类型,次序和调用方法所声明的形参列表要一一对应。

       7)return方法终止方法执行并指定要返回的数据。

       8)Java中,进行函数调用中遵循的传值原则:基本数据类型传的是值本身;引用数据类型传的对象的引用,而不是对应本身。

变量的作用域:

        按作用域区分变量,可以将变量分为局部变量,成员变量。

        局部变量,声明在方法体中,出了方法不能使用。

        成员变量,声明在类中,方法的外部,用于描述类的属性。

递归调用:

        递归调用指方法调用过程中,出现该方法本身的调用。比如使用递归解决Fabonacci数列。

斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89...

这个数列从第3项开始,每一项都等于前两项之和。

方法定义是:F[n]=F[n-1]+F[n-2](n>=2,F[0]=1,F[1]=1)

比如,我们求第12个数是多少

public class Fibonacci {public static void main(String[] args) {System.out.println(f(12));}public static int f(int n) {if (n == 1 || n == 1) {return n;}System.out.println("n = " + n);return f(n - 1) + f(n - 2);}}

输出:n = 144.

递归调用一定要有终止条件,在这个函数中,终止方法执行的语句是:

if(n == 1 || n == 2){return n;}

如果不用递归怎么实现呢?

 public static void main(String[] args) {System.out.println("非递归实现:" + ff(12));} public static int ff(int n) {if (n <= 0) {return -1;}if (n == 1 || n == 2) {return 1;}int pre = 1;int prePre = 1;int result = 0;for (int i = 3; i <= n; i++) {result = pre + prePre;prePre = pre;pre = result;}return result;}

  从代码量上可以看出,用递归实现更加简洁明了。 

我们总结一下这Java基础两篇文章中的重点:

1、标识符:用于给类,方法,变量,自定义数据类型命名,凡是可以自己定义的,都是标识符。

2、关键字:Java事先给定义好的标识符,对编译器有特殊意义。比如:if else, static,final,public等。关键字不能用作类名,方法名,变量名等。标识符可以包含关键字。

3、常量:第一次赋值后就不能改变的变量。

4、变量:是程序中最基本的存储单元,代表内存中的一小块区域。不同类型的变量在内存中占用的存储空间长度不同。在程序中通过变量名访问变量。因此,变量要先定义,再赋值,再使用。

程序执行时会被操作系统加载到内存,执行时将内存分为4块区域:

heap-存放new出来的对象,stack-局部变量,data segment-存放静态变量,字符串常量,code segment-存放代码;

按被声明的位置分,分为:局部变量,成员变量。局部变量作用于方法内;成员变量作用于整个对象,修饰对象的属性。

按类型分4类8种;

4类:逻辑型;字符型;数值型;浮点型;

8种:char,byte,short,int,long,double,float,boolean

boolean不能和其他类型相互转化;

容量小的能自动转成容量大的;容量大的转成容量小的可能有精度损失或溢出。

char,byte,short要转成int,才能运算;多种类型混合计算时,自动转成大类型后再进行运算;

数值型默认是int类型;浮点型默认是double类型。

5、语句:顺序,选择,循环;

选择:Switch注意默认值问题,case击穿问题,推荐使用break。

循环:for,while,do...while。while循环符合条件才执行;do...while 无论是否符合条件都会执行一次。

6、方法:

修饰符,返回值类型,方法名,形参列表。形参和实参的区别。

递归调用等。

        希望这两篇Java基础学习的文章能给你带来帮助。


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

相关文章

030:Mapbox GL设置渐变矢量矩形

第030个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载数据,构成渐变的矩形。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共109行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:…

ESP32CAM---利用Vscode阅读源码

前言 &#xff08;1&#xff09;首先&#xff0c;我在此吐槽一些&#xff0c;arduino平台的代码阅读功能&#xff0c;是真滴垃圾。气死我了。配置这玩意搞了半天&#xff0c;还没搞好。 &#xff08;2&#xff09;最后我决定使用Vscode阅读arduino的代码。arduino IDE负责编译程…

真题详解(快速排序)-软件设计(八十一)

原创 真题详解(语法分析输入记号流)-软件设计&#xff08;八十)https://blog.csdn.net/ke1ying/article/details/130791934 COCOMOII基于____进行估算&#xff1f; 答案&#xff1a;源代码行数 2、0~7有8个索引&#xff0c;0~4是5个直接索引&#xff0c;磁盘块数据大小1kb字节…

淡季不淡,满帮一季度净利创历史新高的背后原因是什么?

进入五月&#xff0c;经济复苏的成果越发体现在很多基础行业的表现中。经济的“大动脉”货运行业&#xff0c;也迎来一份新答卷。 北京时间5月22日美股盘前&#xff0c;数字货运平台满帮集团&#xff08;NYSE:YMM&#xff0c;简称&#xff1a;满帮&#xff09;&#xff0c;发布…

消息中间件——RocketMQ(与Kafka、RabbitMQ的对比)

RocketMQ、Kafka、RabbitMQ的对比 1.ActiveMQ:Apache出品的比较老的消息中间件 2.Kafka:支持日志消息,监控数据,是一种高吞吐量的分布式发布订阅消息系统,支持百万级别的单机吞吐量,但是可能会造成数据丢失 3.RocketMQ:阿里在使用Kafka之后发现了它的消息系统主要定位于日志传…

21天学会C++:Day4----函数重载

CSDN的uu们&#xff0c;大家好。这里是C入门的第四讲。 座右铭&#xff1a;前路坎坷&#xff0c;披荆斩棘&#xff0c;扶摇直上。 博客主页&#xff1a; 姬如祎 收录专栏&#xff1a;C专题 目录 1. 知识引入 2. 函数重载的知识点 2. 为什么C语言不支持函数重载而C支持呢&…

PoseiSwap:为何青睐 Layer3?又为何选择 Celestia 作为技术伙伴?

自 PoseiSwap 在 Nautilus Chain 上线后&#xff0c;该 DEX 的整体市场进展十分顺利。我们看到&#xff0c;其不仅在 4 月&#xff0c;以 1000万美元的估值&#xff0c; 获得了来自于 Zebec Labs 的首轮 150 万美元的融资。而在本月&#xff0c;在 Zebec 生态的帮助下&#xff…

视频理解学习笔记(一):双流卷积神经网络

视频理解学习笔记&#xff08;一&#xff09;&#xff1a;双流卷积神经网络 两句话总结双流卷积神经网络论文概览方法详解Spatial stream ConvNetTemporal stream ConvNet测试方法 光流什么是光流怎么预处理光流 数据集UCF101&#xff08;已被刷爆&#xff09;HMDB51 Experimen…