什么是方法?
方法是程序中最小的执行单元,就像下面的这个例子,我们执行下面代码的时候,程序进去main方法后,这两行代码都会执行的,不会分开,所以说方法是我们程序中,最小的执行单元
public class JavaText {
public static void main(String[] args) {
System.out.println("Hello World");
System.out.println("Hello World");
}
}
运行结果:在代码当中我们也可以自己定义一些其他的方法
Hello World
Hello World
方法有什么作用?
如果我们现在用输出语句来描述如何写一篇博客?我们会想首先我们要“打开电脑”,然后我们点开网站,然后点写文章,在发表就可以了。
public class JavaText {
public static void main(String[] args) {
System.out.println("打开电脑");
System.out.println("点开网站");
System.out.println("点写文章");
System.out.println("点发表文章");
}
}
代码运行:
打开电脑
点开网站
点写文章
点发表文章
如果我说我想写两篇博客,或者说想写三篇博客,那我们每次都反复的写太过于麻烦,这个时候我们就可以自己写一个方法,进行调用就可以了。我们相当于把重复的代码进行打包,再把打包的代码起一个名字,现在我想再写一篇博客就不需要再写一遍了,直接调用打包好的这个整体就可以了,我们想写两篇博客那我们就调用两次就可以
最简单方法定义和调用
方法的定义
把一些代码打包在一起,这个过程就叫做方法定义
方法的定义格式
格式:
public static void 方法名(){
方法体 (就是打包起来的代码);
}
示例:
public static void fangFa(){
4个打印语句:
}
此时的方法名就是fangFa,给方法起名字的时候,如果是一个单词,我们就全部小写,如果是
多个单词我们第二个单词开始首字母要大写.方法体里面就是们要打包起来的代码了,比如说我们的打开电脑,点开网站,点写文章,点发表文章等等,注意方法定义完成之后里面的代码是不会主动执行的。所以我们接下来学习方法的调用
方法调用
方法在定义之后是不会主动的运行的,需要手动调用才能执行,这个过程叫做方法的调用
格式:方法名( )
示例:fangFa( )
注意一点我们所写的方法一定是先定义再进行调用,要不然会进行报错
public class JavaText {
public static void main(String[] args) {
fangFa();
}
public static void fangFa(){
System.out.println("打开电脑");
System.out.println("点开网站");
System.out.println("点写文章");
System.out.println("点发表文章");
}
}
结果运行:
打开电脑
点开网站
点写文章
点发表文章
如果我们想打印写两次文章的话,我们就再次调用fangFa方法,就可以实现
public class JavaText {
public static void main(String[] args) {
fangFa();
fangFa();
}
public static void fangFa(){
System.out.println("打开电脑");
System.out.println("点开网站");
System.out.println("点写文章");
System.out.println("点发表文章");
}
}
运行结果:
打开电脑
点开网站
点写文章
点发表文章
打开电脑
点开网站
点写文章
点发表文章
做一个小练习:
public class JavaText2 {
public static void main(String[] args) {
nuyou1();
}
public static void nuyou1(){
System.out.println("小花");
System.out.println("御姐");
System.out.println("21");
}
}
运行结果:
小花
御姐
21
带参数的方法的定义和调用
为什么要有带参数的方法?当方法要计算参数的数据不明确的时候,我们就可以把参数定义到小括号当中,调用这个方法的时候我们根据实际情况来传入不同的值,但是你要注意,( )实参括号里面有几个参数,你再调用的时候就要传几个参数给形参,个数一定要对应起来而且他的数据类型你也要对应起来,现在呢我们方法里面是两个参数,两个都是int类型的,此时你传递过来的也要是整数int类型的,如果说你传递的是一个小数那也是不行
格式:public static void 方法名(参数){.....}
示例:public static void fangFa( int a){......}
如果说我们有多个参数,那我们在传参的时候参数与参数之间一定要用逗号隔开
格式:public static void 方法名(参数, 参数,参数,参数){.....}
示例:public static void fangFa( int a,int b,int c,int d){......}
注意:参数在调用的时候,参数的数量与类型必须与方法定义中的小括号里面的变量一一对应,否则就会报错
public class JavaText2 {
public static void main(String[] args) {
xiangJia(20,20);
}
public static void xiangJia(int a,int b){
int sum =a+b;
System.out.println(sum);
}
}
代码运行:
40
形参:全称形式参数,是指方法定义中的参数
实参:全称实际参数,方法调用中的的参数
练习题:求正方形的周长,讲结果在方法中打印
public class JavaText2 {
public static void main(String[] args) {
zhouchang(11);
}
public static void zhouchang(int a){
int sum = a*4;
System.out.println(sum);
}
}
运行结果:
44
带返回值方法的定义和调用
格式:public static 返回值类型 方法名 (参数){
方法体;
return 返回值;
}
示例:
public static int fangFa(int a,int b){
int c =a+b;
return c;
}
带返回值方法的调用:
1.直接调用:方法名(实参);//它表示对返回值不做任何的处理
2.赋值调用:数据类型 变量名 = 方法名(实参);//把方法运行的结果赋值给左边的变量,如果说咱们后面的代码中你想用到这个结果,那你直接用变量名就可以
3.输出调用:System.out.println(方法名 (实参));我们可以把方法的调用直接写在打印语句里面,表示把方法的运行结果直接运行输出
方法的重载
在同一个类中,定义了多个同名的方法,这些同名的方法具有同种的功能。
每个方法具有不同的参数类型活参数个数,这些同名的方法。就构成了重载关系
练习题:需求:使用方法重载的思想,设计比较两个整数是否相同的方法
要求:兼容全整数类型(byte,int,short,long)
我们可以看到我们给实参传参数的时候,我们所写的参数类型是什么,相对应类型重载方法名就会变亮,其余的一律是灰色
方法的基本内存原理
栈:栈是跟方法有关的,方法在运行的时候要进栈,方法里面所有的代码运行完毕了,他就会从栈里面出去
堆:堆是跟new关键字有关的,如果我们看到有使用new关键字开辟的空间,它绝对是在堆里面
什么是基本数据类型和引用数据类型
基本数据类型:数据值是存储在自己的空间中
特点:赋值给其他变量,也是赋的真是的值
引用数据类型:数据值是存储在其他空间中,自己空间中的存储的是地址值
特点:赋值给其他变量,赋值的是地址
方法运行时候进栈,运行结果后出栈,出栈后,栈区所创建的内存空间将不复存在
注意:当我们传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数的值,除非方法返回的时候,把结果返回到调用处,再用原来的变量来结束,这样赋值过去,值才回变
什么是二维数组?
简单的说就是在数组里面存的还是数组,最外层的大数组就叫做二维数组,之前我们学习过一维数组,可以把多个一维数组放到一个大的数组当中方便管理,这个大的数组就叫做二维数组。
在定义二维数组的时候必须要分别指明每一行,每一列分别是什么,用{ }的方式来指明它的行和列,以下是二维数组的几种定义方式
int[][] arr={{1,2,3},{4,5,6}};
int[][] arr1=new int[][]{{1,2,3},{4,5,6}};
int[][] arr2=new int[2][3];
我们定义一个二维数组,把它遍历出来
public class Jase {
public static void main(String[] args) {
int[][] arr={{1,2,3},{4,5,6}};
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
{
System.out.println(arr[i][j]+" ");
}
}
}
}
运行结果:
1
2
3
4
5
6
拿我们刚刚写的代码为例如果说我们此时arr.length打印出来的长度是2,arr[0].length打印出来的长度就是3,arr[1].length打印出来的长度也是3
public class Jase {
public static void main(String[] args) {
int[][] arr={{1,2,3},{4,5,6}};
System.out.println(arr.length);//行
System.out.println(arr[0].length);//列
System.out.println(arr[1].length);//列
}
}
运行结果:
2
3
3