小白入门Java第一天

当你对 Java语言有了一些了解后,你就可以开始着手学习Java了。

作为你的Java 学习第一天,所需掌握内容如下述目录:

文章目录

    • 1. 注释
      • 1. 三种注释
        • 1.1 单行注释
        • 1.2 多行注释
        • 1.3 文档注释
    • 2. 标识符和关键字
      • 2.1 标识符的组成:
      • 2.2 那到底什么是标识符呢?
    • 3. 数据类型划分
      • 3.1 数据类型的逐个解析:
      • 3.2 整数类型:
        • 3.2.1. int
      • 3.3 取值范围重要性!
      • 3.4 什么叫转型?
        • 3.2.2 long(自动类型转换说明)
      • 3.5 强制类型转换说明
      • 3.6 更合理的类型转换图:
        • 3.2.3 byte
      • 3.6 关于数据类型的默认值
      • 3.7 浮点类型
        • 3.7.1 double
        • 3.7.2 float
      • 3.8 只有 double 或 float 才可以保存小数
      • 3.9 字符型
        • 3.9.1 char
      • 3.10 常用的编码范围
      • 3.11 利用编码范围转换字母大小写
      • 3.12 布尔型
    • 4. 变量和常量
      • 4.1 声明变量
      • 4.2 变量初始化
      • 4.3 变量 and 常量
    • 5. 运算符
      • 5.1 关系运算符
      • 5.2 数学运算符
        • 5.2.1 四则运算 code 示例
        • 5.2.2 利用取模运算符判断奇数偶数
      • 5.3 简化运算符
        • 5.3.1 四则运算的简化运算符
        • 5.3.2 自增自减运算符
      • 5.4 三元运算符
      • 5.5 逻辑运算符
        • 5.5.1 使用 '!'
        • 5.5.2 普通 '&' 和 短路'&&'
        • 5.5.3 或
      • 5.6 位运算符

当然!前提是我们都安装好了 JDK,并测试完成了 HelloWorld 的编写编译和运行,那我们只需要随意选择一个自己顺手的编辑器,便可以对以下内容的学习进行聚焦。


1. 注释

在程序员实际工作当中,会编写大量符合逻辑的代码以至到达完成程序设计目的为止。
如果你脑袋里目前还没有大量代码的想象画面,可以想象成一大坨的HelloWorld,然而过多的HelloWorld在追忆其作用时会大大增加你的时间,降低你的工作效率。所以你可以用注释将其进行说明,哪怕时间过于长久,也可以迅速反应其代码的实质功能。

那到底什么是注释?
与大多数程序设计语言一样,Java中的注释也不会出现在可执行程序当中,
也就是说,程序在执行过程当中会忽略注释的定义。

1. 三种注释

Java中的注释分为三种:

1.1 单行注释

最常用简介的叫做单行注释,如果用HelloWorld代码作为事例,如:

public class HelloWorld{public static void main(String args[]){// 一个简单的输出语句System.out.println("Hello!!!~World");}
}

1.2 多行注释

当然,如果你需要说明的内容更多时,也可以用多行注释,如:

/*
public 是权限修饰符,用于控制该代码在其程序中被访问的权限class 是类的关键字,在Java中,所有的代码都定义在一个类中HelloWorld 是该类的名称,要注意的是该名称需与其文件名称一致{} 相当于标准语法,Java是强类型语言,一定要注意语法规范static void 暂时不需顾虑,面向对象章节会详细介绍main 是主方法,该文件在被虚拟机执行时,虚拟机会根据main来执行器内部内容System.out System系统下的out对象,然后通过.调用 println 方法; 分号是逐行结束必须要写的规范
*/
public class HelloWorld{public static void main(String args[]){System.out.println("Hello!!!~World");}
}

1.3 文档注释

其实多行注释不用写的如上那么清晰,只是多于单行注释内容的基础上说明程序就可以了。如果说明的像上述那么清晰,更应该采用文档注释,因为它可以帮助你生成文档。

文档注释 以 /** 开头,*/结束。且每句的空行都有一个 * 如下:

/***public 是权限修饰符,用于控制该代码在其程序中被访问的权限*class 是类的关键字,在Java中,所有的代码都定义在一个类中*HelloWorld 是该类的名称,要注意的是该名称需与其文件名称一致*{} 相当于标准语法,Java是强类型语言,一定要注意语法规范*static void 暂时不需顾虑,面向对象章节会详细介绍*main 是主方法,该文件在被虚拟机执行时,虚拟机会根据main来执行器内部内容*System.out System系统下的out对象,然后通过.调用 println 方法*; 分号是逐行结束必须要写的规范
*/
public class HelloWorld{public static void main(String args[]){System.out.println("Hello!!!~World");}
}

现在你已经了解了三种注释如何使用,这里我们暂时不说明如何自动生成文档,
因为我们的学习动机是快些搞清楚 三种注释是怎么一回事。


2. 标识符和关键字

标识符和关键字两个概念本身是有区别的,千万不要混淆。

2.1 标识符的组成:

标识符由:字母、数字、_(下划线)、$(美元符号),组成。
其中不能以数字开头,不能是 Java语言本身使用的关键字。
.
注意!Java语言本身严格区分大小写。

2.2 那到底什么是标识符呢?

关键字是指官方定义的名称,也就是Java语言本身的开发者,在开发语言时定义的名称。比如 public 和 class 就是关键字。

所以标识符可以理解成是我们自己在编码过程中定义的名称。

如果作为小白,还不是很理解,那我们可以写一个代码段加以说明:

这里不得不提起一个有意思的小插曲帮助你消化理解,Java语言在中国市场大火以后,在JDK 1.7之后加入了对中国语言的支持。

我们就用中文定义标识符来帮助消化:

//这里我们将类的标识符定义为了你好
public class 你好{public static void main(String args[]){System.out.println("Hello!!! ~World");}
}

3. 数据类型划分

任何程序严格来讲都属于一个数据的处理游戏。所以对于数据的保存必须有严格的限制,这些限制就体现在了数据类型的划分上,即:不同的数据类型可以保存不同的数据内容。
.
注:Java 是强类型语言,这意味着必须为每一个变量声明一种类型。

在编程的学习过程中,总会后知后觉,即便现在不理解某些概念,我也一定要告诉你:
Java的数据类型分为:基本数据类型、引用数据类型,两种!

基本数据类型包括:byte、short、int、long、float、double、char、boolean
而引用数据类的概念为:在操作的时候必须要进行内存的开辟。

在这里插入图片描述

也就是说基本数据类型不会涉及到对内存空间的开辟,而引用数据类型的使用需要开发者为其分配空间,而后在进行关系的匹配。

此外,java的基本数据类型主要以数值的方式进行定义,这些基本数据类型的保存数据范围与默认值如表:

No.数据类型大小/位可表示的数据范围默认值
1byte(字节)8-128 ~ 1270
2short(短整型)16-32768 ~ 327670
3int(整型)32-2147483648 ~ 21474836470
4long(长整型)64-9223372036854775808 ~ 92233720368547758070
5float(单精度)32-3.4E38(-3.410^38) ~ 3.4E38(3.410^38)0.0
6double(双精度)64-1.7E308(-1.710^308) ~ 1.7E308(1.710^308)0.0
7char(字符)160 ~ 255‘\u0000’
8boolean(布尔型)-true 或 falsefalse

上述表格当中的内容除了数据范围都是你一定要记住的,但是 byte字节的取值范围也最好记住!

表格当中数据类型的所占大小用到的单位是:位,在计算机当中 1字节等于8位

对数据类型和数据类型划分有了相对了解后,
我们开始逐个解析!

3.1 数据类型的逐个解析:

3.2 整数类型:

3.2.1. int

任何一个数字常量如:10、30、50、90…在 Java 中都属于 int 数据类型。
即:在 java中所有设置的整数内容默认都为 int 型数据。

public class TestintDemo {public static void main(String args[]){//语法:数据类型 变量名称 = 变量;int num = 10;  // 10 是常量,常量的默认值是intint result = num * 2; //变量num的值乘以2,计算结果存于变量result当中System.out.println(result); // 输出打印 result}
}

如果你现在不了解变量和常量的概念先姑且搁置,我们会在下个知识点进行讨论。

TestintDemo 代码片段说明:

这是我们第一次在文章中嵌入带有些许逻辑的代码,所以顾及新手村的朋友,进行详细说明:
本程序首先定义了一个 数据类型为int的 num 变量,然后给其赋予一个常量值:10,
接着我们又定义了第二个变量:result,同样也为int数据类型,然后给其赋值并不是固定的常量值,而是四则运算当中的乘法运算。最后输出语句输出的也是result变量,可想而知其值为多少?

我们这里只演示了一个简单的乘法运算,当然!如果用户需要,也可以是四则运算当中任意一个!(加法+、减法-、乘法*、除法)

接下来还要强调一下取值范围的重要性!

3.3 取值范围重要性!

回想一下上面的表格!对就是数据类型介绍的那个表格!
如果程序超出了取值范围会出现什么现象呢?

我们用int类型来做个测试:

public class TestintOutDemo {public static void main(String[] args) {int max = Integer.MAX_VALUE; //取最大值int min = Integer.MIN_VALUE; //取最小值//查看int类型取值范围的最大值和最小值System.out.println(max); //控制台的输出结果:2147483647System.out.println(min); //控制台的输出结果:-2147483648//给最大值做加法// 预计结果:2147483647 +1System.out.println("最大值+1后:"+(max+1));//给最小值做减法// 预计结果:-2147483648 -1System.out.println("最小值-1后:"+(min-1));}
}

我们看一下程序的运行结果:
在这里插入图片描述

这是怎么一回事?
最大值 +1后变成了负数,最小值-1后居然变成了正数!?

该计算超过了其数据类型本身的取值范围就会出现一个循环的操作,最大值如果继续增加就变为最小值,随后一直向其次的最小值进行循环,反之最小值减1就变为最大值,此种现象称为溢出。
.
在计算机中二进制是基本的组成单元,而 int 型数据一共占 32位长度,也就是说第一位是符号位,其余的31位都是数据位。当然数据已经是该数据类型保存的最大值时,如果继续进行+1的操作就会造成符号位的变更,最后就会形成这种数据溢出的问题。

一般针对这种问题,其实只要合理选用数据类型即可,比如你要存储年龄相关的数据可以使用int类型,int类型的取值范围已经足够作为存储年龄使用了,毕竟年龄不会超过 int 类型的取值范围吧?难道你…

或者你还可以转型,你别忘了整数类型有 byte short int long 四个呢!

3.4 什么叫转型?

整数类型一共有四个:byte short int long
它们其中的每一个都有自己所占内存空间的大小,根据它们之间的大小来排列它们的大小,自小向大:byte short int long。自大向小:long int short byte。
内存所占较小的转向大的一方叫做自动转换,内存空间所占较大转向小的一方叫做强制转换。

那这个demo我们如何转?

3.2.2 long(自动类型转换说明)

我们可以让int类型实现自动类型转换为字节空间所占更大的long类型。

public class TestintTolongDemo {public static void main(String[] args) {int max = Integer.MAX_VALUE; //取出最大值int min = Integer.MIN_VALUE; //取出最小值System.out.println("输出向上转型后的最大值:"+(max+1L));System.out.println("输出向上转型后的最小值:"+(min-1L));}
}

转型的实现方法:

在转型过程中,将参与运算的其中一个值转向较大类型,其结果的数据类型也会自动转向为较大类型,而不在是整数类型的默认 int。

转型的方法只要加上特定语句便可轻松实现:

如:

int num1 = 10; //int类型
int num2 = 20; //int类型
System.out.println((long)num1 + num2); //long 可以加给参与运算的任意一个变量

如:
如果参与运算的并不是两个变量:例,一个常量、一个变量

int num1 = 10;
System.out.println(num1 + 20L); //可以直接给常量加上L,将其转型为不是默认int的long
System.out.println((long)num1 + 20); //或者还是将变量的存储方转为long

3.5 强制类型转换说明

我们已经知道了内存空间所占较小的一方转向较大的一方如何实现。
下面来说明内存空间所占较大的一方转向较小的一方如何实现。

long num = 1000;
int x = (int)num; //强制类型转换的语法为://在转型方的前面加上优先级运算符(),然后在符号内填写所转换的目标数据类型
System.out.println(x);

虽然程序支持我们做强制类型转换,但是一定要注意程序溢出造成的数据丢失问题!

3.6 更合理的类型转换图:

在这里插入图片描述

3.2.3 byte

整数类型中还有另外两个数据类型没有介绍到,那就是 byte 和 short!

byte 数据类型的取值范围: -128 ~ 127 这一点要牢记!

public class TestbyteDemo {public static void main(String[] args) {byte num = (byte) 130; //由于:默认的int整数130 超过了byte数据范围,//需要做强制类型转换System.out.println(num); //程序运行结果为:-126//强制类型转换造成了数据丢失}
}

选用一个超过取值范围的例子是想告诉大家一个概念:

java 为 byte类型改善了自动类型转换

public class TestbyteDemo {public static void main(String[] args) {byte num = 127; //127默认为int类型,这里没有做强制类型转换!//因为:没有超过byte数据类型的取值范围!System.out.println(num); }
}

3.6 关于数据类型的默认值

我们知道每个数据类型都有其默认值,但是在jdk1.4版本之前需要格外注意的是:类中的变量可以暂时不指定其默认值,而方法中的变量一定要指定默认值,否则会编译报错!

例:

public class TestintDemo{static int num;public static void main(String args[]){System.out.println(num);}
}

则:

public class TestintDemo{public static void main(String args[]){int num;num = 0; //但是此编码形式在 jdk 1.4 及之前会报错// 必须写为:int num = 0;System.out.println(num);}
}

当然。此一节点只是作为补充说明!

3.7 浮点类型

浮点类型就是数学中的小数类型,整数的默认类型为 int,而小数的默认类型则为 double(‘该类型是保存数据范围最广的’)。
在 java中表示小数类型的数据类型有两个,一个是float,一个是double,而double的存储数据范围恰好又是float的两倍,固而又都称double为双精度数值。

3.7.1 double

先来看一下如何使用 double来定义小数。

public class TestdoubleDemo {public static void main(String[] args) {double num = 10.2;System.out.println(num * 2); //这里包含一个自动类型转换//因为 double的内存空间所占大于int数据类型,//固较小的int类型会自动转换为较大的double类型}
}

look 程序的执行结果:
在这里插入图片描述

3.7.2 float

由于小数的默认类型为double类型,如果想使用float类型则需要做强制类型转换。转换的方式有两种:变量 使用字母 “F” 或 “f” ; 常量则是在常量值前加上括号,括号内填写 float。

public class TestfloatDemo {public static void main(String[] args) {float num1 = 10.2F;float num2 = 10.2f;float num3 = (float)10.2;System.out.println(num1 + num2 + num3);}
}

程序的最终执行结果应该为:30.6,我们运行查看一下:
在这里插入图片描述

居然不是期待的 30.6!?
这是源于 Java本身的BUG,这个问题光靠计算本身是无法解决的,需要运用我们后期将会学习的 BigDecimal类 或是 Math 两个工具类来解决。

3.8 只有 double 或 float 才可以保存小数

int x = 9;
int y = 5;
System.out.println(x / y);

该段代码的运行结果自动省略了小数!
在这里插入图片描述

源于使用 两个int类型进行定义,想改变其结果可以将其任意一方进行转型。

int x = 9;
int y = 5;
System.out.println(x / (double)y);
// System.out.println(x / (float)y);

在来看一下程序转型之后的运行结果:
在这里插入图片描述

3.9 字符型

3.9.1 char

byte 属于字节,按照传统概念来讲:一个字符 等于 两个字节(一个char等于两个byte)。
下面示例代码我们会演示 char 与 int 变量的转换。
在计算机世界中,一切都是以编码形式体现的,而 Java使用 UNICODE 编码格式。

unicode编码格式包含了 ASCII 码的部分编码,其中英文字母的范围如下:

  • 大写字母: 65 ~ 90
  • 小写字母: 97 ~ 122

大写字母和小写字母之间的编码范围相差了 32。
在 Java中,"双引号"的使用表示字符串,而字符则使用 '单引号’表示。

look Code:

public class TestcharDemo {public static void main(String[] args) {char a = 'A';int num = a;System.out.println("测试的字符为:"+a);System.out.println("该测试字符所对应码点为:"+num);}
}

码点:

一个编码中的某个字符所对应的代码值,称为码点。

写好了代码,补充了码点的概念,我们该来看一下程序的执行结果了:
在这里插入图片描述

3.10 常用的编码范围

‘A’(65)~ ‘Z’(90);
‘a’(97)~‘z’(122);
‘0’(48)~‘9’(57);

3.11 利用编码范围转换字母大小写

public class TestcharToBig {public static void main(String[] args) {char letter = 'A';int num = letter + 32;letter = (char) num;System.out.println(letter);}
}//程序的最后输出结果一定为字符:'a'

3.12 布尔型

布尔两个字源于一个数学家的名字:乔治·布尔(George Boole)。
布尔型是一种逻辑结果,它主要保存 true、false两类数据。

boolean值的使用:

public class TestbooleanDemo {public static void main(String[] args) {boolean flag = false;//利用if语句判断条件是否成立//if语句会在后续内容中进行介绍if (!flag){System.out.println("Hello!!!~World");}}
}

一定要记住 boolean常用于逻辑判断且它只有两个值!:true、false。
整型值和boolean型之间无法进行转换。
在许多其他编程语言中,如:C++,数值甚至指针可以代替boolean值,值0相当于布尔值false,非0值则相当于boolean的true值。而在Java中不允许使用0或1来代替布尔值。


4. 变量和常量

与所有程序设计语言一样,Java 也使用变量来存储值。常量就是值不变的量。

一直,我们都没有明确陈述过变量和常量的概念,
在此一小节,我们详细说明:

4.1 声明变量

其语法为:

//声明变量
数据类型 变量名称;//声明并赋值
数据类型 变量名称 = 常量值;// 你甚至可以同时声明多个变量
数据类型 变量名称1,变量名称2,变量名称3;

4.2 变量初始化

直接使用未经过初始化的变量,编译器会报错!

int num;
System.out.println(num);

变量初始化操作是针对这一问题的最好解决办法!
所谓初始化,其实也就是…

int num = 0; //赋值....赋初始值
System.out.println(num); //然后就可以正常使用了!

而且初始化方式有两种,其一就是像上述那样直接写在一行。
第二中方式:

int num; //这种写法只是在声明//使用时做初始化操作
num = 0; //这样写是在赋值
System.out.println(num);//而第一种写法是声明并赋值

4.3 变量 and 常量

上面的内容我们只是陈述了变量的声明和使用。那到底什么是常量和变量?

常量

你可以理解成固定不变的值,不管是整数还是浮点数,只要是固定值,它就称为常量。

变量:

而变量需要先进行声明。如 int num; 虽然还没有赋值,如果你进行赋值如:
int num = 10; 这里就是声明了一个变量,该变量为int类型,其名称为 num。
然后赋值了一个常量10。其实也就是变量里存了一个值,这个值是一个常量。

但其实常量的使用是这样的:

public class TestDemo{final static int num = 0;//经 final 修饰符修饰后,只能赋值一次且值永远不可改变。
}

5. 运算符

当运算符这三个字出现在我的脑袋里时,我的第一反应就是数学当中运算符概念。就像四则运算总是离不开 ‘+’、‘-’、‘*’、‘/’、‘%’。而计算机编程语言当中也有运算符的概念。
更叹为惊奇的是编程语言当中的运算符还有类别划分,其中包括:关系运算符,数学运算符,三目运算符,逻辑运算符,位运算符。

下面进行逐个解析:

我们就先从关系运算符开始玩!

5.1 关系运算符

主要功能就是进行数据的大小关系比较,返回的结果是 boolean 型数据(只有true、false 两种取值),常用的关系运算符有:
大于 >
大于等于 >=
小于 <
小于等于 <=
等等于 ==
不等于 !=

代码演示:

package TestOperator;public class TestRelation {public static void main(String[] args) {System.out.println("大于:"+ (3 > 1));System.out.println("大于等于:"+(3 >= 1));System.out.println("小于:"+ (3 < 1));System.out.println("小于等于:"+(3 <= 1));System.out.println("等等于:"+ (3 == 1));System.out.println("不等于:"+(3 != 1));}
}

我们知道关系运算符只有两种结果值:true 或是 false,程序的运行结果也可想而知
在这里插入图片描述

5.2 数学运算符

数学运算符在实际开发中也经常用到,其内容主要有:四则运算,取模,自增等。

5.2.1 四则运算 code 示例

四则运算:加、减、乘、除

int numA = 10;
int numB = 20;System.out.println("加法计算:" +(numA + numB));
System.out.println("减法计算:" +(numA - numB));
System.out.println("乘法计算:" +(numA * numB));
System.out.println("除法计算:" +(numA / numB));

我们看一下四则运算的测试结果:
在这里插入图片描述
哦!触发计算的结果居然为零!?
不为正确结果值的0.5是因为两个int类型进行计算,舍掉了小数部分。

你可以在输入时对其转型,如:

System.out.println("除法计算:" +((double)numA / numB));

在这里插入图片描述

这次的结果就没有出现问题了!

可是除法计算中有余数怎么办?

如有除法算式中有除不尽的余数,我们可以利用取模运算符来得到余数

如:

int numA = 10;
int numB = 3;System.out.ptintln(numA % numB);

在这里插入图片描述

如果你不能感受到取模运算符的神奇之处,那么利用它判断奇数偶数如何?

5.2.2 利用取模运算符判断奇数偶数

int num = 10;if(num % 2 ==0){System.out.println("您选择的数字是一个偶数!");
}else{System.out.println("您选择了一个奇数~");
}

这里用到的if分支语句,我们会在后续进行详细介绍!
先来看一下程序的执行结果吧:
在这里插入图片描述

5.3 简化运算符

简化运算符是为了简化用户的编写,其中包括:*=、/=、+=、-=、%=、++、–

5.3.1 四则运算的简化运算符

//设置变量
int numA = 10;System.out.println("乘等于:"+(numA*=2));

用于其使用方法大同小异,我们在代码处只演示了乘法的简化运算符。待看完执行结果直接跳到更为重要的自增自减运算符。

在这里插入图片描述

5.3.2 自增自减运算符

++ 、 --,称为自增和自减。该运算符的设置位置不同,执行的顺序也不同。

以 自增运算符为例:

我们将自增运算符设置在变量后:

int num =1;
num++;
System.out.println(num);

这里设置了一个变量,然后让该变量实现自增操作,最后打印该变量,其结果为2,因为自增1。
在这里插入图片描述

可你知道该变量是怎么什么时候自增的吗?
我将代码改动一下,以便更好的说明:

int num =1;System.out.println(num++);
System.out.println(num);

变量的初始值设置为1,在第一条打印数据出虽然定义了++操作,但是输出时并没有将值进行++,因为将++写在变量的后面时++的操作也是在语句执行完成之后才进行的。你可以看一下程序的执行结果。

程序结果执行图:
在这里插入图片描述

那如果将运算符写在变量之前呢?

我们在用自减运算符进行测试:

int num = 5;
--num;
System.out.println(num);

程序执行结果为:
在这里插入图片描述

那它是在什么时候完成自减动作的呢?

//同上述自增测试思路相同
int num = 5;System.out.println(--num);
System.out.println(num);

在这里插入图片描述

原来是在语句执行时已经完成了自减动作。

5.4 三元运算符

三元运算符,也有人称其为三目运算符。它是一种赋值形式,执行该运算符时候可以以一个布尔表达式的结果进行赋值。

基本语法:

数据类型 变量 = 布尔表达 ? 设置满足条件所执行的内容 : 设置不满足条件时所执行的内容;

具体示例如下:

//定义变量,存储整数
int numA = 10;
//定义变量,存储第二个整数
int numB = 20;//定义三目运算符,条件设置为 两个变量的大小比较//如果第一个变量的值大于第二个变量,则输出第一个变量存储的值//否则,与其相反。切记还要定义变量进行接收。
int max = numA > numB ? numA : numB;
//输出存储三元运算符表达式的变量
System.out.println(max);

其结果显示为:
在这里插入图片描述

5.5 逻辑运算符

逻辑运算一共包含三种:
与(多个条件一起满足)
或(多个条件只有一个满足)
非(使用 “!” 操作,可以实现取反值的效果)

5.5.1 使用 ‘!’

取反值的效果,如:结果为true时,得到的是一个false。结果为false时,得到的是一个true。

boolean flag = true; //第一个标志为true值
System.out.println(!flag); //输出时利用 '!' 进行取反

程序执行结果:
在这里插入图片描述

5.5.2 普通 ‘&’ 和 短路’&&’

普通与和短路与,其语法形式上的区别是普通与编写一个&,而短路与需要编写两个&&。而真正意义上的作用区别我们在下述代码示例中进行演示。

普通 &:

if ((1 == 2) & (10 / 0 == 0)){System.out.println("HelloWorld!");
}

程序执行结果:
在这里插入图片描述

程序执行后出现了错误信息,我们知道在数学中,零不可以作为除数,因为没有意义。更重要的是!:我们用了普通与进行运算的连接,当第一个条件直接结果为false时,并没有出现短路效果,而是继续执行后面的条件语句。使用普通与将设置的所有条件语句都执行完成后才返回结果!没错这就是普通与!
.
即: 一个条件值为false时,其结果已经为false。但不具备短路效果,而是将所设置的条件语句都执行完成后,才返回结果。

具备短路效果的工作由短路与负责:

if ((1 == 2) && (10 / 0 == 0)){System.out.println("HelloWorld!");
}

在这里插入图片描述

虽然没有输出任何结果,但也没有报错信息。因为第一个结果为 false时,结果注定为false,后面的语句将短路。

5.5.3 或

或操作是若干个条件一起进行判断,其中有一个结果值返回为 true,则结果为 true。只有所有结果都为 false时候,才会返回false。
或也有两种 单| 和 双 ||

普通或:

if ((1 == 1) | (10 / 0 == 0)){System.out.println("HelloWorld!");
}

执行结果:
在这里插入图片描述

虽然普通或的作用是:一个为 ture,结果为true。条件都为 false时,结果才为 false,但程序又出现了错误,可想而知,其效果与普通与一样,不具备短路效果。

反观短路或:

if ((1 == 1) || (10 / 0 == 0)){System.out.println("HelloWorld!");
}

在这里插入图片描述

好神奇!!居然输出了 HelloWorld!

看来短路与和短路或都具备短路效果,而普通与和普通或都不具备短路效果。
虽然短路与的作用是所有条件都为 true时结果才为true。
而短路或作用则是所有条件中一个为true时,结果就返回为 true。都为false才会返回为false。

5.6 位运算符

位运算符操作的是底层二进制数据,位运算符包括:&、|、^、>>、<<、>>>

由于这里的内容触碰底层,如果用文字讲述清楚需要大量翻阅书籍能容才能转述清楚。
所以这里只说明一个示例。

如果需求让你以最快速度计算 2 * 2 * 2 的值。你会怎么做?
直接Sysmte.out.println(2 * 2 * 2); ? No!!! 那样计算机还需要先将 十进制的2转换为2进制进行计算,计算之后在将结果转换为十进制进行输出!别忘了计算机的世界是二进制语言。
如果想采用更快的方式实现,你可以利用 位运算符

int num = 2;
System.out.println(num <<2); 

这段代码利用计算机按位存储数据的机制,直接在位上动手脚,向左移动2,位上的数据,结果为:8。效率其高在于:舍去了进制之间的转换,直接移动位上的数据,然后输出结果。

程序执行结果:
在这里插入图片描述

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

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

相关文章

Smarty

一.知识 1.PHP Smarty模版注入 二.实例 {{system(ls /)}}{{system(cat /flag)}}

从零搭建一个react + electron项目

最近打算搭建一个react electron的项目&#xff0c;发现并不是那么傻瓜式 于是记录一下自己的实践步骤 通过create-react-app 创建react项目 npx create-react-app my-app 安装electron依赖 npm i electron -D暴露react项目的配置文件&#xff08;这一步看自己需求&#xff0c…

《Flask Web 开发指南 pt.2》

在编写 Flask 程序的时候&#xff0c;你需要注意你的程序文件不要命名为 flask.py&#xff0c;建议命名为 app.py 或者 wsgi.py 但如果你的程序不是叫 app.py 或者 wsgi.py&#xff0c;那么你就需要设置环境变量 FLASK_APP 的值为程序名字 设置环境变量有两种方法&#xff0c;在…

url重定向

不安全的url跳转 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。 如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话 就可能发生"跳错对象"的问题。 url跳转比较直接的危害是…

SpringBoot整合邮件服务

SpringBoot整合邮件服务 发送邮件应该是网站的必备功能之一&#xff0c;什么注册验证&#xff0c;忘记密码或者是给用户发送营销信息。最早期的时候我们会 使用 JavaMail 相关 api 来写发送邮件的相关代码&#xff0c;后来 Spring 推出了 JavaMailSender 更加简化了邮件发送的…

API是什么?

API是什么&#xff1f; API&#xff08;Application Programming Interface,应用程序编程接口&#xff09;是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制…

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)【三】

文章目录 SSM(Vue3ElementPlusAxiosSSM前后端分离)--基础环境搭建【三】项目介绍项目功能/界面● SSM 整合项目界面 配置Spring 和MyBatis , 并完成整合 SSM(Vue3ElementPlusAxiosSSM前后端分离)–基础环境搭建【三】 项目介绍 项目功能/界面 ● SSM 整合项目界面 配置Sprin…

回调函数的简单用例

列举项目中一个简单的回调函数用例 ①用MsgInterface_t定义一个结构体s_Lin_MsgInterface&#xff0c;包含两个回调函数成员&#xff1a; ②确定结构体下的回调函数成员的参数&#xff1a; ③传入实参&#xff0c;确定结构体下的回调函数成员的函数名&#xff1a; ④最终回…

【数据结构与算法——TypeScript】算法的复杂度分析、 数组和链表的对比

【数据结构与算法——TypeScript】 算法的复杂度分析 什么是算法复杂度(现实案例)&#xff1f; ❤️‍&#x1f525; 前面已经解释了什么是算法&#xff1f; 其实就是解决问题的一系列步骤操作、逻辑。 ✅ 对于同一个问题&#xff0c;我们往往有很多种解决思路和方法&#x…

Jenkins工具系列 —— Jenkins 安装并启动

文章目录 安装涉及相关链接选择安装Jenkins版本安装JenkinsJenkins web页面启动卸载Jenkins 安装涉及相关链接 Jenkins官网&#xff1a; https://www.jenkins.io/zh/ Jenkins下载安装步骤&#xff1a; https://www.jenkins.io/zh/download/ 安装各种版本OpenJDK&#xff1a; h…

weui cells 如何去掉边框

问题&#xff1a;weui cells 如何去掉边框 解决&#xff1a; cells通过before,after实现边框&#xff0c;不显示的话&#xff0c;在引用的页面wxss加上&#xff1a; .weui-cells:before,.weui-cells:after {border: none; }

3分钟白话RocketMQ系列—— 核心概念

白话3分钟&#xff0c;快速了解RocketMQ基础&#xff0c;包括适用场景&#xff0c;以及基本概念。 看完如果不了解&#xff0c;欢迎来打我。 关键字摘要 低延迟、高可用、高可靠、高并发 的消息中间件适合在线业务分为producer、consumer、nameserver、broker等角色另外还有主…

过程:从虚拟机上添加 git 并成功提交到 GitLab 的全过程

Ⅰ、准备工作&#xff1a; 1、Git 查看&#xff1a; 其一、命令&#xff1a;git --version // 此时就能在虚拟机环境下看到 git 的版本为: git version 2.41.0 其二、如何在虚拟机上安装 git &#xff1a; A、命令 &#xff1a; sudo apt-get install git B、然后再输入虚…

最不透明的211!大幅度扩招!但数据分析太难做了!

一、学校及专业介绍 中国传媒大学&#xff08;Communication University of China&#xff09;&#xff0c;简称“中传”&#xff0c;位于首都北京市&#xff0c;是中华人民共和国教育部直属的信息传播领域行业特色大学&#xff0c;国家“双一流”建设高校&#xff0c;国家“21…

基础篇:多线程所需知识:RAII接口模式对生产者和消费者封装以及多batch实现

我们先来弄一个最基础的infer类&#xff1a; class Infer{ public: bool load_model(const string &file){context_ file;return true;} void forward(){if(context_.empty()){printf("加载模型异常\n");return;}printf("使用%s进行推理\n " , contex…

学会这样提问,你就超过了82.7%的老网工

下午好&#xff0c;我的网工朋友 很多朋友会说&#xff0c;我怎么问问题&#xff0c;在群里&#xff0c;或者后台&#xff0c;还有给老杨总发消息&#xff0c;都没收到比较详细的回复&#xff1f;尤其是问技术问题的时候。 除了我们回复消息的时间和精力的确比较有限之外&…

解密外接显卡:笔记本能否接外置显卡?如何连接外接显卡?

伴随着电脑游戏和图形处理的需求不断增加&#xff0c;很多笔记本电脑使用者开始考虑是否能够通过外接显卡来提升性能。然而&#xff0c;外接显卡对于笔记本电脑是否可行&#xff0c;以及如何连接外接显卡&#xff0c;对于很多人来说仍然是一个迷。本文将为您揭秘外接显卡的奥秘…

单价20块蓝牙耳机卖爆越南市场,现象级爆款出现?

以儒道为文化底蕴的越南&#xff0c;是与中国最为相近的东南亚国家&#xff0c;"快速增长的劳动人口相对年轻的社会群体"是很多人对越南这个国家的基本认知。背靠庞大的Z世代用户群体&#xff0c;越南社会年轻化消费需求暴涨&#xff0c;手机与数码品类商品作为“年轻…

Linux中使用verdaccio 搭建私有npm 服务器

安装verdaccio npm i -g verdaccio安装完成 输入verdaccio,出现下面信息代表安装成功&#xff0c;同时输入verdaccio后verdaccio已经处于运行状态&#xff0c;当然这种启动时暂时的&#xff0c;我们需要通过pm2让verdaccio服务常驻 ygiZ2zec61wsgbo9t9i346jbZ:~$ verdacciowar…

Vue使用QuillEditor富文本编辑器问题记录

1.内容绑定的问题 绑定内容要使用 v-model:content"xxx" 的形式。 2.设置字体字号 字体以及字号大小的设置需要先注册。 <script> import { QuillEditor,Quill } from vueup/vue-quill import vueup/vue-quill/dist/vue-quill.snow.css; // 设置字体大小 c…