回顾方法的定义和调用:
该方法只是打印了一下,我们的*。并没有任何参数和方法返回值。
方法的定义:
修饰符 返回值类型 方法名(参数列表,参数列表){
代码
return 结果;
}
修饰符:目前固定写成我们的public static
返回值类型:表示方法运行的结果,方法执行后将结果返回给调用者。
参列表:方法运行过程中的未知数据,调用者调用方法时传递
return:表示将执行结果返回给我们的调用者,也表示我们方法的结束
定义方法有两个明确:
需求:
定义一个方法实现两个整数的和:
明确返回值类型:方法计算整数和,结果必然是整数,返回值类型确定了,是int类型
明确参数:计算哪两个整数和,并不知道,但是可以确定是两个整数,所以参数列表是两个int类型。
定义两个整数是否相同:
返回值类型:比较两个整数,结果要么相同要么不相同,你可以定义为boolean
参数列表:比较两个整数是否相同,传递的一定是int
练习一个计算1+2±—+n的和(n为int就够)
计算根据传入的两个整数参数,计算两个参数之间的数的和。
public class Ema4{
public static void main(String[] args){
int sum3 = Add1(1,5);
System.out.println(sum3);
}
public static int Add1(int a,int b){
int sum=0;
if(a>b){
for(int i=b+1; i<a ; i++)
sum+=i;
}
}else if(a<b){
for(int i=a+1; i<b; i++){
sum+=i;
}
}else {
System.out.println("请输入一大一小的数字!");
}
return sum;
}
}
定义的方法的注意事项:
定义位置:类中方法的外边
返回值类型:必须要和return语句返回的类型相同,否则编译出错。
调用方法的三种形式:
第一种
直接方法名调用:
public class Demo4{
public static void main(String[] args){
add();
}
public static void add(){
}
}
第二种
赋值调用,调用方法,在方法前面定义变量,接受方法的返回值。
第三种:
输出语句中调用:
注意:输出语句调用方法,方法必须有返回值。
方法的重载(overload)
方法的重载:就是在一个类中,方法的名字一样,但是他们的参数列表不一样,就可以,(与返回值和修饰符没关系)。
参数列表:个数不一样,数据类型不一样,顺序不一样。
重载方法的底层:jvm通过方法的参数列表,去调用不同的方法。
练习一:
下面哪些是方法的重载
public static void open(){}
public static void open(int a){}
static void open(int a,int b){}
public static void open(double a,int b){}
public static void open(int a,double b){}
public void open(int i,double d){}
public static void OPEN(){}
public static void open(int i,int j){}
答案:
public static void open(){} 是
public static void open(int a){} 是
static void open(int a,int b){} 是
public static void open(double a,int b){} 是
public static void open(int a,double b){} 是
public void open(int i,double d){} 不是
public static void OPEN(){} 不是
public static void open(int i,int j){} 不是
练习二:
模拟输出语句中的 println 方法效果,传递什么类型的数据就输出什么类型的数据,只允许定义一 个方法名 println 。
数组定义和访问
案例分析
现在需要统计某公司员工的工资情况,例如计算平均工资、找到最高工资等。假设该公司有 50 名员工,用前面所学的知识,程序首先需要声明 50 个变量来分别记住每位员工的工资,然后在进行 操作,这样做会显得很麻烦,而且错误率也会很高。因此我们可以使用容器进行操作。将所有的数据 全部存储到一个容器中,统一操作。
容器的概念
是将多个数据存储在一起,每个数据称为该容器的元素
生活中的容器:水盆,教室。
数组的概念
数组就是存储数据长度固定的容器,保证多个数据的数据类型一致。
定义数组:
格式:
数组存储的数据类型[] 数组的名字=new 数组存储的数据类型[数组的长度];
数组存储的数据类型:创建的数据容器可以存放的数据类型
[ ]:表示我们的数据
数组名字:为定义的数组起个变量名,满足标识符规则就可以。
new :关键字,创建数据使用的关键字
[数组的长度]:能够在容器存放的数据的大小
注意:数组有特定长度,长度一旦指定,不能更改
第一种方式(偏多):
第二种方式:
数据类型[] 数组的名字=new 数据类型[]{1,2,3,4,5,6,7};
第三种方式(偏多):
数据类型[] 数组名={元素1,元素2,元素3};
数组的访问:
索引:每一个存储到数组的元素,都会自动拥有一个编号,从0开始,这个自动编号成为数组的下标(索引),可 以通过数组的索引去访问我们的数组中的元素。
格式:数组名[索引值]
数组的长度的特性:每一个数组都具有长度,而且是固定,java中赋予了数组一个属性,可以获取我们的数组的长 度,语法:数组名.length ,属性length的执行结果是数组的长度,由此可以推断,我们的数组的最大索引值就是我 们的数组名.length-1。
数组原理的内存图:
数组的下标越界异常
内存概念:
内存是计算中重要的原件,临时存储区域,作用就是运行程序,我们的编写的程序存放在硬盘中,在硬盘中程序是 不能运行,必须放进我们的内存中才能运行,运行完毕后会清除内存。
java虚拟机中的内存划分:
为了提高效率,就对空间进行了划分,每一个区域都有特定的处理数据的方式和内存管理方式. jvm内存划分:
寄存器:给cpu使用,和我们开发没啥关系。
本地方法栈:jvm在使用操作系统功能的时候使用,与开发也没关系。
方法区:存储运行的class文件
堆内存:存储对象或者数组,new出来的都放在那个里面。
方法栈:方法运行时使用的内存,比如main运行时,进入我们方法栈。
数据结构:
栈:先进后出(子弹)
队列:先进先出
一个数组的内存图:
1、main方法进入我们的方法栈,
2、创建数组,jvm在我们的堆内存中开辟空间
3、数组在我们堆内存当中会有一个地址。
4、数组中有3个元素,默认值是0
5、jvm将数组的内存地址赋值给变量arr
6、变量arr保存的是数组内存中的地址,而不是一个具体的数值,因此称为引用数据类型
空指针异常:
数组遍历:
最大值获取:从数组中所有的元素中找出最大值:
定义变量,保存数组0索引处的元素,遍历数组,获取数组中的每一个元素,将遍历的数据元素和保存数组0索引上 的变量去比较,如果数组元素的值大于变量值,变量记录记住新的最大值。
数组的反转:
数组中元素颠倒顺序,例如原始数组为1,2,3,4,5.反转的数组为5,4,3,2,1
思路:
数组最远端的元素交换,实现反转,定义两个变量,保存数组的最小索引和最大索引。两个索引处的元素交换位置,最小索引++,最大索引–,再次交换位置,直到我们的最小索引》最大索引,数组反转结束。
以下是另外两种方法
数组作为方法参数和返回值:
以前我们方法中有参数和方法返回值,但是使用的都是基本类型,那么我们引用类型的数组作为我们的方法的参数 应该怎么办。
1.数组作为我们的参数去传递,传递的参数时数组的内存地址。
1.数组作为我们的返回值,