我就是饿死,也不会做程序员的!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
文章为作者独立观点不代本网立场,未经允许不得转载。