JAVA学习day3

1.1流程控制
昨天的流程控制直接搬过来
流程控制中有三种结构
顺序结构
分支结构
循环结构
顺序结构就是程序从上到下一行一行的执行,中间没有任何判断和跳转
如果main方法多行代码之间没有任何流程控制
,则程序总是从上向下依次执行,排在前面的代码先执行,排在后面的代码后执行
分支结构
单/双分支结构:if-else语句
if(操作数,必须是布尔类型)开始分支,else后一般不跟条件,else if后必须有跟条件

多分支结构:switch语句
switch(操作数可以是byte、short、int、char) 开始一个选择分支
switch不支持long、doubule
swtich case多路分支
swtich case 不能用于区间判断,只能用于等值判断,例case1:a>20这种写法是错误的,正确的写法是case1:a==20


switch case语句.png

完整switch结构,switch case结构的每个case都需要break来跳出该分支

循环结构
循环四要素:循环变量初始化、循环条件、循环变量迭代、循环体
while语句

while循环.png

其实可以看出来跟C语言的语法基本一致

do while语句
!do while语句.png](https://upload-images.jianshu.io/upload_images/22756325-f2a69f5bb3c547ee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

do while 和while 的区别
do while是先执行一次再判断条件,而while是先判断条件再执行,因此while语句有可能一次也不执行,但do while 语句必然会执行一次,换句话说do while会返回两个结果。


do while与while.png

for循环
for循环语法
for(;;;){
}
例如
int sum = 0;
for(int i = 1;i<=100;i++){
sum+=i
}
其中第一个和第三个条件可以写在for循环结构外,但;不可少(;i<=100;;)

for.png

1.2 函数
函数是一系列指令的集合,通过函数封装指令,可以达到代码的复用。函数式组织代码的最小单位元,而类(class)是程序的最小单位元

1.3什么是静态函数, 函数的组成部分, 函数调用时需要注意什么,主函数和普通函数的区别是什么

静态函数:函数调用的结果不会访问或者修改任何对象(非static)数据成员。
函数组成部分:访问权限修饰符(非必须)、静态修饰符(非必须)、返回值类型(必须)、函数名(必须)、参数列表(非必须,但必须添加())、函数体(非必须)、返回值(非必须)


函数组成部分.jpg

函数调用注意点:
如果形参是基本数据类型,那么这个形式参数的数据是存放在java的栈中,相应改变形式参数的值,只是改变形式参数自己相对应的值,并没有改变实参在java栈中的值当形式参数为基本类型时,会在java栈中创建相对应的形式参数,并将实参的值赋值给形式,并不是直接指向形式参数, 那么形参的改变不影响实参的值(就是说所有的值都是存放不在堆中)

1.区别在于调用,java函数都是为调用而生,main函数也不例外,而它与普通函数的区别在于调用者,main是一个jvm所识别的固定名字,所以类中的main函数是由jvm所调用的,程序的固定入口。
而普通函数的调用可以通过类调用或对象调用,调用者为其他类或对象。
2.main函数与普通函数另一个区别为写法:
普通函数的写法根据业务与java规范而定,但是main函数的写法是为了被jvm调用,所以写法固定(除了参数名字,但是参数类型是固定的字符串数组)
————————————————
原文链接:https://blog.csdn.net/weixin_39668496/article/details/114704827

主函数可以用private修饰吗?为什么?
不能。因为main方法是一个静态方法,方法内的变量是局部变量局部变量只在定义它的内部有效,并且不能使用 private ,protected,public 修饰符进行修饰,用了也没有用,因为局部变量只在定义它的内部有效,当局部变量所在的方法调用结束后,java 虚拟机将自动释放局部变量所占用的资源。

1.访问权限修饰符 (非必须)
public(公开,可以在任何外部调用)、private(私有的,只能在本类的内部调用)、默认(default,只能在同包内调用)不写修饰符就是如此
2.静态修饰符(非必须)
static 函数必须加static修饰,没有static则不是函数而是方法
3.返回值类型(必须写)
写void即没有返回值
写一种具体类型的话,代表函数有返回值且约定了返回值类型,如果这个方法有返回值,那么定义方法时必须指定返回数据的数据类型。并且,在方法执行的最后一句必须是return语句。
例如:返回值类型是double,前面函数调用的类型也必须是double,不然就得强制转换(会造成数据丢失)
4.函数名(必须写)
调用方通过函数名调用
5.参数列表(非必须,但须添加括号(),参数数量没有限制,参数之间用,隔开,调用方调用函数时,必须根据参数列表给出所有参数的值,参数个数和数据类型必须一一对应;)形式参数:函数定义时的参数 实际参数:实际传递的值

1.4
参数、返回值、类加载、方法区的概念
有些数据是可以方法内部生成的,但是有些数据是方法内部无法生成的,那方法就必须接收外部传入的数据.接收传入数据的地方叫做方法参数.

我们使用关键字return,比如我们这个方法叫做add,我们这个方法是一个做加法的方法,我们调用方法时,传入两个实参,这样会进行加法计算,那我们计算完了怎么返回呢,这就是方法的返回值,把结果传递出来,到调用方法的地方,其中有一个重点,return 后面所跟的数据类型时什么类型,我们返回值类型就写什么。

虚拟机将编译后的class文件加载到内存中,进行校验、转换、解析和初始化,到最终的使用。这就是java类加载机制。

1.方法区(Method Area)与Java堆一样,是各个线程共享的内存区域。
2.方法区在JVM启动的时候被创建,并且它的实际的物理内存空间中和Java堆区一样都可以是不连续的。
3.方法区的大小,跟堆空间一样,可以选择固定大小或者可扩展。
4.方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类(加载大量第三方jar包、timcat部署的工程过多、大量动态生成反射类),导致方法区溢出,虚拟机同样会抛出内存溢出错误。
5.关闭JVM就会释放这个区域的内存。

1.5 栈、栈帧的概念
栈是Java中最常用的容器之一,只有一个口(入口和出口共用一个),里面的元素进出规则是先进后出。
栈帧是栈的组成单元,栈里面的元素都是以栈帧的形式存储。栈帧由局部变量表,操作数栈,动态连接,方法返回地址,一些附加信息组成。

1.6
break、continue、return的作用和区别
break是跳出循环
continue是结束本轮循环, 进入下一轮循环
return是函数返回

1.7画出jvm内存结构图


内存结构图.png

1.8递归概念
程序调用自身的编程技巧称为递归(recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。

1.9debug的概念
(1)Debug是一个程式,一个侦错的工具。解决问题,调整程序,消除程序中的错误。
(2)为程序员使用的执行流程,它可以被用来跟踪程序的运行进程,以便对程序进行调试。
(3)可以在内存中任意位置检查字节,并在任意位置修改字节

2.0函数总结
class 定义类
public 公共的
private 私有的
if 开始一个选择分支, if后面跟小括号,小括号里面的操作数是判断条件, 可以是直接量,变量,表达式, 但必须是boolean类型
else else后面不跟条件, 但是else if后面必须跟条件
switch 开始一个选择分支, switch后面跟小括号
小括号里面的操作数只能是byte, short, int, char类型
Java5后支持枚举类型
Java7后支持String类型, 但通过观察字节码可以发现, 本质上还是int类型
注意, switch不支持long类型, 也不支持浮点型和boolean类型
case 是switch中的一个分支, 后面跟直接量, 直接量与switch()中的操作数的数据类型必须相同
default 在switch中所有case都不满足时执行default分支, 它相当于是多重if分支中的最后的else, 是所有情况都不满足时, 默认执行的分支
break 1. 用于跳出switch...case
2. 用户跳出循环
如果有循环嵌套循环, 那么break跳出的是最近的那个循环
while 开始一个循环, while后面跟小括号,小括号里面的操作数是判断条件, 可以是直接量,变量,表达式, 但必须是boolean类型
do do必须和while组合使用, do在前面, while在后面, 先执行一次do, 再通过判断while条件是否成立, 来决定是否循环
for 开始一个循环, for后面跟小括号, 小括号里面有3组表达式, 分别是循环变量初始化, 循环条件, 循环变量的迭代
continue 本轮循环结束, 进入下一轮循环
void 函数没有返回值
return 函数返回,
后面可以什么都不跟, 也可以跟一个操作数, 具体要看函数是否定义了返回值类型
static 静态的

2.1常用math函数总结
常用的Java Math函数

1.Math.sqrt() : 计算平方根
例子:System.out.println(Math.sqrt(25)); // 5.0

2.Math.cbrt() : 计算立方根
例子:System.out.println(Math.cbrt(27)); // 3.0

3.Math.pow(a, b) : 计算a的b次方
例子:System.out.println(Math.pow(3, 2)); // 9.0

4.Math.max( , ) :计算最大值
例子:System.out.println(Math.max(2.3, 4.5));// 4.5

5.Math.min( , ) : 计算最小值
例子:System.out.println(Math.min(2.3, 4.5));// 2.3

6.Math.abs() : 取绝对值
例子:System.out.println(Math.abs(-10.4)); // 10.4
System.out.println(Math.abs(10.1)); // 10.1

7.Math.ceil(): 逢余进一
例子:System.out.println(Math.ceil(-10.1)); // -10.0
System.out.println(Math.ceil(10.7)); // 11.0
System.out.println(Math.ceil(-0.7)); // -0.0
System.out.println(Math.ceil(0.0)); // 0.0
System.out.println(Math.ceil(-0.0)); // -0.0
System.out.println(Math.ceil(-1.7)); // -1.0

8.Math.floor() : 逢余舍一
例子:System.out.println(Math.floor(-10.1)); // -11.0
System.out.println(Math.floor(10.7)); // 10.0
System.out.println(Math.floor(-0.7)); // -1.0
System.out.println(Math.floor(0.0)); // 0.0
System.out.println(Math.floor(-0.0)); // -0.0

9.Math.rint(): 四舍五入,返回double值。注意.5的时候会取偶数
例子: System.out.println(Math.rint(10.1)); // 10.0
System.out.println(Math.rint(10.7)); // 11.0
System.out.println(Math.rint(11.5)); // 12.0
System.out.println(Math.rint(10.5)); // 10.0
System.out.println(Math.rint(10.51)); // 11.0
System.out.println(Math.rint(-10.5)); // -10.0
System.out.println(Math.rint(-11.5)); // -12.0
System.out.println(Math.rint(-10.51)); // -11.0
System.out.println(Math.rint(-10.6)); // -11.0
System.out.println(Math.rint(-10.2)); // -10.0.

2.2数组预习
数组的定义
数组是相同类型数据的有序集合。
数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。

数组的声明与创建
首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
``··dataType[] arrayRefVar;//首选的方法

dataType arrayRefVar[];//效果相同,但不是首选方法
1
2
3
Java语言使用new操作符来创建数组,语法如下:
dataType[ ] arrayRefVar = new dataType[ arraySize];
1
数组的元素是通过索引访问的,数组索引从О开始。
获取数组长度:
arrays.length

数组特点
数组的四个基本特点
其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
其元素必须是相同类型,不允许出现混合类型。
数组中的元素可以是任何数据类型,包括基本类型和引用类型。
数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

数组的初始化
三种初始化
静态初始化:
int[] a = {1,2,3};
Man[ ] mans = {new Man(1,1),new Man(2,2)};
1
2

动态初始化:
int[] a = new int[2];
a[0]=1;
a[1]=2;
1
2
3
数组的默认初始化:

数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
————————————————
原文链接:https://blog.csdn.net/qq_63762763/article/details/123718626

你可能感兴趣的:(JAVA学习day3)