【202106小白训练营】day03-java数据结构

变量,java程序把数据保存到变量中,就可以调用变量从而获得它数据,进行计算。
java提供哪些具体的变量类型支持:
1)变量类型? int a = 10;
2)提供两种变量类型分类:a. 值,b.引用
值类型:8种基本类型
引用类型:非基本类型就是引用类型(String s = “abc”; 字符串,数组,对象Object )。

8种基本类型

小的分类:3个分类,整数类型、小数类型(浮点数)、其他(字符、布尔)
1)byte 字节,8bit 比特,1字节,Byte
2)short 短整型,2字节,Short
3)int 整型,4字节,Integer*
4)long 长整型,8字节,Long

5)float 单精度浮点数,4字节,Float
6)double 双精度浮点数,8字节,Double

7)char 字符型,2字节,Character*
2~4个字节 ASCII,ISO-8859-1,GBK,UTF-8,UTF-16,UTF-32
8)boolean 布尔型,true 1/false 0,1字节,Boolean

现在要存100和200,使用什么整数类型?

规定:使用变量时,尽量使用合适的数据类型来存储,尽量所占用空间小,性能高
在这里插入图片描述

package cn.tedu.datatype;

import org.junit.Test;

//数据类型
public class DataType {
	//实现存储整数100
	@Test
	public void save100() {
		byte b = 100;
		System.out.println(b);
		
		short s = 100;
		System.out.println(s);
	}
	
	//实现存储整数200
	@Test
	public void save200() {
		/*
		 * Type mismatch: cannot convert from int to byte
		 * 类型不匹配,不能由int整型转换为byte字节类型
		 * java默认声明一个整数,这个整数默认int类型
		 * 可以强硬转换,但是精度损失风险
		 * (byte)强制类型转换
		 */
		byte b = (byte)200;	//它有一个支持数值范围
		System.out.println(b);
		
		short s = 200;		//自动类型转换
		System.out.println(s);
	}
}



借助包装类型获取数据类型的取值范围

package cn.tedu.datatype;

import org.junit.Test;

/*
 * 打印出所有基本数据类型取值范围
 * 基本类型自身是不支持获取类型的范围
 * java推出包装类型,借助包装类型来获取它取值范围
 * 每个基本类型对应一个包装类型
 */
public class ValueScope {
	@Test
	public void scope() {
		//-128~127,1byte=8bit=2^8=256 一半存负数,一半存正数
		System.out.println("Byte字节取值范围:"
				+ Byte.MIN_VALUE + "~" + Byte.MAX_VALUE);
		
		//-32768~32767,2byte=2^16=65536
		System.out.println("Short短整型取值范围:"
				+ Short.MIN_VALUE + "~" + Short.MAX_VALUE);
		
		//正负21亿
		System.out.println("Integer整型取值范围:"
				+ Integer.MIN_VALUE + "~" + Integer.MAX_VALUE);
		
		System.out.println("Long长整型取值范围:"
				+ Long.MIN_VALUE + "~" + Long.MAX_VALUE);
		
		//1.4E-45 科学计数法,E后面代表有多少个零
		System.out.println("Float单精度浮点数取值范围:"
				+ Float.MIN_VALUE + "~" + Float.MAX_VALUE);
		
		System.out.println("Double双精度浮点数取值范围:"
				+Double.MIN_VALUE + "~" + Double.MAX_VALUE);
	}
}




ASCII字符集,char和String的区别

package cn.tedu.datatype;

import org.junit.Test;

/*
 * 打印出所有基本数据类型取值范围
 * 基本类型自身是不支持获取类型的范围
 * java推出包装类型,借助包装类型来获取它取值范围
 * 每个基本类型对应一个包装类型
 */
public class ValueScope {
	@Test
	public void scope() {
		// -128~127,1byte=8bit=2^8=256 一半存负数,一半存正数
		System.out.println("Byte字节取值范围:" + Byte.MIN_VALUE + "~" + Byte.MAX_VALUE);

		// -32768~32767,2byte=2^16=65536
		System.out.println("Short短整型取值范围:" + Short.MIN_VALUE + "~" + Short.MAX_VALUE);

		// 正负21亿
		System.out.println("Integer整型取值范围:" + Integer.MIN_VALUE + "~" + Integer.MAX_VALUE);

		System.out.println("Long长整型取值范围:" + Long.MIN_VALUE + "~" + Long.MAX_VALUE);

		// 1.4E-45 科学计数法,E后面代表有多少个零
		System.out.println("Float单精度浮点数取值范围:" + Float.MIN_VALUE + "~" + Float.MAX_VALUE);

		System.out.println("Double双精度浮点数取值范围:" + Double.MIN_VALUE + "~" + Double.MAX_VALUE);

		// 布尔值是没有取值范围,就两个值
		System.out.println(Boolean.TRUE);
		System.out.println(Boolean.FALSE);
	}
	
	//字符char/Character和字符串String的区别?
	@Test
	public void Char2String() {
		// 'a'和"a",单撇Java中是给字符使用,双撇Java中是给字符串使用
		//Type mismatch: cannot convert from String to char
		//char c = "a";
		
		//char c = 'a';		//字符和整数可以互换
		char c = 50;		//97=a,48=0,ASCII(定义、为什么需要它)
		//美国标准信息交换码,人类和电脑进行信息交换
		//键盘上输入字母或者数字,电脑接收后先把每个字母转换整数
		//整数可以转换2进制,由2进制,转换整数,转换对应字母,然后显示屏展示
		//意义,编程语言和计算机进行数据交换,沟通
		System.out.println(c);  //a
		
		//ISO-8859-1 它完全包含ASCII,增加西欧字符支持
		//GB2312,GBK,支持汉字
		//UTF8,16,32,32=4byte囊括了全球所有的字符,u16不同的长度a占2个字节,生僻字4个字节,u8 1~4字节
		//上面的叫编码规则,还有一个统称unicode
		
		//和字符串有什么区别?
		char c1 = 'a';		//字符,字符类型只能存放一个
		char c2 = 'b';
		char c3 = 'c';
		String s = "abc";		//字符串,一个一个字符,写多个字符
		System.out.println(""+c1+c2+c3);
		System.out.println(s);
		
		//[]括号括起来内容数组
		char[] d = {'a','b','c'};  //一组值,String字符串的本质
		System.out.println(d);
		
		//打印字符范围:ASCII第一值和最后一个值,不可见字符
		System.out.println("=="+Character.MIN_VALUE+"==");
		System.out.println("=="+Character.MAX_VALUE+"==");
	}
	
}

java面向对象开发语言,提倡面向对象,但是它有一个部分也是唯一一个部分不属于面向对象概念。
8个基本类型。因为面向对象结构比较复杂,但是它带来很多好处,而这些好处会造成占用一定内存空间,性能比起基本类型变量性能稍低。
int a = 10;
int[] arr = {1,2,3,4,5};
byte b1 = 100; 占用空间小,执行性能高
Byte b2 = 100; 占用空间大,执行性能低,好处,额外方法

基本类型保存是值,而数组类型它属于对象保存是引用
int i = 10; 打印i看是什么值?
int[] arr = {1,2,3,4,5}; 打印arr看是什么?

数组声明、访问、打印、排序

package cn.tedu.datatype;

import java.util.Arrays;

import org.junit.Test;

//展示值和引用区别,通过基本类型和数组(引用类型)案例
public class Array {
	@Test
	public void arr() {
		// 值类型,基本类型打印展示具体值
		int i = 10;
		System.out.println("值类型:" + i);

		// 引用类型,[I@780cb77 打印数组所在内存地址起始位置
		int[] arr = { 10 }; // 数组只有一个元素
		System.out.println("引用类型:" + arr);

		// [Ljava.lang.String;@691a7f8f 打印字符串内存空间首地址
		String[] s = { "1", "2" };
		System.out.println(s);
	}

	@Test // 数组声明(定义)、访问、打印、排序
	public void arr2() {
		// 定义,int代表数组元素的类型,数组是一组值,特点:每个元素类型一致
		// 新建对象,只要是new关键字创建对象,它就是引用类型
		int[] a1 = new int[3]; // 数组的个数,数组长度
		// 基本类型的默认值整数0,小数0.0,字符NUL,布尔false
		// int[] a2 = {1,2,3}; //两个动作,定义,初始化

		// 设置数组元素值,第一次初始化
		a1[0] = 1;
		a1[1] = 22;
		a1[2] = 3;
		
		//java.lang.ArrayIndexOutOfBoundsException: 
		//Index 3 out of bounds for length 3 数组越界
		//a1[3] = 10; //逻辑错误,隐性错误,运行时

		// 访问,java的下标是从0开始
		System.out.println("数组的第一个元素:" + a1[0]);
		System.out.println("数组的最后一个元素:" + a1[2]);

		// 打印,打印数组的每个元素
		System.out.println(a1);
		// 第一方法:挨个打印每个元素
		System.out.print(a1[0]);
		System.out.print(a1[1]);
		System.out.print(a1[2]);

		System.out.println();

		// 第二方法:引入工具类api,Arrays提供很多方法toString()
		// 非java.lang.*下,需要导包 java.util.Arrays工具类
		System.out.println(Arrays.toString(a1));

		// 数组保留之前的值,排序是新的数组
		int[] b = a1; // 记录旧的数组
		// 把a1数组的长度创建新的数组,然后把对应元素值存入
		System.out.println("旧的数组:" + Arrays.toString(b));

		// 排序,自身没有提供方法,工具类Arrays提供sort,升序
		Arrays.sort(a1); // 排序后数组的内容会被改变
		System.out.println("新的数组:" + Arrays.toString(a1));

	}
}

为什么需要对象Object?

1)基本类型,值类型,简单变量,局限性它只能表达一个类型的一个值。
2)数组类型,引用类型,复杂一点点,数组多个(0~n), 局限它只能表达一个类型多个值。
突破上面限制,多个类型,多个值,java提供万能解决方案:对象

习惯:对象属性(字段),它数据类型都使用包装类型
人:Person
1)name 姓名,字符串类型, String
2)sex 性别,布尔型,Boolean
3)age 年龄,整数型,Integer
4)address 地址,字符串类型,String
5)scores 高考成绩,小数数组,Float[]

Person.java

package cn.tedu.pojo;

//定义:一个Person对象
public class Person {
	//写在方法体内的变量叫局部变量,写在类中的变量叫成员变量
	String name; //姓名
	Boolean sex; //性别,true 1男 false 0女
	Integer age; //年龄
	String address; //地址
	Float[] scores;	//高考成绩
}

TestPerson.java

package cn.tedu.pojo;

import java.util.Arrays;

import org.junit.Test;

//测试
public class TestPerson {
	@Test
	public void person() {
		//1. 创建对象(类必须先创建实例instance才能使用)
		//类名大驼峰,对象(实例)名小驼峰
		Person person = new Person();
		
		//2. 设置属性值,怎么获取对象属性值?.操作符
		person.name = "邦德";  	//对象属性的赋值
		person.sex = true;		//男
		person.age = 70;
		person.address = "英国伦敦";
		
		//声明一个小数,java默认double来处理,增加后缀 f/F Float
		//Float[] scores = {120.0F, 110.0F, 100.0F };
		person.scores = new Float[]{120.0F, 110.0F, 100.0F };
		
		//3. 打印对象属性值
		System.out.println("姓名:" + person.name);
		System.out.println("性别:" + person.sex);
		System.out.println("年龄:" + person.age);
		System.out.println("地址:" + person.address);
		System.out.println("成绩:" + Arrays.toString(person.scores));
		
		//4. 打印对象
		System.out.println(person);
	}
}

Student.java

package cn.tedu.pojo;

//学生类(张三,李四)类只是一个,对象可以n个
public class Student {
	String name;	//姓名
	Integer age;	//年龄
	String school;	//学校
	
	//覆盖父类Object.toString()
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + ", school=" + school + "]";
	}
	
}

TestStudent.java

package cn.tedu.pojo;

import org.junit.Test;

//学员测试,创建张三和李四
public class TestStudent {
	@Test
	public void student() {
		// 创建张三,设置属性,打印
		Student s1 = new Student();
		s1.name = "张三";
		s1.age = 30;
		s1.school = "北京";
		System.out.println(s1);

		// 创建李四,设置属性,打印
		Student s2 = new Student();
		s2.name = "李四";
		s2.age = 40;
		s2.school = "西安";
		System.out.println(s2);
	}
}

小结

1)数据结构
早期编程注重使用变量类型要占内存尽量小,执行快。
现在网络,硬件(内存,磁盘,CPU)现今程序不是太关注类型,注重程序安全,稳定,架构
2)合理去存储它数据
整数100,使用byte类型,如果整数200,使用short
3)java支持数据结构常见类型
a. 8个基本类型,另类,不属于对象。在方法体内声明局部变量,参数 a,b,x,y,习惯,值类型
b. 数组,引用类型,int[] arr = {1,2,3,4} 存储多个同类型值
c. 对象,第一公民,对象占空间大 Byte.MIN_VALUE,构建对象慢,调用慢,好处额外方法,开发效率高。把生活中内容可以抽象对象,更好写代码和理解。
4)8个基本类型,4整数,2小数,2其它(基本类型声明全小写)
a. byte 字节,8bit 1字节,范围:-128~127,256=2^8
byte i = 10; 自动类型转换,int转byte
byte i = (byte) a; 类型强制转换,风险,精度损失
b. short 短整型,2字节,范围:-32768~32767,65536,=2^16
c. int 整型,4字节,范围:±21亿,默认写一个数字是整数int
d. long 长整型,8字节 l/L
e. float 单精度浮点数,4字节 f/F
f. double 双精度浮点数,8字节,默认写一个小数是double d/D
g. char 2字节,unicode 字符集 1~4字节 编码:ASCII,ISO-8859-1,GB2312,GBK,UTF-8,UTF-16,UTF-32
h. boolean 1字节,非零true,零false
5)包装类型和基本类型什么关系?
包装类型是Java给对应基本类型提供很多额外方法,它可以把基本类型转换对象
基本类型是值,包装类型是引用类型。
Byte、Short、Integer、Long、Float、Double、Character、Boolean
6)基本类型、包装类型、引用类型
包装类型把基本类型封装,变成对象;
基本类型不是引用类型,包装类型是引用类型。
7)数组,它是一组值
8)对象

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值