当前位置: 首页 > news >正文

Java语言基础2

4月16日

 

目录

一、三目运算符... 2

二、判断语句... 2

2.1 if语句... 2

2.2 if-else语句... 3

2.3 if-else. 4

2.4 switch-case语句... 7

三、循环... 9

3.1 for循环... 9

3.2 foreach语句... 10

3.3 while与do-whie. 10

3.3.1 while. 10

3.3.2 do-while. 10

四、跳转语句... 11

4.1      Break:. 11

4.1.1  使用break退出for循环:. 11

4.1.2 使用break退出while循环:... 12

4.2 conutine. 12

4.3 return;... 13

五.数组... 13

5.1一维数组... 13

5.1.1 一维数组的定义... 13

5.1.2 一维数组元素的引用... 14

5.1.3 一维数组的初始化... 15

5.2. 多维数组... 15

5.2.1 二维数组的定义... 15

5.2.2 二维数组元素的引用... 15

5.2.3 二维数组的初始化... 16

 

 

 

 

 

一、三目运算符

Boolean?表达式1:表达式2

三目运算符 形式为:

结果变量=表达式?值1:值2;

 其中  1)表达式为逻辑表达式 判断其为真或假

       2)值1 与 值2 为 可能的值 不能为表达式,也即 值1,值2 不能为 a=1这样的表达式

       3)三目运算符进行运算后 返回的是一个值 必须用变量进行保存或print(?:)直接打印或return返回结果值

 注: 表达式

  表达式是由变量、操作符或是方法调用所组成的一个运算序列,并且返回一个值。

解释:boolean为真执行表达式1,为假执行表达式2;

 

二、判断语句

2.1if语句

该类语句的语法格式为:if(条件表达式)

功能代码;语法说明:if是该语句中的关键字,后续紧跟一对小括号,该对小括号任何时候不能省略,小括号的内部是具体的条件,语法上要求该表达式结果为boolean类型。后续为功能的代码,也就是当条件成立时执行的代码,在程序书写时,一般为了直观的表达包含关系,功能代码一般需要缩进。

 需要特别注意的是:

1、这里的功能代码只能是一行,关于多行结构的功能代码,后续将说明。

2、 if(条件表达式)后续一般不书写分号if语句的执行流程为:如果条件表达式成立,则执行功能代码,如果条件表达式不成立,则不执行后续的功能代码。

示例代码:

在该示例代码中,第一个条件是判断变量a的值是否大于等于零,如果该条件成立则执行输出,第二个条件是判断变量a是否为偶数,如果成立也输出。

    注意以下代码的执行流程:

 

按照前面的语法格式说明,只有m+=20;这行代码属于功能代码,而后续的输出语句和前面的条件形成顺序结构,所以该程序执行以后输出的结果为20.如果当条件成立时,需要执行的语句有多句,则可以使用语句块来进行表述,语法格式如下:

if(条件表达式){

    功能代码块;

    }

使用这种语法格式,使用一个代码块来代替前面的功能代码,这样可以在代码块内部书写任意多行的代码,而且也使整个程序的逻辑比较清楚,所以在实际的代码编写中推荐使用该种逻辑。

 

2.2 if-else语句

if-else语句实现了封闭的条件,在程序中使用的更加常见。其中else关键字的作用是“否则”,即条件不成立的情况。

if-else语句的语法格式如下:

if(条件表达式)

功能代码1;

else

    功能代码2;

语法说明:其中前面的部分和if语句一样,else部分后面是功能的代码,按照该语法格式,功能代码只能有一句。

执行顺序:如果条件成立,则执行if语句中的功能代码1,否则执行else中的功能代码2.示例代码为:

  

则因为n%2的值是0,条件不成立,则执行else语句的代码,程序输出“n不是奇数”。

在实际使用时,为了结构清楚,以及可以在功能代码部分书写多行代码,一般把功能代码部分使用代码块,则语法格式为:

 if(条件表达式){

    功能代码块

}

else{

    功能代码块

    }

当程序中有多个if时,else语句和最近的if匹配。示例代码:

    if(条件1)

    功能代码1;

    if(条件2)

    功能代码2;

else功能代码3;

则这里的else语句和条件2对应的if语句匹配,前面的条件1是一个独立的语句。在实际代码中,可以使用大括号使整个程序的结构更加清楚。

对于if-else语句来说,因为if的条件和else的条件是互斥的,所以在实际执行中,只有一个语句中的功能代码会得到执行。

在实际开发中,有些公司在书写条件时,即使else语句中不书写代码,也要求必须书写else,这样可以让条件封闭。这个不是语法上必须的。

 

 

2.3 if-else

if-else语句在现实中,有些时候的条件不是一个,而是一组相关的条件,例如将阿拉伯数字转换为中文大写,根据分数转换为对应的等级等,都是多条件的结构,在程序中为了避免写多个if语句的结构,提供了一类专门的多分支语句,这就是if-else if-else语句。

 if-elseif-else语句的语法格式为:

   if(条件1)

    功能代码1;

   else if(条件2)

    功能代码2;

   else if(条件3)

    功能代码3;

    ……

   else功能代码;

语法说明:

    1、 else if是else和if两个关键字,中间使用空格进行间隔。

    2、 条件1到条件n都是boolean类型

    3、 else if语句可以有任意多句

    4、 最后的else语句为可选

    5、 如果功能代码部分不是语句块,也就是不用大括号,就只能写一句。

执行流程:当条件1成立时,则执行功能代码1;当条件1不成立且条件2成立时,则执行功能代码2;如果条件1、条件2都不成立且条件3成立,则执行功能代码3,依次类推,如果所有条件都不成立,则执行else语句的功能代码。其执行流程的流程图如上所示。

下面是一个实现根据月份的值,输出该月份包含的日期数,2月份全部输出28,不考虑闰年的示例代码:

     

    再来看一个示例代码,该代码的功能是实现将百分制的成绩转换为A、B、C、D和E,代码如下:

    

   

从该代码中可知,每个else if语句在书写时是有顺序的,在实际书写时,必须按照逻辑上的顺序进行书写,否则将出现逻辑错误。

if-else if-else语句是Java语言中提供的一个多分支条件语句,但是在判断某些问题时,会书写的比较麻烦,所以在语法中提供了另外一个语句——switch语句来更好的实现多分支语句的判别。

if-else语句

解释:else只跟就近if配对,

2.4 switch-case语句

下面是switch的简单写法:

switch(A){

case B;

}

A部分中的值必须是int型的,或者是能够自动进行转换成int型的表达式。也就是说A部分可以是byte/short/char/int型的。

其次要强调的是该程序中B部分的值必须是单个byte/short/char/int型的值,或者是final型的变量。

但是final型的变量也是有要求的,也即是它必须是编译时的常量,怎么讲呢,看下面的程序段:

final int a = 0;

final int b;

第二个语句就是在编译时不能够被识别出值的变量,因为它没有初始化,当然,这条语句也是错误的。

所以总结case后的值可以是常数值或final型的值

该代码正确吗?答案是否定的。虽然在 C 处是合法的也即是byte型的a值可以出现在switch中,但是 D处的语句也即是第二个case后的值是225大小超过了byte的范围,所以是错误的。再就是case后的值不能出现重复。因此在使用中要注意。

再就是在使用switch-case中最容易忽视的就是忘记在每个case后处理完后忘记写上break;语句。那它带来的后果是什么呢,下面小程序段会告诉你

 

比较;

 

看起来语法虽然简单,但是越简单的东西,越容易忽视,而且一旦在大的项目中出现错误,就不好找出什么地方出的错,到时候就.......呵呵。

三、循环

3.1 for循环

for 语句的基本结构如下所示:

for(初始化表达式;判断表达式;递增(递减)表达式){

    执行语句;  //一段代码

}

初始化表达式:初始化表达式的意义,在于定义循环之前变量的值是多少,如果没有这一项,就不知道该从哪个值开始循环。

判断表达式:判断表达式的作用在于规定循环的终点。如果没有判断表达式,那么此循环就成了死循环。

递增(递减)表达式:这一项规定每执行一次程序,变量以多少增量或减量进行变化。

3.2 foreach语句

foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。

foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本。

foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为“foreach”语句。从英文字面意思理解foreach也就是“for 每一个”的意思。实际上也就是这个意思。

foreach的语句格式:

for(元素类型t 元素变量x : 遍历对象obj){

     引用了x的java语句;

}

例如:

3.3 while与do-whie

3.3.1while

在英文中“while”这个词的意思是“当”,而在 Java 程序设计中,也可以将其理解为“当”,其语法结构是:

while (条件){

    目的;    //一段代码

}

当条件为真时,进入循环。

3.3.2do-while

在学习 do/while 语句之前,先清楚while 语句是如何工作的。while 语句是先进行条件判断,再执行大括号内的循环体。

do/while 语句与 while 语句不同的是,它先执行大括号内的循环体,再判断条件,如果条件不满足,下次不在执行循环体。也就是说,在判断条件之前,就已经执行大括号内的循环体。

四、跳转语句

在java语言中支持三种跳转语句:break,continue和return。

我们就分别来看一下这三种语句的用法,首先来看一下break语句的用法,前面我在说明switch语句中已经接触到了break语句,这是break的一种用法,另一种用法就是用来退出一个循环(if, for..)。

4.1    Break:

4.1.1 使用break退出for循环:

4.1.2使用break退出while循环:

4.2 conutine

有时我们需要强迫循环提前反复是有用的,这也就是说,你可能想要继续运行循环,但是要忽略这次重复剩余的循环体的语句,那么在java中continue语句可以使控制直接转移给控制循环的表达式,循环继续执行.下面我们就来通过两个范例来说明continue的用法, 我们编写一个打印出10以下的偶数包括十。

4.3return;

下面我们就来看一下最后一个跳转语句return语句,此语句用来明确地从一个方法返回,也就是说,return语句使程序控制返回到调用他的方法中去,下面我门就通过一个范例来看一下return的用法

 

五.数组

数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来唯一地确定数组中的元素。

5.1一维数组

5.1.1 一维数组的定义

type arrayName[];

type[] arrayName;

其中类型(type)可以为Java中任意的数据类型,包括简单类型组合类型,数组名arrayName为一个合法的标识符,[]指明该变量是一个数组类型变量。

第二种形式对C++开发者可能觉得很奇怪,不过对JAVA或C#这样的开发语言来说,第二种形式可能更直观,因为这里定义的只是个变量而已,系统并未对其实例化,只需指明变量的类型即可,也不需在[]指定数组大小。(第一种形式是不是只是为了兼容以前的习惯,毕竟C语言的影响太大了?)

例如:

int intArray[];

声明了一个整型数组,数组中的每个元素为整型数据。与C、C++不同,Java在数组的定义中并不为数组元素分配内存,因此[]中不用指出数组中元素个数,即数组长度,而且对于如上定义的一个数组是不能访问它的任何元素的。我们必须为它分配内存空间,这时要用到运算符new,其格式如下:

arrayName=new type[arraySize];

其中,arraySize指明数组的长度。如:

intArray=new int[3];

为一个整型数组分配3个int型整数所占据的内存空间。

通常,这两部分可以合在一起,格式如下:

Ty, pearrayName=new type[arraySize];

例如:

int intArray=new int[3];

 

5.1.2一维数组元素的引用

定义了一个数组,并用运算符new为它分配了内存空间后,就可以引用数组中的每一个元素了。数组元素的引用方式为:

arrayName[index]

其中:index为数组下标,它可以为整型常数或表达式。如a[3],b[i](i为整型),c[6*I]等。下标 从0开始,一直到数组的长度减1。对于上面例子中的in-tArray数来说,它有3个元素,分别为:

intArray[0],intArray[1],intArray[2]。注意:没有intArray[3]。

另外,与C、C++中不同,Java对数组元素要进行越界检查以保证安全性。同时,对于每个数组都有一个属性length指明它的长度,例如:intArray.length指明数组intArray的长度。

运行结果如下:

a[4]=4    a[3]=3      a[2]=2      a[1]=1      a[0]=0

b[4]=5    b[3]=4      b[2]=3      b[1]=2      b[0]=1

c[4]=4    c[3]=3      c[2]=2      c[1]=1      c[0]=0     

d[4]=5    d[3]=4      d[2]=3      d[1]=2      d[0]=1

该程序对数组中的每个元素赋值,然后按逆序输出。

5.1.3一维数组的初始化

对数组元素可以按照上述的例子进行赋值。也可以在定义数组的同时进行初始化。

例如:

int a[]={1,2,3,4,5};

用逗号(,)分隔数组的各个元素,系统自动为数组分配一定空间。

与C中不同,这时Java不要求数组为静态(static),其实这里的变量类似C中的指针,所以将其作为返回值给其它函数使用,仍然是有效的,在C中将局部变量返回给调用函数继续使用是初学者很容易犯的错误。

5.2.多维数组

与C、C++一样,Java中多维数组被看作数组的数组。例如二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。下面我们主要以二维数为例来进行说明,高维的情况是类似的。

5.2.1二维数组的定义

二维数组的定义方式为:

type arrayName[][];

type[][] arrayName;

例如:

int intArray[][];

int[][] intArray;

与一维数组一样,这时对数组元素也没有分配内存空间,同要使用运算符new来分配内存,然后才可以访问每个元素。

对高维数组来说,分配内存空间有下面几种方法:

1. 直接为每一维分配空间,如:

int a[][]=new int[2][3];

2. 从最高维开始,分别为每一维分配空间,如:

int a[][]=new int[2][];

a[0]=new int[3];

a[1]=new int[3];

完成1中相同的功能。这一点与C、C++是不同的,在C、C++中必须一次指明每一维的长度。

5.2.2二维数组元素的引用

对二维数组中每个元素,引用方式为:arrayName[index1][index2] 其中index1、index2为下标,可为整型常数或表达式,如a[2][3]等,同样,每一维的下标都从0开始

5.2.3二维数组的初始化

有两种方式:

1. 直接对每个元素进行赋值。

2. 在定义数组的同时进行初始化。

如:int a[][]={{2,3},{1,5},{3,4}};

定义了一个3×2的数组,并对每个元素赋值。

运行结果如下:

e[1][2]=3

e[1][1]=2

e[1][0]=1

e[0][2]=2

e[0][1]=1

e[0][0]=0

相关文章:

  • Java语言基础1
  • C语言运算符表达式
  • C语言基本数据类型
  • Java的三大方向介绍
  • Java的字符串
  • 集合类(一)
  • 集合类(二)
  • 集合类(三)
  • 集合类(四)
  • Sql server基础
  • SQL多表连接查询
  • SQL server 多表查询与视图的使用
  • 浅谈JS中this
  • eclipse如何导入jar包
  • 你所忽略的HashMap
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 5、React组件事件详解
  • Android 控件背景颜色处理
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • js学习笔记
  • node-glob通配符
  • NSTimer学习笔记
  • SpingCloudBus整合RabbitMQ
  • Vue2 SSR 的优化之旅
  • webgl (原生)基础入门指南【一】
  • yii2中session跨域名的问题
  • 简析gRPC client 连接管理
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 想使用 MongoDB ,你应该了解这8个方面!
  •  一套莫尔斯电报听写、翻译系统
  • 栈实现走出迷宫(C++)
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​MySQL主从复制一致性检测
  • !!java web学习笔记(一到五)
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #HarmonyOS:Web组件的使用
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (二)fiber的基本认识
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (区间dp) (经典例题) 石子合并
  • (十一)c52学习之旅-动态数码管
  • (一) springboot详细介绍
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET Core 通过 Ef Core 操作 Mysql
  • .net 微服务 服务保护 自动重试 Polly
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET中使用Redis (二)
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @ConfigurationProperties注解对数据的自动封装
  • @Responsebody与@RequestBody