1、定义模块:在一个项目中,可以创建多个模块-----点击file点击项目结构点击模块点击新建模块就可以在此项目中新建多个模块
2、idea中快速生成语句:(1).快速生成main()方法:psvm/main, 回车
(2).快速生成输出语句:sout,回车
3、数组动态初始化:java中的数组必须先初始化(两种方式,推荐直接定义一个类型数组加变量名的方式),然后才能使用;初始化就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。数组初始化分为静态初始化和动态初始化,动态初始化时只指定数组的长度,有系统为数组分配初始值(int类型的数值默认就是0)。------数组的明显标志就是[]。---------数组在初始化时,会为存储空间添加默认值--------整数:0、浮点数:0.0,布尔:false、字符:空字符、引用数据类型:null。 --------只要在堆内存中的变量都会被赋予初始默认值
4、数组内存分配:java程序运行时,需要在内存中分配空间,为了提高效率,有对空间进行不同区域的划分,因为每一片区域都有特定的处理数据的方式和内存管理方式。----jdk内存空间分为:堆(类对象的和引用类型数据)、栈(方法及方法中的局部变量)、方法区(存储编译后产生的字节码文件,包括各个类文件还有每个类的所有方法)、本地方法栈(系统数据)等。
5、数组访问原理:堆内存空间中可以存放n多个数组空间,每新new一个数组,在堆空间中都会开辟一块空间,且此块空间的首地址会被赋给栈空间中的相对应的数组类型的引用变量,即该变量指向对应的堆空间的地址块。-----其实数组就是对象(凡是通过new建立的对象都是在堆中,堆中存放的都是实体(对象),在返回他的地址)。
要输出数组时即访问数组时,cpu会先根据栈空间中的地址值找到对应的堆内存中的空间地址,然后由该地址根据下标访问对应的数据。-------栈空间存储的是程序的方法所有局部变量也会存储在栈中,所以cpu会从栈空间通过内存地址(程序中的局部变量的变量值)访问堆内存空间。
6、单个数组和多个数组的访问原理:靠堆空间中的内存地址来进行访问
![](https://img-blog.csdnimg.cn/img_convert/ce91bcd7cf63f0cfd9a559036e519d05.png)
注:第一次运行数组时会为数组分配内存空间,返回对应的首地址,后面第二次运行该程序时数组的内存空间依旧不变。
多个数组在计算机中的存储原理:
![](https://img-blog.csdnimg.cn/img_convert/c5494f1f19c75c8235b809d903c2191a.png)
7、多个数组指向同一个内存地址:数组引用可以通过变量赋值使得多个数组引用变量同时指向一个数组的内存地址,那均会对数组进行操作
8、静态数组的精简写法:如:int[] arr = {1,2,3},System.out.println(arr[0]); 依旧可输出
9、使用数组常见问题:(1)、数组索引越界导致异常,ArrayIndexOutOfBoundsException-------即访问了不存在的索引以例8来说不存在arr[3].
(2)、NullPointerException:空指针异常------即数组变量名不在指向数组在堆内存中开辟的空间首地址了,而还用这个数组名去访问数组元素。------------使用条件语句对这个指针进行非空判断,避免直接报错
10、遍历数组:使用for循环,并利用length()方法可获取数组的长度从而遍历数组。
11、方法: 为了避免代码的重复书写,将具有独立功能的代码块组织成为一个整体,使其成为具有特殊功能的代码集,使用时直接手动调用即可。 注:主程序入口main是一个方法。在main方法中的方法必须是静态的,而类中方法(成员方法)不能是静态的,主类中一定要存在main方法,这样java运行时才会找到程序入口
12、方法的调用过程:先进程序入口main方法中,此时main方法就会被压栈(方法和局部变量都存储在栈中,需要开辟空间的都堆内存中),在main中又遇到getMax方法又压栈,并执行栈顶方法,当遇到getMax方法的 } 符号时,此方法运行完毕则就会出栈(满足栈的后进先出原则)
![](https://img-blog.csdnimg.cn/img_convert/165ad468bf7a8bab46777fab110c23b1.png)
当main方法执行 } 时也会随之做出栈操作。
13、定义方法的注意事项:方法不能嵌套一起,彼此都是单独存在, 方法带返回值时,return后面的数据要与方法类型一致。
14、方法的重载:要满足三个条件多个方法才能构成重载
(1)、多个方法在同一个类中
(2)、多个方法具有相同的方法名
(3)、多个方法的参数类型不相同,参数数量不相同(判断重载标准)
特点:重载仅对应方法的定义,与方法的调用无关
重载仅针对同一个类中的方法名和与参数进行识别,与返回值类型无关,即不能通过返回值类型来判断两个方法是否相互重载。
即此情况下会报错
15、 实参和形参:在main方法中,对于基本数据类型的参数,在作为实参时传递到另一个方法中(用同类型参数接收),在另一个方法中对接收的值做的操作,当该方法结束后回到main方法中,此时并不会影响到相应实参数的值。即对形参的操作不会影响到实参-------原理可以根据方法在栈中的动态变化来理解 (也可理解为方法传递的参数是基本类型时在方法中的操作不会影响到实参的值,如果传递的是引用类型的参数则会改变,因为直接对地址来操作的) 注:String字符串是特殊的引用类型,他作为形参传递时和基本类型作为形参传递的效果一致
![](https://img-blog.csdnimg.cn/img_convert/842919358a95949aed5aa04494986e84.png)
-------当change方法执行完毕后整体会跳出栈,所有在change方法中进number做的所有操作都会消失,并不会影响到原变量
16、输出的格式:System.out.println(""); //输出内容并换行
System.out.print(""); //输出内容不换行
system.out.println();//起到换行作用 17、debug是调试程序的,即可以在控制台看到程序一步一步执行以及每一步产生的变量和变量如何变化的,也可以查看程序的执行流程。 按f8直接进入方法内部查看执行
f9是分析栈帧链的(按f9可以直接执行到断点处)
18、idea在debug模式下改变变量的值:先打点进行调试并在调试台选中目标变量右击选中set value 就可以给变量值来判断代码逻辑是否正常 -------实用
断点回退