单元测试
岗位:开发,测试(保证写的代码的正确)
开发者自己做完业务代码,需要自测(自己测试自己写的代码)
1)打印调试信息到控制台:syso坏处,他会浪费我们代码的执行时间。以前调试时检查是否正确,正确后,真正交付用户时,把这些代码屏蔽掉。删除、注释掉(在编译compile后注释语句会从目标文件删除)
2)单元测试 JUnit (每个类的每个功能都要测试--方法)要写调试代码,它通过一个日志级别概念,相当于全局的开关,开始就输出日志信息打印到控制台,关闭时就不会输出。不执行,不影响程序效率。
单元测试是每个开发者都必须要做的事情!每天每个类都要写单员测试。
引入Junit单元测试支持
1)Junit属于第三方(非java原生)特点:导包 * jar,工程要支持Junit,我们开发的代码才可以使用
2)创建单元测试的方法替代main方法。独立方法去运行。
3)main、业务方法、单元测试方法,这些怎么去区分?Junit提供技术:注解@Test(戴帽子)
4)把我们要测试的代码写到@Test的方法内,不写在mian方法中
5)运行方法:右键运行,会有新的菜单(java junit)运行时会额外的弹出一个框(里面有一个进度条,如果绿色代表执行成功,如果棕色代表出错了)。
package com.tedu.datatype;
import org.junit.Test;//导包
//创建一个单元测试的类
//1.配置整个项目支持junit,他只需要导入一次
//2.创建一个单元测试方法,public void(必须是公开无返回的)
//3.戴个帽子@Test注解
//4.运行java junit
public class TestHello {
public static void main(String[] args) {
System.out.println("Hello World");
}
//单元测试方法
//必须是public对外暴露,必须无返回值,名字随意,必须无参
@Test //戴帽子必须写在方法上
public void print() {
System.out.println("Hello jUnit");
}
}
main和junit单员测试的方法有什么区别?
main方法是原生的方法,java的规范。
main方法不是必须,如果这个类需要执行(运行)必须写main(入口函数),类可以有很多方法,但main方法只能有一个。运行时java会自动找main方法,有就执行,没有就不运行。
单元测试方法不是原生,不是java提供的,是第三方junit提供的。单员测试的方法在一个类中可以有多个。
单员测试的方法可以选择某个进行执行。单元测试的方法比main方法更加灵活
本质差异,junit单元测试的方法能否替代掉main方法?
1)main方法最终可以类似QQ,游戏,单独的运行程序。(目标是可以运行程序)main可以充当测试,但是没有junit灵活。
2)junit单元测试只为测试而生。运行时跟测试就无关。(目标就是测试)
程序
1)旧程序定义:数据结构+算法
2)新程序定义:数据结构+算法+框架(三大框架ssm)+架构*(分布式,微服务,大数据)
数据结构
1)数据的存储
数据要计算,要临时存储在内存中,执行代码时,先把数据放入内存,需要计算时,从内存中去获取数据,计算完,再把数据放回内存中。(内存是个稀缺资源),使用内存时必须合理的使用。给占用小的就分配小的资源,给大的就分配大的资源。
怎么把生活中的事务对应去变成计算机对应的资源,最终体现在内存所占用的大小?
在java中分为两类:
1)基本类型变量: 8种
2)更复杂结构:对象(引用类型)
八种基本类型
分为三类:整数类型,小数类型,其他
整数类型4个:byte,short,int,long
小数类型:float,double
其他:char,boolean
特点:长度不同,表现不同的大小,基本类型都有默认值
计算机最小单位:bit位。开发语言java中最小单位:byte字节。1byte=8bit
操作系统32b,64b
1)byte 字节,一个字节,默认0 -128~127
2)short 短整型,二个字节,默认0 -32768~32767
3)int 整型,四个字节,默认0 +-21亿
4)long 长整型,八个字节,默认0
5)float 单精度浮点,四个字节,默认0.0
6)double 双精度浮点,八个字节,默认0.0
7)char 单字节,二个字节 ISO-8859-1 ASC|| (2~4个) unicode 3个字节,4个字节,默认空字符(null)
8)boolean 布尔值, true/false 一个字节,默认false
为什么java要有8个基本类型?
java的基本类型获取和访问的速度快;包装类型对象,它有额外很多方法,这些内容都要占内存,访问速度慢。基本类型占用内存空间小,执行速度快。包装类型(对象)占用内存空间大些,但是开发方便,无需自己去写这些额外的方法。
java面对对象,使用额外方法,把基本类型封装成包装类型,他就可以享受这些额外的方法
两个数字:100,200用什么类型存储
100 byte
200 short
//导包
import org.junit.Test;
//表达一个值要尽量使用刚刚好的存储类型,合理分配资源
//太小存不下,太大浪费空间
public class TestSpace {
@Test
public void num() {
//存储100使用哪个基本类型最合适?
byte b = 100;
short s = 100;//错误的,浪费空间了
//可以使用byte存储,也可以使用short来存储
//但是显然short占用空间较大
System.out.println(b);
//存储200使用哪个基本类型更合适?
//Type mismatch: cannot convert from int to byte
//类型不匹配,默认输入一个整数,java当做int类型
byte b1 = (byte)200;//强制类型转换,强制java编译器200是一个字节类型
short s1 = 200;
System.out.println(b1);//字节表达:-128~127(256=2^8)
System.out.println(s1);//短整型:-32768~32767(64k,6w)
}
}
默认值
import org.junit.Test;
//打印八个基本类型的默认值
public class TsetDefaultValue {
//类级别变量,写在类名下面的,也叫成员变量
//也叫字段field,属性property
byte b;
short s;
int i;
long x;//l有些字体不易和其他的字符区分,所以开发中不要使用
float f;
double d;
char c;
boolean boo;
@Test
public void defaultValue() {
//新的概念:局部变量-方法里面的(必须初始化值),成员变量
//int a;
//The local variable a may not have been initialized
//局部变量必须初始化
//System.out.println(a);
//ctrl+alt+↓(复制光标所在行)
System.out.println("byte默认值"+b);//0
System.out.println("short默认值"+s);//0
System.out.println("int默认值"+i);//0
System.out.println("long默认值"+x);//0
System.out.println();//空行
System.out.println("float默认值"+f);//0.0
System.out.println("double默认值"+d);//0.0
System.out.println();//空行
System.out.println("char默认值"+c);//
System.out.println("boolean默认值"+boo);//false
}
文字特殊性
把人类文字通过计算机去表达,计算机只有0和1,二进制.a,b
解决方案ASCII编码,它把人类0-9,a-z设置一个数字顺序,编号。
a字母97整数(十进制转换二进制) 二进制值:0110 0001
我们在键盘上面敲击一个a字母,电脑先把a字母在ASC||编码表中去查a字母的对应编号97
把97这个整数转换成二进制010 0001,最后计算机才能识别。识别之后计算又把二进制转换成十进制,然后把97又转换成a字母,如何展现在屏幕
这个过程的意义,为什么要做2次转换呢?人类和计算机通讯
字符的默认值:ASCII码表它的第一个值:NUL,总共128个,A(65),a(97)
字符类型它有一个特殊性:它可以有两个身份:
char c1 = 'a';
char c2 = 97;
import org.junit.Test;
//字符案例,两种表现形式
public class TsetChar {
@Test
public void Cha() {
//第一种:字符形式,字符使用单引号括起来
char c2 = 'a';
//第二种:以字符对应整数值ASCII表序号
char c1 = 97;
System.out.println(c1);
System.out.println(c1 == c2);
}
}
取值范围
基本类型实现不了的
基本类型为了性能快,他不提供去获取这个值的取值范围
java把基本类型“包装”,java给每个基本类型都有一个对应包装类型,包装后就是对象
他就提供了额外的方法,例如提供获取这个类型的最大值max和最小值min(取值范围)
包装类型(8个)
在java中基本类型全小写,包装类型首字母大写
1)byte Byte
2)short Short
3)int Integer*
4)long Long
5)float Float
6)double Double
7)char character*
8)boolean Boolean
import org.junit.Test;
//八个包装类型对应的取值范围
public class TsetScope {
@Test
public void scope() {
System.out.println("Byte取值范围"
+Byte.MIN_VALUE+"~"+Byte.MAX_VALUE);
System.out.println("Short取值范围"
+Short.MIN_VALUE+"~"+Short.MAX_VALUE);
System.out.println("Integer取值范围"
+Integer.MIN_VALUE+"~"+Integer.MAX_VALUE);
System.out.println();
System.out.println("Float取值范围"
+Float.MIN_VALUE+"~"+Float.MAX_VALUE);
System.out.println("Double取值范围"
+Double.MIN_VALUE+"~"+Double.MAX_VALUE);
System.out.println();
//字符有没有最大值最小值吗?ASCII的0对应null和127对应的DEL键(不可见字符)
System.out.println("Character取值范围"
+Character.MIN_VALUE+"~"+Character.MAX_VALUE);
System.out.println("Boolean取值范围没有,就true和false");
}
Byte取值范围-128~127
Short取值范围-32768~32767
Integer取值范围-2147483648~2147483647
Float取值范围1.4E-45~3.4028235E38
Double取值范围4.9E-324~1.7976931348623157E308
Character取值范围
基本类型或者包装类型的缺点
单一,只能表达一个值
学生成绩:100,99,60
int yw = 100;
int sx = 99;
int english = 60;
需求:共性他要表现一组值,多少个不定,怎么表达呢?
数据结构:数组 array
package com.tedu.datatype;
import java.util.Arrays;
import org.junit.Test;
//数组array,非基本类型都是引用类型
//引用类型本身就是对象
public class TestArray {
@Test
public void scope() {
//数组定义有两种方式
//第一种方式:标准方式,使用new来创建对象实例
int[] arr = new int[4];//声明:创建一个int数组,数组有三个元素
//给数组的元素进行初始化,复制。怎么访问数组某个元素?
//通过下表(索引,需要)来访问数组,从0开始
arr[0] = 100;
arr[1] = 99;
arr[2] = 60;
arr[3] = 88;
//访问数组元素
System.out.println("数组的长度"+arr.length);
System.out.println("第一元素"+arr[0]);
System.out.println("最后一个元素"+arr[3-1]);
System.out.println("最后一个元素"+arr[arr.length-1]);//推介,代码要灵活
//数组的第二种的写法,简写,把创建和初始化的合并一句代码,推荐
String[] str = {"语文","数学","英语","化学"};
System.out.println("数组的长度"+str.length);
System.out.println("数组的第一个元素"+str[0]);
System.out.println("数组的最后一个元素"+str[str.length-1]);
//数组打印所有的内容,数组排序(工具类arrays.toString())
System.out.println(str);//他不会打印数组内容,会打印数组的内存地址
System.out.println(Arrays.toString(str));
//数组排序(默认升序)(Arrarys.sort(arr))
System.out.println("排序前"+Arrays.toString(arr));
Arrays.sort(arr);//特点:先排序,覆盖原有的数组(原有值被改变)
System.out.println(Arrays.toString(arr));
}
}
数组的缺点
数组可以表现一组值,但是它的每个元素的类型都一致,不能存储不同的数据类型。
需求:表现一组成绩
语文100,数学99,英语60,化学88
既有字符串类型又有整数类型
java中就提供了最强大的功能,在java中万物皆对象Object
java是一个面向对象的语言。
单个对象
需求:人 person
对象的属性习惯使用包装类型
对象的属性(字段、成员变量)
1)身份证号码 cardNo(18位) String
2)名字 name String
3)年龄 age Integer
4)性别 sex Boolean true那 false女
5)地址 address String
创建对象的步骤:
1)创建类Person
2)创建成员变量(属性,字段)public String carNO;一般不设置初始值
3)创建对象实例 Person p = new Person();
4)给属性进行初始化 p.cardNo="61561561651";(对象是通过实例名.属性名)
5)打印对象的某个属性值syso(p.cardNo);
public class Dome {
public static void main(String[] args) {
int[] in = new int[4];
in[0] = 1;
in[1] = 2;
in[2] = 3;
in[3] = 4;
System.out.println(Arrays.toString(in));
int[] in1 = {1,2,3,4};
System.out.println(in1.length);
}
package com.tedu.datatype;
import org.junit.Test;
public class TestPerson {
@Test
public void person() {
//调用Person类
//3.创建对象实例,实例名p
Person p = new Person();
//访问属性值,引用类型默认值NULL
//4.属性初始化
p.cardNo = "51381651651651";
p.name = "张三";
p.age = 20;
p.sex = true; //男
p.address = "四川";
System.out.println(p.cardNo);
System.out.println(p.name);
System.out.println(p.age);
System.out.println(p.sex);
System.out.println(p.address);
}
}