第四天
1. Java 方法
-
什么是方法
方法是语句的集合,它们在一起执行一个功能
方法是解决一类问题的步骤的有序组合
方法包含于类或对象中
方法在程序中被创建,在其他地方被引用
-
方法的设计原则:
方法的本意是功能块,就是实现某个功能的语句块的集合。
我们设计方法的时候,最好保持方法的原子性(就是一个方法只完成一个功能),这样利于我们后期的拓展
-
命名规则:驼峰
-
写法:
[修饰符] 返回值类型 方法名([参数 类型 参数名],[参数 类型 参数名], ... ){
//方法体;
}
/*1.修饰符:是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型
2.返回值类型:方法可能会有返回值,returnValueTrue是方法返回值的数据类型。无返回值时用void
3.方法名:是方法的实际名称。方法名和参数名共同构成方法签名
4.参数类型:是可选的,参数像是一个-——占位符。当被方法调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。
认识:实参 和 形参。
5.方法体:方法体包含具体的语句,定义该方法的功能。
*/ -
方法的调用
调用方法:对象名.方法名(实参列表)
Java支持两种调用方法的方式,根据方法是否有返回值来选择
-
当方法返回一个值的,方法调用通常被当做一个值
-
如果方法返回值是void,方法调用一定是一条语句
-
-
方法重载
-
重载就是在一个类中,有相同的函数名称,但形参不同的参数
-
方法的重载规则:
-
方法名称必须相同。
-
参数列表必须不同(个数不同,或类型不同,参数排列顺序不同等)。
-
方法的返回类型可以相同也可以不相同
-
仅仅返回类型不同不足以成为方法的重载
-
简单来说就是:方法名一样,参数列表不同
实现理论:方法名称相同时,编译器会根据调用方法的参数个数,参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器会报错。
-
2.命令行传参
-
有时候你希望运行一个程序时候再传递给它信息。这要靠传递命令行参数给main()函数实现。
3.可变参数
-
在JDK1.5开始,Java支持传递同类型的可变参数给一个方法
-
在方法声明中,在指定参数类型后加一个省略号(...)。
-
一个方法只能指定一个可变参数,他必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
public void int (int x,int... y){
//方法体
}
4.递归
自己调用自己
递归分为两部分:递归头:什么时候不调用自身方法。(如果没有头,将陷入死循环)
递归体什么时候需要调用自身方法
注:边界条件、前阶段、返回阶段
基数小的时候使用,能不用就不用
理解递归的思想
5.数组
-
数组的定义:
-
数组是相同类型数据的有序集合
-
数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成
-
其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们
-
-
创建一个数组
首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法
dataType[] arrayRefVar; //首选方法
或
dataType arrayRefVar[]; //效果相同,但不是首选方法
Java语言使用new操作符来创建数组,语法如下
dataType[] arrayRefVar = new dataType[arraySize];
//方法一:
int[] a; //定义一个数组
a = new int [10]; //创建一个数组
//方法二:
int[] b = new int [10]; -
三种初始化
-
静态初始化:创建+赋值
int[] a={1,2,3};
Man[] mans = {new Man(1,1),new Man(2,2)};//引用类型的数组 -
动态初始化:包含了默认初始化
int a = new int [2];
a[0]=1;
a[1]=2' -
数组的默认初始化:int型初始值为0,浮点型初始值为0.0,字符型初始化为null
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
-
-
数组的四个基本特点
-
长度是确定的,数组一旦被创建,它的大小就是不可以改变的。
-
元素必须是相同类型,不允许出现混合类型。
-
数组中的元素可以是任何数据类型,包括基本类型和引用类型
-
数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。
数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的
-
-
数组的使用
-
for-Each增强for循环
int[] a = new a[10];
for(int x : a){
System.out.println(x);
}
//IDEA中快捷方法: 数组名.for-
普通for循环
-
数组作为方法入参
-
数组作返回值
-
6.多维数组
-
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每个元素都是一个一维数组。
-
二维数组
int a[][] new int[2][3];//可以看成两行五列的数组等
在 Java中二维数组就完全够用了,因为Java是面向对象变成,我们需要把一个个东西,变成一个个对象
7.稀疏数组(一种数据结构)
-
当一个数组中大部分元素为0,或者为同一值得数组时,可以使用稀疏数组来保存该数组
-
稀疏数组的处理方法是:
-
记录数组一共有几行几列,有多少个不同的值。
-
把具有不同值得元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模。
-
如:
-
-
-
二维数组和稀疏数组的比较
二维数组:
稀疏数组:
思考:把稀疏数组再还原回去
Java的内存
堆:存放new的对象和数组
可以被所有的线程共享,不会存放别的对象引用
栈:存放基本变量类型(会包含这个基本类型的具体数值)
引用对象的变量(会存放这个引用在堆里面的具体地址)
方法区:可以被所有的线程共享
包含了所有的class和static变量
等:
补充
-
方法也就是其他语言里边的函数。
-
return 0; 或 return; //终止方法
-
Java中都是值传递
-
JDK1.5以后,支持 可变参数
-
注意C语言中数组的定义和Java中数组的定义不同
-
C语言:int a[];
-
Java语言:int[] a; //首选,也可以写int a[]; 但是不推荐
-
-
获取数组长度:arrays.length
-
IDEA中for-Each增强for循环的快捷方法:数组名.for
-
熟悉Arrays类
-
学习一下八大排序方法
-
我们看到嵌套循环,应该立马就可以得出这个算法的时间复杂度为n^2