2021-05-27 java04 程序

java数据结构

旧的程序:数据结构+算法

新的程序:数据结构+算法+框架+架构,天生构建大型项目核心

数据结构目标,开发者合理利用资源(内存)计算数据

java提供两种的数据结构:

1)基本类型:它本身不属于面对对象概念,占用内存少,运行速度快(C语言面向过程)

2)引用类型(java/python语言面向对象,面向对象和生活很相近,面向对象成为开发的主流方式),相对基本类型占用空间大,相对基本类型而言运行的速度慢。好处:拥有额外的方法(JAVA底层写好了),开发者事半功倍,开发效率高。

八种基本类型:

1)byte     一个字节=8bit,-128~127,默认值0           Byte

2)short    两个字节,取值:-32768~32767,默认值0      Short

3)int         四个字节,取值+-21亿,默认0                     Integer

4)long       八个字节,默认值0                                      Long

5)float       四个字节,默认值0.0                                      Float

6)double    八个字节,默认值0.0              BigDecimal        Double

7)char       2~4字节(ascii,unicode(utf-16,utf-8))               Character

8)boolean       true1/false0    一个字节                                  Boolean

八个基本类型如果和对象一起使用,是不能直接使用的,需要类型转换。

包装类型:把基本类型进行封装(包装),变成对象,有额外方法。

基本类型名字全小写,包装类型名字按大驼峰规则,首字母大写

基本类型和包装类型他们只能表达一个类型的一个值 例:int a = 10;    a = "20"//java是静态语言,在编译语法时检查

不够灵活,生活中有表达一组值的例:学生成绩100,99,66

数组:他可以存储一个类型的多个值,它的内存空间是连续的

数组的两种声明的方式:

1)  int[] arr = new int[3]; //声明一个整型数组,数组3个元素,第一个元素下表0  arr[0],最后一个下标arr[arr.length-1]

2)int[] arr = {100,99,88}; 数组4个元素,arr[0]

String[] s = new String[3];数组三个元素 s[0]值为null  

String[] s = {"语文","数学","英语"};数组三个元素,s[0]语文

数组的缺点,只能一个类型。复杂生活物品抽象就无法使用数组来表达,在java中最强大的,一等公民——对象

万物皆可对象(Object)。

 

Student学生对象

1)创建类Student

2)创建属性(属性、成员变量)

      no 学号     Integer

      name 姓名 String

      sex  性别    Boolean

       birthday 出生日期         java.util.Date 必须使用,java.sql.Date数据库(开发不使用)

      school  毕业学校   String

      salary    薪资       Integer/Float

package com.tedu.day4;

import java.util.Date;//日期类型必须导包,必须导util工具类下
//创建一个学生实体类
public class Student {
		//成员变量,属性,字段
		//4种:public、default不写、protected保护、private私有
		public Integer no;//学号
		public String name;//姓名
		public Boolean sex;//性别
		public Date birthday;//出生年月日
		public String school;//毕业学校
		public Double salary; //薪资
}
package com.tedu.day4;


import java.util.Date;

import org.junit.Test;

public class TsetStudent {
	@Test
	public void student() {
		Student student = new Student();
		student.no = 2050233;
		student.name = "李四";
		student.sex = true;
		student.birthday = new Date();//创建一个当前时间
		student.school = "达内";
		student.salary = 50000D;//50000.0,+d、+D
		System.out.println(student.no);
		System.out.println(student.name);
		System.out.println(student.sex);
		System.out.println(student.birthday);
		System.out.println(student.school);
		System.out.println(student.salary);
	}
}

流程控制

1、顺序结构:从左向右执行,从上向下执行,每条语句都执行,执行一次

2.、分支判断结构:部分代码执行,部分代码不执行

3、循环结构 :反复执行一段代码(执行多次)

分支结构

1)if单分支:if、if-else、多分支else-if

需求:天晴晒被子,

if(boolean表达式){晒被子}

package test;

import org.junit.Test;

//if分支判断语句
public class TestIf {
	//if语法
	@Test
	public void testIf() {
		//需求:天晴晒被子
		boolean running = true;//是否下雨布尔变量,判断的依据(条件)
		//取反代表天晴,他是一个条件,条件为true执行后面袋面,条件false为假则不执行
		//if特殊,如果if语句语句代码题(代码段)如果里面只有一句话,大括号可以省略
		if(!running) {//好习惯,不论代码段中是否只有一句话,都写上大括号
			System.out.println("晒被子");
		}
	}
	
	//if-else语法
		@Test//单独运行这个测试方法,双击方法名,右键运行
		public void testifElse() {
			//天晴晒被子,下雨收衣服(分支互斥,不会同时发生)
			boolean boo = true;
			//如果判断条件true成立if后面的代码段执行
			//如果判断条件false不成立则执行else后面的代码段执行
			if(!boo) {
				System.out.println("天晴晒被子");
			}else {
				System.out.println("下雨收衣服");
			}
		}
	
	//else-if语法,多分支
		@Test
		public void testElseIf() {
			//需求:电话号码,110警察,114查号,119火警,120医院根据不同的电话输出不同的语句
			//分支天生是互斥,所以只要有一次判断成功其他分支就不再判断
			int phone = 130;
			if(phone==110) {
				System.out.println("警察");
			}else if(phone==114) {
				System.out.println("查号");
			}else if(phone==119) {
				System.out.println("火警");
			}else if(phone==120) {
				System.out.println("医院");
			}else{//上面所有的分支都不成立就执行else里面的代码
				System.out.println("非法电话号码");
			}
		}

2)switch 多分支

和else if类似,语法结构不同的。

switch、case、default

package test;

import org.junit.Test;

//switch多分支判断语句
public class TestSwitch {
	@Test
	public void tsetSwitch() {
		//需求:电话号码,110警察,114查号,119火警,120医院根据不同的电话输出不同的语句
		int phone = 130;
		//不良现象,switch语句特性
		//如果有一个分支成立,这个分支后的所有分支就不再判断,判断失效,后面的所有自动输出
		switch(phone) {
		case 110://判断:phone的值是否和case的相等
			System.out.println("警察");
			break;//在每个分支后架次语句,跳出switch语句
		case 114:
			System.out.println("查号");
			break;
		case 119:
			System.out.println("火警");
			break;
		case 120:
			System.out.println("医院");
			break;
		default://eles作用
			System.out.println("电话号码非法");
			break;//可加可不加,因为他已经是最后一个
		}
	}
}
package test;

import java.util.Scanner;//导包,别错误

import org.junit.Test;

//需求:输入一个数字对应的去执行相应的内容
//1,查询余额
//2.取款
//3.存款
//4.退出
//特点:用户去输入,根据用户输入进行判断,执行相应的动作
public class ATM {
	@Test
	public void atm() {
		//用户动态输入Scanner类,他可以支持获取键盘的输入内容
		//他获取到内容,可以字符串,也可以他转换成整数
		//监控键盘输入,需要给一个参数:键盘System.in
		//程序运行到这句话就停止了:等待用户输入值,输入后回车就结束了
		//这个现象叫做阻塞
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入数字:");
			int in = scan.nextInt();//获取键盘输入的数字
			switch(in) {
			case 1:
				System.out.println("查询");
				break;
			case 2:
				System.out.println("取款");
				break;
			case 3:
				System.out.println("存款");
				break;
			case 4:
				System.out.println("退出");
				break;
			default :
				System.out.println("请输入正确命令");
		}
	}
}

一个类中有多个单元测试方法

1)执行所有的单元测试方法:在空白处鼠标右键执行,他会执行所有的方法

注意:测试方法没有顺序,单元测试方法是互相独立,互相之间没有关系,没有顺序要求!

2)只执行某一个单元测试方法:光标停留在某个方法里面(双击方法名)运行

循环结构

package test;

import java.util.Scanner;//导包,别错误

import org.junit.Test;

//需求:输入一个数字对应的去执行相应的内容
//1,查询余额
//2.取款
//3.存款
//4.退出
//特点:用户去输入,根据用户输入进行判断,执行相应的动作
public class ATM {
	@Test
	public void atm() {
		//用户动态输入Scanner类,他可以支持获取键盘的输入内容
		//他获取到内容,可以字符串,也可以他转换成整数
		//监控键盘输入,需要给一个参数:键盘System.in
		//程序运行到这句话就停止了:等待用户输入值,输入后回车就结束了
		//这个现象叫做阻塞
		Scanner scan = new Scanner(System.in);
			while(true) {
				System.out.println("请输入命令数字:");
				int in = scan.nextInt();//获取键盘输入的数字
				switch(in) {
				case 1:
					System.out.println("查询");
					System.out.println();
					break;
				case 2:
					System.out.println("取款");
					System.out.println();
					break;
				case 3:
					System.out.println("存款");
					System.out.println();
					break;
				case 4:
					System.out.println("退出");
					System.out.println();
					int in12 = 10;//基本类型,在方法结束自动释放空间
					scan.close();//对复杂对象需要手动关闭
					return;//方法的结束
				default :
					System.out.println("请输入正确命令");
					System.out.println();
			}
			}
	}
}

两种死循环:

while(true){

teturn;//结束程序

}
for(;;){
trturn;//结束程序
}

退出循环

1)break;跳出循环

2)continue;跳过循环

3)return;退出(退出方法)

package test;

import org.junit.Test;

//退出循环
public class TestExitLoop {
	@Test
	public void exitLoop() {
		int i = 0;
		while(i<6) {
			i++;
			if(i==3) {
				//break;  跳出,i=3时直接结束循环,会接着执行循环后面的代码
				//continue;  跳过  i=3时跳过本次循环(不执行后面的代码)如何进行下一次循环
				return;  //退出:结束方法  直接结束方法不会再执行循环外面的任何代码
			}
			System.out.println(i);
		}
	}
}

小结

1)执行流程

a.顺序执行:从上往下,从左到右(赋值语句,先执行右边,然后赋值给左边)所有代码都执行

b.分支判断:它是程序的灵魂。程序体现用户业务逻辑(618商品促销活动,赠卷VIP用户,不同折扣:)

c.循环执行:也是业务逻辑的体现,反复执行多次,直到退出的条件成立

2)分支执行

a)if语句(单分支)

if

if-else

else-if

b)switch(多分支)

switch - case

switch-case-default

两个特殊点:

a.正常每个case后都应该跟break;语句

b.switch(n)   n的类型:char、byte、short、int 、char、String         long不行(转换由大往小转,大转小可能造成精度丢失)

3)循环

a.while

b.do-while

c.for

while和do-while的差异:while条件不满足直接不执行,do-while条件不满足也会执行一次(先执行再判断)

java的代码要经过编译,你看到的源代码和编译后的代码不一致

for循环声明变量i,只在for循环内部有效,出了for循环这个简单类型变量就被释放了,不能再使用了。

4)死循环

a.while(true)

b.for(;;)/for(;true;);

5)退出循环
a. break 跳出
b. continue 跳过本次循环
c. return 结束方法

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值