2021.5.26 java-day3 数据结构

单元测试

岗位:开发,测试(保证写的代码的正确)

开发者自己做完业务代码,需要自测(自己测试自己写的代码)

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);
	}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值