- 数组
- 存放多个同一类型的数据
- 数组也是一种数据类型,引用类型
- 数组创建后,如果没有赋值,有默认值。整数类型默认都是0,浮点数类型都是0.0,char是\u0000,boolean是false,String是null。
- 基本数据类型赋值,赋值方式是值拷贝;数组默认情况下是引用传递,赋值方式是传递地址。
- 排序
内部排序:数据都加载到内存中进行排序,包括交换式排序、选择式排序、插入式排序
外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括合并排序和直接合并排序法。 - 二维数组内存形式图
- 二维数组创建时列数可以不同。
int[][] ints = new int[3][]
创建一个数组,元素都为null。之后可以动态地添加数组中的元素。
- 声明方式
- 一维数组声明方式:
int[] x
/int x[]
- 二维数组声明方式:
int[][] y
/int y[][]
/int[] y[]
-
生成指定范围的随机数
Math.Random()
生成0.0<=x<1.0之间的随机数。
生成1到100的随机数:(int)(Math.random()*100+1)
-
类是抽象的,概念的,代表一类事物;对象是具体的,实际的,代表一个具体的事物。类是对象的模板,对象是类的一个个体。
-
类在内存中的创建对象的过程:在new对象的过程中,方法区1.
首先加载类的信息,包括属性信息和方法信息
,但是只会加载一次
,下一次new这个对象的过程不会再加载,然后 2.开始分配空间,默认初始化(根据数据类型有不同的默认值)
。然后 3.把这个空间地址赋给栈中的变量
。4. 进行指定初始化。堆里面的对象包含的属性中,如果是基本数据类型,会直接存放在堆里面
,如果是引用类型,会存放一个地址,地址指向方法区的常量池中的某一个地址
。 -
Person p1 = new Person();
p1是对象名、对象引用;new Person()创建的对象空间才是真正的对象。 -
类与对象内存分配图
内存总结:
- 栈:一般存放基本数据类型,局部变量
- 堆:存放对象、数组等
- 方法区:常量池(常量,比如字符串)类加载信息
- 方法调用执行过程
- 程序从main进入,先在栈中开辟一个main空间。
- 程序执行到方法时,就会
开辟一个独立的栈空间
。 - 方法执行完毕,或执行到return语句,就会返回到调用方法的地方,栈空间也会释放。
- 返回后继续执行方法后面的代码。
- 当main方法执行完毕,整个程序退出
- 一个方法最多有一个返回值,如果要返回多个值,可以使用数组。
- 方法定义时的参数称为形式参数,简称形参;方法调用时的传入的参数称为实际参数,简称实参。实参和形参的类型要一致或兼容,个数、顺序必须一致。
基本数据类型,传递的是值
,形参的任何改变不会影响实参。- 引用类型传递的是地址,传递的也是值,但是是地址,可以通过形参影响实参。
- 方法不能嵌套定义,但是可以嵌套调用。
- jvm的递归调用
- 递归必须向退出递归的条件逼近,否则就是无限递归,出现StackOverflowError,成死🐢了。