目录
方法概述
方法的概念
方法的定义和调用
无参数方法定义和调用
无参数方法例
带参数方法定义和调用
带参数方法定义和调用
参和实参
带参数方法例
如何判断用无参还是有参方法
带返回值方法的定义和调用
带返回值方法定义和调用
带返回值方法练习
方法的注意事项
方法的注意事项
方法的通用格式
方法重载
方法重载
Java与C语言方法数组的相似点以及差异
Java中的方法在很多方面与C语言的函数类似,但它们存在一些差异,以下是具体介绍:
相似之处
基本功能
参数传递
返回值
不同之处
所属关系
访问控制
C语言和Java数组的相似点
C语言和Java数组的区别
内存分配
数组大小
类型检查
数组方法
多维数组
数组初始化
数组边界检查
总结:
方法概述
方法的概念
方法(method)是程序中最小的执行单元
-
注意:
-
方法必须先创建才可以使用,该过程成为方法定义
-
方法创建后并不是直接可以运行的,需要手动使用后,才执行,该过程成为方法调用
-
方法的定义和调用
无参数方法定义和调用
-
定义格式:
java">public static void 方法名 ( ) {// 方法体; }
-
范例:
java">public static void method ( ) {// 方法体; }
-
调用格式:
java">方法名();
-
范例:
java">method();
-
注意:
方法必须先定义,后调用,否则程序将报错
无参数方法例
-
需求:设计一个方法用于打印两个数中的较大数
-
思路:
-
①定义一个方法,用于打印两个数字中的较大数,例如getMax()
-
②方法中定义两个变量,用于保存两个数字
-
③使用分支语句分两种情况对两个数字的大小关系进行处理
-
④在main()方法中调用定义好的方法
-
-
代码:
-
java">public class MethodTest {public static void main(String[] args) {//在main()方法中调用定义好的方法getMax();}//定义一个方法,用于打印两个数字中的较大数,例如getMax()public static void getMax() {//方法中定义两个变量,用于保存两个数字int a = 10;int b = 20;//使用分支语句分两种情况对两个数字的大小关系进行处理if(a > b) {System.out.println(a);} else {System.out.println(b);}} }
带参数方法定义和调用
带参数方法定义和调用
-
定义格式:
参数:由数据类型和变量名组成 - 数据类型 变量名
参数范例:int a
java">public static void 方法名 (参数1) {方法体; } public static void 方法名 (参数1, 参数2, 参数3...) {方法体; }
-
范例:
java">public static void isEvenNumber(int number){... } public static void getMax(int num1, int num2){... }
-
注意:
方法定义时,参数中的数据类型与变量名都不能缺少,缺少任意一个程序将报错 方法定义时,多个参数之间使用逗号( ,)分隔
-
-
调用格式:
java">方法名(参数);方法名(参数1,参数2);
-
范例:
java">isEvenNumber(10);getMax(10,20);
-
方法调用时,参数的数量与类型必须与方法定义中的设置相匹配,否则程序将报错
-
参和实参
-
形参:方法定义中的参数
等同于变量定义格式,例如:int number
-
实参:方法调用中的参数
等同于使用变量或常量,例如: 10 number
带参数方法例
-
需求:设计一个方法用于打印两个数中的较大数,数据来自于方法参数
-
思路:
-
①定义一个方法,用于打印两个数字中的较大数,例如getMax()
-
②为方法定义两个参数,用于接收两个数字
-
③使用分支语句分两种情况对两个数字的大小关系进行处理
-
④在main()方法中调用定义好的方法(使用常量)
-
⑤在main()方法中调用定义好的方法(使用变量)
-
-
代码:
-
java">public class MethodTest {public static void main(String[] args) {//在main()方法中调用定义好的方法(使用常量)getMax(10,20);//调用方法的时候,人家要几个,你就给几个,人家要什么类型的,你就给什么类型的//getMax(30);//getMax(10.0,20.0);//在main()方法中调用定义好的方法(使用变量)int a = 10;int b = 20;getMax(a, b);}//定义一个方法,用于打印两个数字中的较大数,例如getMax()//为方法定义两个参数,用于接收两个数字public static void getMax(int a, int b) {//使用分支语句分两种情况对两个数字的大小关系进行处理if(a > b) {System.out.println(a);} else {System.out.println(b);}} }
如何判断用无参还是有参方法
先知道要做什么
然后看需要什么,如果不需要自然不需要参数
带返回值方法的定义和调用
带返回值方法定义和调用
-
定义格式
java">public static 数据类型 方法名 ( 参数 ) { return 数据 ; }
-
范例
java">public static boolean isEvenNumber( int number ) { return true ; } public static int getMax( int a, int b ) {return 100 ; }
-
注意:
-
方法定义时return后面的返回值与方法定义上的数据类型要匹配,否则程序将报错
-
-
-
调用格式
java">方法名 ( 参数 ) ; 数据类型 变量名 = 方法名 ( 参数 ) ;
-
范例
java">isEvenNumber ( 5 ) ; boolean flag = isEvenNumber ( 5 );
-
注意:
-
方法的返回值通常会使用变量接收,否则该返回值将无意义
-
-
带返回值方法练习
-
需求:设计一个方法可以获取两个数的较大值,数据来自于参数
-
思路:
-
①定义一个方法,用于获取两个数字中的较大数
-
②使用分支语句分两种情况对两个数字的大小关系进行处理
-
③根据题设分别设置两种情况下对应的返回结果
-
④在main()方法中调用定义好的方法并使用变量保存
-
⑤在main()方法中调用定义好的方法并直接打印结果
-
-
代码:
java">public class MethodTest {public static void main(String[] args) {//在main()方法中调用定义好的方法并使用变量保存int result = getMax(10,20);System.out.println(result);//在main()方法中调用定义好的方法并直接打印结果System.out.println(getMax(10,20));}//定义一个方法,用于获取两个数字中的较大数public static int getMax(int a, int b) {//使用分支语句分两种情况对两个数字的大小关系进行处理//根据题设分别设置两种情况下对应的返回结果if(a > b) {return a;} else {return b;}} }
方法的注意事项
方法的注意事项
-
方法不能嵌套定
-
void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据或代码
方法的通用格式
-
格式:
java">public static 返回值类型 方法名(参数) {方法体; return 数据 ; }
-
解释:
-
public static 修饰符
返回值类型 方法操作完毕之后返回的数据的数据类型
如果方法操作完毕,没有数据返回,这里写void,而且方法体中一般不写return
方法名 调用方法时候使用的标识
参数 由数据类型和变量名组成,多个参数之间用逗号隔开
方法体 完成功能的代码块
return 如果方法操作完毕,有数据返回,用于把数据返回给调用者
-
-
定义方法时,要做到两个明确
-
明确返回值类型:主要是明确方法操作完毕之后是否有数据返回,如果没有,写void;如果有,写对应的数据类型
-
明确参数:主要是明确参数的类型和数量
-
-
调用方法时的注意:
-
void类型的方法,直接调用即可
-
非void类型的方法,推荐用变量接收调用
-
方法重载
方法重载
-
方法重载概念
方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
-
参数不同:个数不同、类型不同、顺序不同
- 多个方法在同一个类中
- 多个方法具有相同的方法名
- 多个方法的参数不相同,类型不同或者数量不同
同一个类中,方法名相同,参数不同的方法。与返回值无关。
实参和形参一一对应
-
注意:
-
重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式
-
重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载
-
-
正确范例:
java">public class MethodDemo {public static void fn(int a) {//方法体}public static int fn(double a) {//方法体} }public class MethodDemo {public static float fn(int a) {//方法体}public static int fn(int a , int b) {//方法体} }
-
错误范例:
java">public class MethodDemo {public static void fn(int a) {//方法体}public static int fn(int a) { /*错误原因:重载与返回值无关*///方法体} }public class MethodDemo01 {public static void fn(int a) {//方法体} } public class MethodDemo02 {public static int fn(double a) { /*错误原因:这是两个类的两个fn方法*///方法体} }
从内存的角度去解释基本数据类型和引用数据类型:
基本数据类型:据值是存储在自己的空间中
特点:赋值给其他变量,也是赋的真实的值。
引用数据类型:数据值是存储在其他空间中,自己空间中存储的是地址值。
特点:赋值给其他变量,赋的地址值。
传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数的值
传递引用数据类型时,传递的是地址值,形参的改变,影响实际参数的值
Java与C语言方法数组的相似点以及差异
Java中的方法在很多方面与C语言的函数类似,但它们存在一些差异,以下是具体介绍:
相似之处
-
基本功能
-
都是代码的封装单元,用于实现特定的功能。例如,在C语言中,可以编写一个计算两个数之和的函数:
int add(int a, int b) {return a + b; }
在Java中,可以编写一个具有相同功能的方法:
java">public int add(int a, int b) {return a + b; }
这两个代码片段都实现了将两个整数相加并返回结果的功能,将相关代码封装起来,便于在程序中多次调用。
-
-
参数传递
-
都可以接受参数。C语言函数和Java方法都可以通过参数列表接收外部传入的数据。例如,上面的
add
函数和方法都接收两个整数参数a
和b
,在方法或函数内部可以使用这些参数进行计算等操作。
-
-
返回值
-
都可以有返回值。可以指定返回值的类型,如果不需要返回值,C语言可以使用
void
类型,Java可以使用void
关键字。例如,一个返回字符串的C语言函数和Java方法: -
C语言
-
char* greet() {return "Hello, C!"; }
-
java">public String greet() {return "Hello, Java!"; }
-
当然,也可以没有返回值,如:
C语言
void printHello() {printf("Hello, C!\n"); }
java">public void printHello() {System.out.println("Hello, Java!"); }
-
不同之处
-
所属关系
-
访问控制
-
C语言的函数没有访问控制修饰符,所有函数默认都是公开的,可以在程序的任何地方调用。
-
Java的方法有访问控制修饰符,如
public
、private
、protected
等。public
方法可以被任何其他类访问,private
方法只能在定义它的类内部访问,protected
方法可以被同一包内的类以及所有子类访问。例如:java">public class MyClass {private void privateMethod() {// 仅在MyClass类内部可以调用}protected void protectedMethod() {// 同一包内类以及子类可以调用}public void publicMethod() {// 任何其他类都可以调用} }
-
-
重载
-
C语言不支持函数重载。函数名必须唯一,参数列表不同也不能定义同名函数。
-
Java支持方法重载。可以在同一个类中定义多个同名方法,只要它们的参数列表(参数的类型、个数或顺序)不同即可。例如:
java">public class MyClass {public void print(int num) {System.out.println("整数:" + num);}public void print(double num) {System.out.println("浮点数:" + num);}public void print(String str) {System.out.println("字符串:" + str);} }
这样可以根据传入参数的不同类型调用相应的方法。
-
总的来说,Java的方法在继承了C语言函数基本功能的基础上,融入了面向对象编程的特性,如必须属于类、具有访问控制等,使其在类的封装和继承等场景中发挥重要作用。
C语言和Java数组的相似点
-
基本概念:两者都是用于存储多个相同类型数据的集合。可以将多个数据项组织在一起,通过索引进行访问和操作。
-
声明方式:都可以指定数组的类型和大小(除了C语言的动态数组)。例如,声明一个包含5个整数的数组:
-
C语言:
int arr[5];
-
Java:
int[] arr = new int[5];
或int[] arr = {0, 0, 0, 0, 0};
-
-
索引访问:都使用索引来访问数组元素,索引从0开始。例如,访问第一个元素:
-
C语言:
arr[0]
-
Java:
arr[0]
-
-
遍历方式:都可以使用循环结构(如for循环)来遍历数组中的每个元素。例如,遍历并打印数组中的所有元素:
-
C语言:
for (int i = 0; i < 5; i++) {printf("%d ", arr[i]); }
-
Java:
java">for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " "); }
-
C语言和Java数组的区别
-
内存分配
-
C语言:数组可以是静态分配的(在栈上分配内存,大小在编译时确定)或动态分配的(使用
malloc
、calloc
等函数在堆上分配内存,大小在运行时确定)。例如,动态分配数组:java">int* arr = (int*)malloc(5 * sizeof(int));
使用完毕后需要手动释放内存:
free(arr);
-
Java:数组总是动态分配的,内存由Java虚拟机(JVM)自动管理。创建数组时使用
new
关键字,例如:java">int[] arr = new int[5];
当数组不再被引用时,JVM的垃圾回收器会自动回收内存,不需要手动释放。
-
-
数组大小
-
C语言:数组的大小在声明时必须确定,除非使用动态内存分配。一旦分配,数组大小不能改变。
-
Java:数组的大小在创建时确定,但可以通过创建新的数组并复制元素来实现动态效果。Java还提供了
ArrayList
等集合类,可以动态改变大小。
-
-
类型检查
-
C语言:类型检查较弱。可以将一个数组指针赋值给另一个不同类型的指针,但需要显式类型转换。例如:
int arr1[5]; double* ptr = (double*)arr1; // 显式类型转换
-
Java:类型检查严格。数组类型在编译时检查,不能将一个数组引用赋值给另一个不同类型的数组引用。例如:
java">int[] arr1 = {1, 2, 3, 4, 5}; double[] arr2 = arr1; // 编译错误
-
-
数组方法
-
C语言:标准库中没有专门的数组方法。需要手动编写函数来实现数组的排序、查找等操作。例如,排序可以使用
qsort
函数:qsort(arr, 5, sizeof(int), compare);
其中
compare
是一个比较函数。 -
Java:提供了丰富的数组方法,如
Arrays.sort()
用于排序,Arrays.binarySearch()
用于二分查找,Arrays.copyOf()
用于复制数组等。例如:java">Arrays.sort(arr); int index = Arrays.binarySearch(arr, 3); int[] newArr = Arrays.copyOf(arr, 10); // 复制并扩展数组
-
-
多维数组
-
C语言:多维数组在内存中是连续存储的。例如,二维数组:
int arr[2][3] = {{1, 2, 3},{4, 5, 6} };
内存布局是连续的:
1, 2, 3, 4, 5, 6
。 -
Java:多维数组是数组的数组。例如,二维数组:
-
二维数组的静态初始化
格式:数据类型[][]数组名 =new 数据类型[][]{ {元素1,元素2},{元素1,元素2}}; -
简化格式:数据类型[][] 数组名 ={ {元素1,元素2},{元素1,元素2}};
java">int[][] arr = {{1, 2, 3},{4, 5, 6} };
内存布局是每个一维数组单独分配内存,二维数组是一个包含一维数组引用的数组。这种结构使得Java的多维数组可以是不规则的,即每行的长度可以不同:
java">int[][] arr = {{1, 2, 3},{4, 5},{6, 7, 8, 9} };
-
-
数组初始化
-
C语言:可以在声明时初始化数组,未初始化的元素默认为0(对于全局数组)或未定义(对于局部数组)。例如:
int arr[5] = {1, 2, 3}; // 未初始化的元素为0
-
Java:可以在声明时初始化数组,未初始化的元素默认为0(对于整数数组)、
false
(对于布尔数组)、null
(对于对象数组)等。例如:java">int[] arr = {1, 2, 3}; // 未初始化的元素为0
-
-
数组边界检查
-
C语言:没有内置的数组边界检查。访问数组时,如果索引越界,程序可能会崩溃或产生未定义行为。例如:
int arr[5]; arr[10] = 1; // 越界访问,可能导致程序崩溃
-
Java:有严格的数组边界检查。访问数组时,如果索引越界,会抛出
ArrayIndexOutOfBoundsException
异常。例如:java">int[] arr = new int[5]; arr[10] = 1; // 抛出ArrayIndexOutOfBoundsException
-
总结:
-
相似点:C语言和Java数组都是用于存储多个相同类型数据的集合,都可以通过索引访问和遍历。
-
区别:C语言数组在内存管理、类型检查、数组方法、多维数组等方面较为灵活但需要手动管理,而Java数组在内存管理、类型检查、数组方法等方面更为严格和自动化,提供了更多的内置方法和动态特性。