首页 > 代码库 > java自学之路-day06
java自学之路-day06
JAVA06
引用数据类型
- 数组
- 类
- 接口
- 也是一种引用类型
- 用于定义属性和功能对现实中的事物的描述 例如 学生类的定义
- 格式
自定义数据类型
public calss 类名{
属性和方法
属性定义
修饰符 数据类型 变量名=值
方法定义
修饰符 返回类型 方法名(参数列表){
}
}
- 创建引用类型变量的格式
数据类型 变量名 =new 数据类型();
实现引用类型的步骤
a) 导入包 在同一文件夹不需要导包
b) 创建引用类型的变量
c) 变量.类型中的变量
d) 变量.属性=
e) 变量.功能
内存图
l 一个引用类型变量
- 方法栈 堆 方法区
- 测试类先进入方法区 执行main方法
- 自定义类进入方法区 执行创建属性
- main方法进入方法栈 创建自定义类对象
- JVM在堆内存中 开辟一个空间 存储自定义对象
- 自定义中的属性跟随容器进入堆内存 并被赋予默认值 null或者0.0…
- JVM把内存地址传递到引用变量
- 然后mian方法根据内存地址进行变量赋值替换默认值
- 然后打印,之后main方法结束,退栈
- 整个过程结束
l 两个引用类型变量
- 方法栈 堆 方法区
- 测试类先进入方法区 执行main方法
- 自定义类进入方法区 执行创建属性
- main方法进入方法栈 创建自定义类对象
- JVM在堆内存中 开辟一个内存空间 存储自定义对象
- 自定义中的属性跟随容器进入堆内存 并被赋予默认值 null或者0.0…
- JVM把内存地址传递到引用变量
- JVM在堆内存中 再次开辟一个内存空间 存储自定义对象
- 自定义中的属性跟随容器进入堆内存 并被赋予默认值 null或者0.0…
- JVM把内存地址传递到引用变量
- 然后mian方法根据两个不同内存地址进行变量赋值替换默认值
- 然后打印,之后main方法结束,退栈
- 整个过程结束
练习
汽车 brand(品牌) color outputvolume(排量)
学生 name num sex
ArrayList集合类
- 一个容器
- 引用数据类型
- 使用步骤
a) 导入包
b) 创建引用类型变量
数据类型< 集合存储的数据类型> 变量名=new 数据类型<集合存储的数据类型>();
ArrayList<数据类型> array=new ArrayList<数据类型>
变量名.方法
集合存储的数据类型
- 不存储基本类型
- 只存储引用类型
- 可以存储基本类型对应的引用类型
集合方法
- .add(数据类型); 添加集合元素
- .get( int index); 根据索引(从0开始)取出集合中的元素
- .size(); 返回集合的长度
遍历ArrayList
For循环遍历输出.get();
补充方法
- set(int 索引,修改后的元素); 修改元素
- add(int 索引,添加的元素); 添加元素
- remove(int 索引); 删除元素
- clear();清空集合所有的元素
- 凡是具体实物用一个class封装类来表示
- 集合来存储商品对象
- 遍历集合来显示商品个属性
- 集合的set方法来实现修改信息
- 可以内存地址重复指向一个相同的变量名,但不能同时,两次新建对象堆内存一共开辟两部分内存空间给两个自定义类引用类型变量,生成的两个不同的内存地址添加到集合中,所以信息会不同
练习 随机抽奖器
练习 库存管理器集合版
奇数求和练习
计算1-100之间的所有的奇数和
- 先把根据题目数据定义好变量
a) 定义一个变量用于保存求和
Int sum=0;
- 利用循环让变量从0变化到100
for(i=0;i<=100;I++){
}
- 判断变量是否为奇数
for(i=0;i<=100;I++){
if(i %2==1){
sum+=I;
}
}
- 如果是奇数就和预先定义好的变量相加求和
Sop(sum);
- 扩展
for(i=1;i<=100;i+=2){
sum+=i;
}
计算水仙花数
求三位数 100-999中的水仙花数
- 个位数的立方+十位数的立方+百位数的立方=自己本身
- 步骤
a) 定义变量存储三个数位上的整数
b) 利用循环,变量从100变道999
c) 利用求模 除法 求出循环得到的三位数的每一数位
d) 对三个数位进行立方求和
e) 判断和是否和这个三位数相等
f) 如果相等就是水仙花数
ASCII编码
- 计算机运行的都是二进制
- 为了计算机直接识别人类的文字
- 美国人提出:人类的文字和一个整数进行一一对应
- 人为规定 字母a对应97大写A对应十进制65 机器把97转成2进制能够识别
- aA zZ 0-9 !@#$%^*一一进行对应形成一个表
- 此表就叫做ASCII表
- 中国也想计算机识别汉字
- 十进制数对应一个汉字
- 之后有了第一个中文编码表 GB2312
- 太少了就升级为 GBK
- 各国都有了各国的编码表
- 因此 ISO 统一了编码表 Unicode 万国码表 存储了全球所有的语言
- 所有编码表都兼容ASCII
- 字符java 数据类型 char
- 整数java 数据类型 int
- char类型和int类型相加,int4字节 char 2个字节 char自动提升为int,在编码表中查找得到一个整数,和int相加
char类型的存储
int I =’a’+1
结果为98 a为97
Char h=(char)90;
- 4. 字符和整数运算会查询ASCII编码表
- 5. char存储汉字是会查询Unicode表 一个汉字两个字节
- 6. char类型取值范围 0-65535
a) short -32768 32767 char 0- 65535
b) short 类型二进制最高位 符号位 1负数 0正数 后面的是数值位
c) char 类型二进制 全是数值 没有符号位 0和1都表示正数
d)
e) char不能储存负数 无符号数据类型
练习 输出所有英文字母包括大小写
99乘法表
特殊格式遍历数组
数组的逆序原理
- 数组中的元素进行位置上的交换
- 不等于反省遍历
- 数组最远端位置交换
- 指针思想 数组的索引
- 指针可以随时指向任意一个索引
- 需要两个指针 一个指向小 一个指向大
- 然后小++ 大—分别移动变换指向来进行换位
- 数组换位用第三方的变量 临时储存
排序
l 选择排序
数组中的每个元素进行比较
嵌套循环
- 找规律 一共比较了三轮 每轮比较的次数在减少for(int i=0;i<arr.length-1;i++){
- 因此用嵌套for循环 外层循环来确定轮数 即数组长度减一 内存循环用来确定每轮次数 即从轮数加1到数组长度次 for(int j=i+1;j<arr.length;j++)因为需要从0元素开始比较j和i,0和0不用比较而且每次递减 所以需要从i+1
l 冒泡排序
数组中的相邻元素进行比较
0 1 1 2 2 3
0 1 1 2
0 1
a) 找规律
b) 一共 数组长度减一 轮 for(int i=0;i<name.length-1;i++) 0 1 2正好三轮
c) 每轮 数组长度减轮数 次 for(int j=0;j<arr.length-i-1;j++)(1. 3=4-0-1 2. 2=4-1-1 3.1=4-2-1)j=0:因为需要从0元素开始比较j和j+1 j<arr.length-i-1 :需要比较次数每次递减 且元素从0元素开始第一次相当于没减所以还得减一
d) 比较 j和j+1比较
折半查找(二分查找)
原理
- 折半公式
(max+min)/2
- 指针思想 指向索引
max指针
min指针
mid指针
- 循环折半
- 小指针索引 小于 大指针索引为 循环条件
- 比较元素大于中间索引 min=mid+1
- 比较元素小于中间索引 max=mid-1
- 比较元素等于中间索引 返回mid
- 首先需要理解指针思想 需要三个指针 一个指向最小的索引 一个指向最大的索引 一个指向中间的索引
- 然后进行拿着要查找的元素和中间的索引所对着的元素进行比较
- 如果等于就返回这个索引 mid 说明找到了这个数
- 如果 该元素的大于中间索引指向的元素 就把 最小索引指向 中间索引指向的数的右边的数,也就是 最小索引 等于 中间索引加1,最大索引不变
- 如果 该元素的小于中间索引指向的元素 就把 最大索引指向 中间索引指向的数的左边的数,也就是 最大索引 等于 中间索引减1,最小索引不变
- 判断之后形成的新的比较排列
- 然后在进行2,3和4的比较
- 直到 最小索引和最大索引相同 也就是同时指向了一个数 也就是只剩下了一种可能 min max 以及 mid都是一个数 如果此时不等于这个数,就说明找不到了
- 但计算机会继续进行比较
- 继续进行 2,3 和 4的比较
- 如果这个数大于这个数 min就会+1 max不变
- 如果这个数大于这个数 max就会-1 min不变
- 此时无论哪种情况都会使得min>max 就不用比较了,说明找不到这个数
总结
java自学之路-day06