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

目录

方法概述

方法的概念

方法的定义和调用

无参数方法定义和调用

无参数方法例

带参数方法定义和调用

带参数方法定义和调用

参和实参

带参数方法例

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

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

带返回值方法定义和调用

带返回值方法练习

方法的注意事项

方法的注意事项

方法的通用格式

方法重载

方法重载

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语言的函数类似,但它们存在一些差异,以下是具体介绍:

相似之处

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

    cs 复制代码
    int add(int a, int b) {
        return a + b;
    }

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

    java 复制代码
    public int add(int a, int b) {
        return a + b;
    }

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

参数传递
  • 都可以接受参数。C语言函数和Java方法都可以通过参数列表接收外部传入的数据。例如,上面的add函数和方法都接收两个整数参数ab,在方法或函数内部可以使用这些参数进行计算等操作。
返回值
  • 都可以有返回值。可以指定返回值的类型,如果不需要返回值,C语言可以使用void类型,Java可以使用void关键字。例如,一个返回字符串的C语言函数和Java方法:

  • C语言

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

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

    C语言

    cs 复制代码
    void printHello() {
        printf("Hello, C!\n");
    }

    java

    java 复制代码
    public void printHello() {
        System.out.println("Hello, Java!");
    }

不同之处

所属关系
  • 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);
访问控制
  • C语言的函数没有访问控制修饰符,所有函数默认都是公开的,可以在程序的任何地方调用。

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

    java

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

    • 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语言:

      cs 复制代码
      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语言 :数组可以是静态分配的(在栈上分配内存,大小在编译时确定)或动态分配的(使用malloccalloc等函数在堆上分配内存,大小在运行时确定)。例如,动态分配数组:

    java 复制代码
    int* arr = (int*)malloc(5 * sizeof(int));

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

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

    java 复制代码
    int[] arr = new int[5];

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

数组大小

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

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

类型检查

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

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

    java 复制代码
    int[] arr1 = {1, 2, 3, 4, 5};
    double[] arr2 = arr1;  // 编译错误

数组方法

  • C语言 :标准库中没有专门的数组方法。需要手动编写函数来实现数组的排序、查找等操作。例如,排序可以使用qsort函数:

    cs 复制代码
    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语言:多维数组在内存中是连续存储的。例如,二维数组:

    cs 复制代码
    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(对于全局数组)或未定义(对于局部数组)。例如:

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

    java 复制代码
    int[] arr = {1, 2, 3};  // 未初始化的元素为0

数组边界检查

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

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

    java 复制代码
    int[] arr = new int[5];
    arr[10] = 1;  // 抛出ArrayIndexOutOfBoundsException

总结:

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

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

相关推荐
尘世壹俗人几秒前
Java如何向http/https接口发出请求
java·http·https
菜还不练就废了1 分钟前
蓝桥杯c/c++需要掌握的基础语法总结
c语言·c++·蓝桥杯
离别又见离别5 分钟前
vue3-sfc-loader 加载远程.vue文件(sfc)案例
java·前端·vue.js
Jackilina_Stone9 分钟前
【QNX】QNX侧查看内存信息的方法
学习
web1478621072310 分钟前
海康威视摄像头ISUP(原EHOME协议) 摄像头实时预览springboot 版本java实现,并可以在浏览器vue前端播放(附带源码)
java·前端·spring boot
FG.17 分钟前
分布式搜索引擎02
java·分布式·搜索引擎
是阿建吖!25 分钟前
【Linux】多线程(二)
linux·c语言·c++
隼玉29 分钟前
【STM32-学习笔记-15-】MAX7219点阵屏模块
c语言·笔记·stm32·学习
铁头乔1 小时前
Java 中如何使用 SSL 连接 IoTDB
java·数据库·开源·ssl·时序数据库·iotdb
Y编程小白1 小时前
Vue2.0的安装
java·vue