java方法以及与C语言对比学习

devtools/2025/1/20 15:45:58/

目录

方法概述

方法的概念

 方法的定义和调用

无参数方法定义和调用

无参数方法例

带参数方法定义和调用

带参数方法定义和调用

参和实参

带参数方法例

如何判断用无参还是有参方法

带返回值方法的定义和调用

带返回值方法定义和调用

带返回值方法练习

方法的注意事项

方法的注意事项

方法的通用格式

方法重载

方法重载

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);
      • 方法调用时,参数的数量与类型必须与方法定义中的设置相匹配,否则程序将报错

    参和实参

    1. 形参:方法定义中的参数

    等同于变量定义格式,例如:int number

    1. 实参:方法调用中的参数

    等同于使用变量或常量,例如: 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语言的函数类似,但它们存在一些差异,以下是具体介绍:

    相似之处

    1. 基本功能
      • 都是代码的封装单元,用于实现特定的功能。例如,在C语言中,可以编写一个计算两个数之和的函数:

        int add(int a, int b) {return a + b;
        }

        在Java中,可以编写一个具有相同功能的方法:

        java">public int add(int a, int b) {return a + b;
        }

        这两个代码片段都实现了将两个整数相加并返回结果的功能,将相关代码封装起来,便于在程序中多次调用。

    2. 参数传递
      • 都可以接受参数。C语言函数和Java方法都可以通过参数列表接收外部传入的数据。例如,上面的add函数和方法都接收两个整数参数ab,在方法或函数内部可以使用这些参数进行计算等操作。

    3. 返回值
      • 都可以有返回值。可以指定返回值的类型,如果不需要返回值,C语言可以使用void类型,Java可以使用void关键字。例如,一个返回字符串的C语言函数和Java方法:

      • C语言

      • char* greet() {return "Hello, C!";
        }

        java

      • java">public String greet() {return "Hello, Java!";
        }
      • 当然,也可以没有返回值,如:

        C语言

        void printHello() {printf("Hello, C!\n");
        }

        java

        java">public void printHello() {System.out.println("Hello, Java!");
        }

    不同之处

    1. 所属关系
      • C语言的函数是独立的,不属于任何类。它存在于全局作用域中,通过函数名就可以直接调用。

      • Java的方法必须定义在类中,它是类的一部分。例如:

        java

        java">public class Calculator {public int add(int a, int b) {return a + b;}
        }

        要调用add方法,需要先创建Calculator类的实例,然后通过实例调用方法:

        java

        java">Calculator calc = new Calculator();
        int result = calc.add(3, 4);
    2. 访问控制
      • C语言的函数没有访问控制修饰符,所有函数默认都是公开的,可以在程序的任何地方调用。

      • Java的方法有访问控制修饰符,如publicprivateprotected等。public方法可以被任何其他类访问,private方法只能在定义它的类内部访问,protected方法可以被同一包内的类以及所有子类访问。例如:

        java

        java">public class MyClass {private void privateMethod() {// 仅在MyClass类内部可以调用}protected void protectedMethod() {// 同一包内类以及子类可以调用}public void publicMethod() {// 任何其他类都可以调用}
        }
    3. 重载

      • C语言不支持函数重载。函数名必须唯一,参数列表不同也不能定义同名函数。

      • Java支持方法重载。可以在同一个类中定义多个同名方法,只要它们的参数列表(参数的类型、个数或顺序)不同即可。例如:

        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数组的相似点

    1. 基本概念:两者都是用于存储多个相同类型数据的集合。可以将多个数据项组织在一起,通过索引进行访问和操作。

    2. 声明方式:都可以指定数组的类型和大小(除了C语言的动态数组)。例如,声明一个包含5个整数的数组:

      • C语言:int arr[5];

      • Java:int[] arr = new int[5];int[] arr = {0, 0, 0, 0, 0};

    3. 索引访问:都使用索引来访问数组元素,索引从0开始。例如,访问第一个元素:

      • C语言:arr[0]

      • Java:arr[0]

    4. 遍历方式:都可以使用循环结构(如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数组的区别

    1. 内存分配

      • C语言:数组可以是静态分配的(在栈上分配内存,大小在编译时确定)或动态分配的(使用malloccalloc等函数在堆上分配内存,大小在运行时确定)。例如,动态分配数组:

        java">int* arr = (int*)malloc(5 * sizeof(int));

        使用完毕后需要手动释放内存:

        free(arr);
      • Java:数组总是动态分配的,内存由Java虚拟机(JVM)自动管理。创建数组时使用new关键字,例如:

        java">int[] arr = new int[5];

        当数组不再被引用时,JVM的垃圾回收器会自动回收内存,不需要手动释放。

    2. 数组大小

      • C语言:数组的大小在声明时必须确定,除非使用动态内存分配。一旦分配,数组大小不能改变。

      • Java:数组的大小在创建时确定,但可以通过创建新的数组并复制元素来实现动态效果。Java还提供了ArrayList等集合类,可以动态改变大小。

    3. 类型检查

      • C语言:类型检查较弱。可以将一个数组指针赋值给另一个不同类型的指针,但需要显式类型转换。例如:

        int arr1[5];
        double* ptr = (double*)arr1;  // 显式类型转换
      • Java:类型检查严格。数组类型在编译时检查,不能将一个数组引用赋值给另一个不同类型的数组引用。例如:

        java">int[] arr1 = {1, 2, 3, 4, 5};
        double[] arr2 = arr1;  // 编译错误
    4. 数组方法

      • 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);  // 复制并扩展数组
    5. 多维数组

      • 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}
        };
    6. 数组初始化

      • C语言:可以在声明时初始化数组,未初始化的元素默认为0(对于全局数组)或未定义(对于局部数组)。例如:

        int arr[5] = {1, 2, 3};  // 未初始化的元素为0
      • Java:可以在声明时初始化数组,未初始化的元素默认为0(对于整数数组)、false(对于布尔数组)、null(对于对象数组)等。例如:

        java">int[] arr = {1, 2, 3};  // 未初始化的元素为0
    7. 数组边界检查

      • C语言:没有内置的数组边界检查。访问数组时,如果索引越界,程序可能会崩溃或产生未定义行为。例如:

        int arr[5];
        arr[10] = 1;  // 越界访问,可能导致程序崩溃
      • Java:有严格的数组边界检查。访问数组时,如果索引越界,会抛出ArrayIndexOutOfBoundsException异常。例如:

        java">int[] arr = new int[5];
        arr[10] = 1;  // 抛出ArrayIndexOutOfBoundsException

    总结:

    • 相似点:C语言和Java数组都是用于存储多个相同类型数据的集合,都可以通过索引访问和遍历。

    • 区别:C语言数组在内存管理、类型检查、数组方法、多维数组等方面较为灵活但需要手动管理,而Java数组在内存管理、类型检查、数组方法等方面更为严格和自动化,提供了更多的内置方法和动态特性。


    http://www.ppmy.cn/devtools/152131.html

    相关文章

    ctfshow复现2024ciscn第一场web

    2024ciscn第一场 本章内容均在ctfshow复现 图片若显示失败请参考我的blog&#x1f447; ddl08.github.io sanic python污染 源码 from sanic import Sanic from sanic.response import text, html from sanic_session import Session import pydash # pydash5.1.2 ​ ​…

    latin1_swedish_ci(latin1 不支持存储中文、日文、韩文等多字节字符)

    文章目录 1、SHOW TABLE STATUS WHERE Name batch_version;2、latin1_swedish_ci使用场景注意事项修改字符集和排序规则修改表的字符集和排序规则修改列的字符集和排序规则修改数据库的默认字符集和排序规则 3、ALTER TABLE batch_version CONVERT TO CHARACTER SET utf8mb4 C…

    JavaScript系列(34)--服务端渲染技术详解

    JavaScript服务端渲染技术详解 &#x1f5a5;️ 今天&#xff0c;让我们深入了解JavaScript的服务端渲染技术&#xff0c;这是一种提升Web应用性能和SEO友好性的重要技术。 服务端渲染基础概念 &#x1f31f; &#x1f4a1; 小知识&#xff1a;服务端渲染&#xff08;SSR&…

    【C++课程学习】:C++中的IO流(istream,iostream,fstream,sstream)

    &#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 C学习笔记&#xff1a; https://blog.csdn.net/djdjiejsn/category_12682189.html 前言&#xff1a; 在C语…

    Swift 专题二 语法速查

    一 、变量 let, var 变量是可变的&#xff0c;使用 var 修饰&#xff0c;常量是不可变的&#xff0c;使用 let 修饰。类、结构体和枚举里的变量是属性。 var v1:String "hi" // 标注类型 var v2 "类型推导" let l1 "标题" // 常量class a {…

    表单中在不设置required的情况下在label前加*必填标识

    参考:https://blog.csdn.net/qq_55798464/article/details/136233718 需求&#xff1a;在发票类型前面添加*必填标识 我最开始直接给发票类型这个表单类型添加了验证规则required:true&#xff0c;问题来了&#xff0c;这个发票类型它是有默认值的&#xff0c;所以我点击保存…

    x86_64编译ARM交叉编译LED汇编程序

    x86_64搭建ARM交叉编译工具链 我们是要编译出在ARM开发板上运行的可执行文件&#xff0c;所以要使用交叉编译器arm-linux-gnueabihf-gcc来编译。因此本试验就一个led.s源文件&#xff0c;所以编译比较简单。先将led.s编译为对应的.o文件&#xff0c;在终端中输入如下命令&#…

    OODA循环在网络安全运营平台建设中的应用

    OODA循环最早用于信息战领域&#xff0c;在空对空武装冲突敌对双方互相较量时&#xff0c;看谁能更快更好地完成“观察—调整—决策—行动”的循环程序。 双方都从观察开始&#xff0c;观察自己、观察环境和敌人。基于观察&#xff0c;获取相关的外部信息&#xff0c;根据感知…