day4将循环结构具体的阐述了一遍,for循环,while循环,dowhile循
for(初始化表达式;boolean;循环后表达式){//执行语句}=========执行流程:先执行初始化语句,然后执行判断条件,看其返回值是true还是false,true就执行循环体,false就结束循环,循环体执行到最后,执行循环后表达式,再次执行判断条件,重复第二步========while语句一般看做是for循环的简写格式========dowhile语句无论条件是否成立,循环体都会执行一次
循环总结:dowhile循环至少执行一次循环体,而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句-----如果想在循环结束后继续使用控制条件的那个变量,用while语句比较好,因为while语句我们定义变量的时候在循环体外面定义变量,注意控制条件,避免死循环--while(true)--for(;;) --但是后来我们一般也利用死循环这一个特点来做循环
关键字的作用:
我们这里说的关键字知道是三个,return,break,continue-------------return--可以写在方法体的任意地方,是和方法打交道的,结束整个方法,之后的代买全部都不在执行-----break---用在循环中或者switch语句中,终止并跳出循环或者结束switch语句------continue是终止本次循环,继续下次循环,这次循环中continue之后的代码都不在执行(break和continue可用于父循环,给父循环起别名)
循环嵌套
就是外面一个循环里面嵌套着一个循环
day5
说到了数组,数组的基本操作,数组可能遇到的常见问题,内存图,以及二分查找,冒泡排序
数组
数组的概念:数组是一个容器,可以存储同一种数据类型多个元素的集合,它既可以存放基本数据类型,也可以存放引用数据类型,是java中唯一的底层容器
数组的初始化:就是为数组开辟连续的内存空间,并为每个数组元素赋值,初始化分为静态初始化和动态初始化;静态初始化指定内容,数组的长度由jvm自行判断,而动态初始化是指定数组的长度,数组中的元素有jvm给出默认值
注意事项:数组的长度在创建的时候就固定了,中途无法改变;数组是靠角标定位元素,并且角标值从0开始,数组属于饮用以数据类型,数组中元素必须是同一数据类型,获取某个角标位上:arr[角标值],获取到数组中的某个角标之后,就可以获取值和赋值了,获取数组的长度:arr.length
数组默认值:整数型:byte short int long 默认初始化都是0 浮点型:float double 默认初始化都是0.0 布尔型 boolean 默认初始化是false 字符型:char初始化值是'\u0000' 十六进制的 , 引用数据类型:所有引用数据蕾西初始化值都是null;
内存图
java中内存分配:(数组)
栈:存储局部变量 堆:存储new出来的数组或者对象
多个变量引用同一个数组:在栈中创建多个变量;多个变量执行堆中的同一个数组对象
数组常见问题:
ArrayIndexOutOfBoundsException:数组角标越界异常,访问了不存在的角标 NullPointerException:空指针异常,栈中的数组变量没有指向堆内存中的数组实体
数组的基本操作:循环遍历数组;查找数组中的最大值;反转数组,查找数组中某个值第一次出现的位置(对比数组中每个元素,匹配成功,返回当前的角标,否则返回一个负数)
二分查找:使用折半的形式,一次性剔除一半的无效元素,提高查找的效率(二分查找的前提是数组必须是有序的,所以虽然二分查找效率高,但是仅限于有限数列)
冒泡排序:相邻的两个值比较,然后交换位置,每次循环都会将由原元素中最大的或者最小的移动到有效位的最后,所以经过多次循环,就可派出一个有序的数组,所以我们一般把先用冒泡排序先把数组排序然后在二分查找
2020-1-19
今天回顾数组知识的时候,看到了动态静态初始化数组的时候,提到了jvm,静态的时候给定数组的具体值,长度由jvm来判断,动态的时候长度给定,值由jvm赋默认值,那这里的jvm是什么,有什么作用?
概念:jvm是java虚拟机,是一个位于java和操作系统之间的,有自己的完善结构,如处理器,堆栈,寄存器等
作用:java程序的跨平台性主要就是因为JVM实现的.在编译java程序时会将写好的程序通过编译器生成.class文件(又称为字节码文件)然后通过JVM内部的解释器将字节码文件解释称为具体平台上的机器指令执行,所以就可以实现java程序的跨平台特性
JVM内部体系结构大致分为三部分:类装载器(ClassLoader)子系统,运行时数据区和执行引擎
java程序运行与JVM的关系:
java源文件编译生成.class文件(字节码)
字节码由JVM解释运行
因为java程序既要编译同时也要经过JVM的解释运行,所以java被称为半解释语言
day6(函数;方法的分类和调用;方法的重载;方法间相互调用的内存图;可变参数)
1函数(方法):java中运行代码除极个别外,必须写在方法内,方法就是代码的载体;方法的出现提现了代码的复用性
2.格式详解:
修饰符:设定方法的作用范围-----静态/非静态:static关键字表示静态----返回值类型:就是代码运行的结果的数据类型---方法名:这个方法的名称,调用的时候我们使用的就是方法名---参数:实参:就是实际参加运算的值,基本数据类型就是值,引用数据类型就是地址值--形参:定义在方法上,用来表示接受的数据的类型---参数名就是变量名---方法体语句,就是我们实际运行的代码---return关键字,表示结束方法,同时可以返回的一个值---return就是功能运行的结果,由return带给调用者
3.方法的分类和调用
有参方法--无参方法--有返回值--无返回值
调用方式:单独调用,方法独立于其他代码,独立执行功能-多用检测维护型的方法
输出调用,只做结果输出,这种调用对我们来说没有任何意义
赋值调用,有返回值结果.可以进一步操作返回值
4.方法的重载
1.一个类里面出现多个方法名相同,参数列表不同的多个方法,我们把这种现象叫做重载
2.方法重载是为了提高方法名的使用率,毕竟意思相同的单词就那么几个,而我们的方法功能也相似,这种情况下如果使用不同的方法名,很可能造成意义混乱,所以就出现了方法的重载
3.在我们的程序中绝不允许出现两个一模一样的方法,如果我们能想办法让jvm区别每个方法,那么这个方法就可以使用
参数列表:参数个数不同;参数类型不同,参数顺序不同(也算是重载,但是一般开发中不用,没有意义)
方法间相互调用的内存图
栈的定义:运行方法和存储局部变量,栈是一个类似于羽毛球筒,是一个一端开口的筒子;执行流程:当jvm执行某个方法时,会将这个方法压入栈中执行,当这个方法又调用了其他方式时,jvm会将新的方法也放入栈中已有的方法上面执行,当方法执行完毕之后,方法就会被jvm从栈中移除,我们称之为弹栈