我就是饿死,也不会做程序员的!Java第六课,转换及运算符,真香

视频加载中…

以下是昨天的作业的答案。

选择题

1、 下列哪个标识符

选择题

1、 下列哪个标识符是合法的()。

A.class:关键字,不能当标识符

B.$abc

C.1234:标识符不能以数字开头

D.Car.taxi:标识符只能是大小写字母、数字和下划线组成,不能出现小数点;

2、 若有定义:int a,b; a=a+10;则执行上述语句后,a的值是()。

A. 10

B. 11

C. 0

D. 编译产生错误;变量a在使用前必须先赋值;

以下选项中变量均已正确定义和赋值,合法的赋值语句是()。

A. a==1; :是比较运算,不是赋值运算

B. ++i; :是自增运算 i = i + 1;

C. a=a+1;

D. 4+=a;:不能将变量赋值给常量;

4、 在Java中,下列()语句不能通过编译。

A. String s= \”join\”+ \”was\”+ \”here\”;

B. String s= \”join\”+3;

C. int a= 3+5;

D. float f=5+5.5;:Java中浮点数默认是double类型的,所以右边计算的结果是一个double值,不能直接赋值给float型变量;

简答题

请解释什么是常量?

答:不能改变的数据就是常量;

请解释注释的分类和每种注释的使用场景

答:

单行注释:以\”//\”开头,直到当行结束,都是被注释内容;主要用来注释一行内容;

多行注释:以\”/*\”开头,以\”*/\”结束,中间可以是多行,也可以是一行的一部分,都是被注释内容;如果需要注释多行,或者一行的一部分,就可以使用多行注释

文档注释:以\”/**\”开头,以\”*/\”结束,中间都是被注释内容;文档注释可被javadoc工具提取出来,生成一个帮助文档,供人使用;

请写出下列标识符的命名规则?

类名:首字母大写,多个单词每个单词首字母大写,其他字母小写;

方法名:首字母小写,多个单词第二个单词开始首字母大写,其他字母小写;

变量名:首字母小写,多个单词第二个单词开始首字母大写,其他字母小写;

请解释什么是变量?

答:可以改变的数据就是变量;

Java中的变量指的是内存中的一块空间,可以保存相同类型的不同的常量;

请写出Java中数据类型的分类以及基本数据类型所占的字节数?

答:

Java中数据的类型转换有几种?分别是什么?

答:两种:

自动类型转换:将范围小的数据放到范围大的类型的变量中,数据精度不会损失,所以可以自动进行;

强制类型转换:将范围大的数据放到范围小的类型的便两种,超出范围的部分会舍弃,造成精度损失,所以需要强制进行;

看程序写结果(写出自己的分析理由),程序填空,改错,看程序写结果。

1、请问程序中,哪行代码有错误?应该如何改正; 如果无错误,请写出结果

char a=\’a\’,b;//第一行

b=(a+10);//第二行:编译错误;右边是字符和int型数据计算,结果也是一个int型整数,int型数据不能直接赋值给char型变量

System.out.println(a);//第三行

System.out.println(b);//第四行

2、定义变量的写法:哪句是编译失败的呢?为什么呢?

byte b1 = 3, b2 = 4, b;

b=b1+b2;:编译失败;因为右边是两个整数变量进行计算,计算结果是一个整数,整数在Java中都默认是int类型;int类型数据不能直接赋值给byte类型变量

b=3+4;

3、下面代码有问题吗?为什么?

short s = 1;

s = s + 1;有问题,因为右边计算结果是一个int值,不能直接赋值给byte类型变量

short s = 1;

s+=1;

4、下列代码执行后,请问a,b,c的值分别是多少?

int a = 10;

int b = 20;

int c = 30;

a = b++; // a = 20,b = 21;

b = ++c; //b = 31 ,c = 31;

a–; //a = 19

答:a = 19,b = 31,c = 31

下列代码的执行结果是:

System.out.println(\’0\’+\”ak\”+47);:0

System.out.println(\’0\’+47+\”ak\”);:95ak//字符和数字向加减,实际参与运算的是字符在编码表中对应的数字;

下列代码的执行结果是:

int a = 10;

a = a++;

a++;

int b = (–a)+(a–)+(a*10);

b = b–;

System.out.println(a);:9

System.out.println(b); :110

写出下面程序运行的结果

byte x = -32;

byte y = (byte)(x>>2);

System.out.println(y);:-8

写出下面程序运行的结果

byte x = 127;

byte y = (byte)(x>>9);

System.out.println(y);:0

练习

练习各种运算符

略;

求一个三位数的各个位上的数字

使用三元运算符计算三个整数的最大值

写程序交换两个整数a和b的值(用不同的方法)

方法一:

方法二:

方法三:

是合法的()。

A.class:关键字,不能当标识符

B.$abc

C.1234:标识符不能以数字开头

D.Car.taxi:标识符只能是大小写字母、数字和下划线组成,不能出现小数点;

2、 若有定义:int a,b; a=a+10;则执行上述语句后,a的值是()。

A. 10

B. 11

C. 0

D. 编译产生错误;变量a在使用前必须先赋值;

以下选项中变量均已正确定义和赋值,合法的赋值语句是()。

A. a==1; :是比较运算,不是赋值运算

B. ++i; :是自增运算 i = i + 1;

C. a=a+1;

D. 4+=a;:不能将变量赋值给常量;

4、 在Java中,下列()语句不能通过编译。

A. String s= \”join\”+ \”was\”+ \”here\”;

B. String s= \”join\”+3;

C. int a= 3+5;

D. float f=5+5.5;:Java中浮点数默认是double类型的,所以右边计算的结果是一个double值,不能直接赋值给float型变量;

简答题

请解释什么是常量?

答:不能改变的数据就是常量;

请解释注释的分类和每种注释的使用场景

答:

单行注释:以\”//\”开头,直到当行结束,都是被注释内容;主要用来注释一行内容;

多行注释:以\”/*\”开头,以\”*/\”结束,中间可以是多行,也可以是一行的一部分,都是被注释内容;如果需要注释多行,或者一行的一部分,就可以使用多行注释

文档注释:以\”/**\”开头,以\”*/\”结束,中间都是被注释内容;文档注释可被javadoc工具提取出来,生成一个帮助文档,供人使用;

请写出下列标识符的命名规则?

类名:首字母大写,多个单词每个单词首字母大写,其他字母小写;

方法名:首字母小写,多个单词第二个单词开始首字母大写,其他字母小写;

变量名:首字母小写,多个单词第二个单词开始首字母大写,其他字母小写;

请解释什么是变量?

答:可以改变的数据就是变量;

Java中的变量指的是内存中的一块空间,可以保存相同类型的不同的常量;

请写出Java中数据类型的分类以及基本数据类型所占的字节数?

答:

Java中数据的类型转换有几种?分别是什么?

答:两种:

自动类型转换:将范围小的数据放到范围大的类型的变量中,数据精度不会损失,所以可以自动进行;

强制类型转换:将范围大的数据放到范围小的类型的便两种,超出范围的部分会舍弃,造成精度损失,所以需要强制进行;

看程序写结果(写出自己的分析理由),程序填空,改错,看程序写结果。

1、请问程序中,哪行代码有错误?应该如何改正; 如果无错误,请写出结果

char a=\’a\’,b;//第一行

b=(a+10);//第二行:编译错误;右边是字符和int型数据计算,结果也是一个int型整数,int型数据不能直接赋值给char型变量

System.out.println(a);//第三行

System.out.println(b);//第四行

2、定义变量的写法:哪句是编译失败的呢?为什么呢?

byte b1 = 3, b2 = 4, b;

b=b1+b2;:编译失败;因为右边是两个整数变量进行计算,计算结果是一个整数,整数在Java中都默认是int类型;int类型数据不能直接赋值给byte类型变量

b=3+4;

3、下面代码有问题吗?为什么?

short s = 1;

s = s + 1;有问题,因为右边计算结果是一个int值,不能直接赋值给byte类型变量

short s = 1;

s+=1;

4、下列代码执行后,请问a,b,c的值分别是多少?

int a = 10;

int b = 20;

int c = 30;

a = b++; // a = 20,b = 21;

b = ++c; //b = 31 ,c = 31;

a–; //a = 19

答:a = 19,b = 31,c = 31

下列代码的执行结果是:

System.out.println(\’0\’+\”ak\”+47);:0

System.out.println(\’0\’+47+\”ak\”);:95ak//字符和数字向加减,实际参与运算的是字符在编码表中对应的数字;

下列代码的执行结果是:

int a = 10;

a = a++;

a++;

int b = (–a)+(a–)+(a*10);

b = b–;

System.out.println(a);:9

System.out.println(b); :110

写出下面程序运行的结果

byte x = -32;

byte y = (byte)(x>>2);

System.out.println(y);:-8

写出下面程序运行的结果

byte x = 127;

byte y = (byte)(x>>9);

System.out.println(y);:0

练习

练习各种运算符

略;

求一个三位数的各个位上的数字

使用三元运算符计算三个整数的最大值

写程序交换两个整数a和b的值(用不同的方法)

方法一:

方法二:

方法三:

Java单元测试及常用语句

编写Java单元测试用例,即把一段复杂的代码拆解成一系列简单的单元测试用例,并且无需启动服务,在短时间内测试代码中的处理逻辑。写好Java单元测试用例,其实就是把“复杂问题简单化,建单问题深入化“。在编写的过程中, 我们也可以对自己的代码进行一个二次检查。

以下是我总结的一些编写单元测试的好处:

1.测试代码逻辑时,不需要启动整个应用。

2.单元测试可以覆盖边界值

3.提高原有代码的复用

4.可以有效避免代码改动后,对原有逻辑的潜在影响

Mockito是目前最普遍的单元测试模拟框架。Mockito可以模拟应用中依赖的复杂对象,从而把测试对象和依赖对象隔离开。PowerMock为Mockito提供了扩展功能。为模拟静态方法,final类,和私有方法等。我们选择使用以Mockito为主,PowerMock为辅的框架来做单元测试。

2.1 引入Mockito和PowerMock包,在pom.xml文件中加入以下依赖:

PowerMock目前最新版本为2.0.9【PowerMock链接】由于PowerMock包中已经包含了对应的Mockito和JUnit包,所以无需再单独引入。

3.1 模拟指定类的对象实例,用于模拟依赖对象(类成员)

在Spring中,这些成员对象通过@Autowire,@Resource,@Value等方式注入,可能涉及到环境配置或者依赖第三方接口。在单元测试中,不是我们关注的点,所以可以用mock模拟

3.2 定义被测试对象

把被测试服务类进行实例化

3.3 模拟枚举类型/静态方法

需要把对应的模拟类放在@PrepareForTest

3.4 模拟依赖方法

在模拟完依赖的参数和返回值后,可以利用Mockito功能,进行依赖方法的模拟。如果模拟对象还有方法调用,则需要模拟这些依赖对象的方法。

3.5 模拟构造方法

PowerMock提供了对构造方法的模拟,但是需要把构造方法的类放在@PrepareForTest

3.6 验证方法调用次数

被测方法调用后,一些方法会出现调用多次或根据不同条件进行不同次数的调用。此时,可以根据验证方法调用次数,确定代码的有效性

3.7 验证返回值

对于方法调用后的出参,我们会有一定的预期。所以,可以根据校验返回值是否符合预期,确保返回值的正确性

3.8 验证异常对象

JUnit的@Test注解提供了一个expected属性,可以指定一个期望的异常类型,用于捕获异常并验证其异常类型。【注】:只能验证异常类型,不能验证异常信息。

下面是一个本地方法的单元测试用例,方法中调用了外部接口,并且其中包含了枚举值的使用。

源方法即需要单测方法:

首先,是单元测试时一些必要的初始化

4.1 单测场景一(确定接口调用,并返回值正确):

通过verify方法来确定接口是否调用过,并且只调用过1次。

通过assert来确认返回值是否满足预期

4.2 单测场景二(必要异常是否抛出):

通过在@Test注解上加入expected属性,测试当接口返回值为空时,是否可以抛出异常

编写单元测试在开发中的地位举足轻重。在开发过程中,避免不了优化或重构历史代码。单元测试,在一定程度上可以帮助测试更新后逻辑,以及潜在调用链。另外也分享一些链接,希望可以帮助大家完成从0到1的搭建。

•Java编程技巧之单元测试用例编写流程:https://mp.weixin.qq.com/s/hX_RIYs-nBnqVwdq5B4rhg

•powerMock的Git链接:https://github.com/powermock/powermock

•powerMock简介:https://www.baeldung.com/intro-to-powermock

•避免Install的时候Skip test: https://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html

作者:京东物流 牟佳义

来源:京东云开发者社区 自猿其说Tech

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。