递归编程
Java语言中的方法Method在其他语言当中也可能被称为函数Function。对于一些复杂的代码逻辑,如果 希望重复使用这些代码,并且做到随时任意使用,那么就可以将这些代码放在一个大括号{}当中,并且 起一个名字。使用代码的时候,直接找到名字调用即可。 程序开始执行的时候是先执行main方法。因为main方法是一个入口。 在java语言中所有的方法体中的代码都必须遵循自上而下的顺序依次逐行执行。 main方法不需要程序员手动调用,是由JVM调用的。但是除了main方法之外其他的方法,都需要 程序员手动调用。 方法只有调用的时候才会执行,方法不调用是不会执行的。 方法定义在类体当中。方法定义的先后顺序没有关系 方法中的变量都属于局部变量。方法结束之后,局部变量占用的内存会自动释放。
递归需具备的条件: 子问题须与原始问题为同样的事,且更为简单 不能无限制调用本身,须有个出口,化简为非递归状态处理 递归的次数不能太多,否则容易造成栈内存溢出java.lang.StackOverflowError 网上有种说法是一般建议不要超过300层 构造方法不能递归调用。
数组
所谓的数组指的就是一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作。数组本身 属于引用数据类型,那么既然是引用数据类型,这里面实际又会牵扯到内存分配,数组变量是引用(地 址)型变量 数组相关概念: 数组名 元素 角标、下标、索引 数组的长度:元素的个数 length 数组的特点: 数组是有序排列的 数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型 创建数组对象会在内存中开辟一整块连续的空间 数组的长度一旦确定,就不能更改。 数组的分类 按照维数:一维数组、二维数组、... ... 按照数组元素的类型:基本数据类型元素的按钮、引用类型元素的数组。
数组内存分配
数组是对象,也就是说可以以操作对象的方式来操作数组。并且数组在虚拟机中有它特别的类型。 既然是对象,遵循Java语言中的规则所有类的顶层父类都是Object。数组的顶层父类也必须是 Object,这就说明数组对象可以向上直接转型到Object,也可以向下强制类型转换,也可以使用 instanceof关键字做类型判定 String[]的直接父类就是Object而不是Object[]。可是Object[]的引用也可以指向String[]类型的对 象。数组类直接继承了Object,关于Object[]类型的引用能够指向String[]类型的对象,这种情况只 能是Java语法之中的一个特例,并不是严格意义上的继承。也就是说,String[]不继承自Object[], 但是我可以允许你向上转型到Object[],这种特性是赋予你的一项特权。
数组操作方式
数组的访问通过索引完成,即:数组名称[索引],但是需要注意的是,数组的索引从0开始,所以索 引的范围就是0 ~ 数组长度-1,例如开辟了3个空间的数组,所以可以使用的索引是0,1,2,如果此 时访问的时候超过了数组的索引范围,会产生ArrayIndexOutOfBoundsException 异常 当数组采用动态初始化开辟空间后,数组里面的每一个元素都是该数组对应数据类型的默认值 数组本身是一个有序的集合操作,所以对于数组的内容操作往往会采用循环的模式完成,数组是一 个有限的数据集合,所以应该使用 for 循环 在 Java 中提供有一种动态取得数组长度的方式:数组名称.length; 数组遍历通常使用for循环来实现。也可以用foreach实现。