【Java开发指南 | 第十九篇】Java方法

简介: 【Java开发指南 | 第十九篇】Java方法

Java方法

方法的定义

在Java中,方法是一段代码块,用于执行特定的任务或操作。方法包含了一系列语句,可以被其他代码多次调用。方法通常用于组织代码,提高代码的重用性和可读性。


方法的语法

修饰符 返回值类型 方法名(参数类型 参数名){
    ...
    方法体
    ...
    return 返回值;

}


修饰符(Modifiers):


修饰符是可选的,用于控制方法的访问权限和其他特性。常见的修饰符包括:

public:表示该方法可以被任何类访问。

private:表示该方法只能被同一个类内部的其他方法访问。

protected:表示该方法可以被同一包内的类及其子类访问。

static:表示该方法属于类而不是实例,可以通过类名直接调用。

final:表示该方法不能被子类重写。

abstract:表示该方法没有实现,必须在子类中被实现。

等等…

返回值类型(Return Type):


返回值类型指定了方法执行后的返回结果的数据类型。如果方法不返回任何值,则返回类型为 void。

如果方法有返回值,则必须在方法体中使用 return 语句返回相应的值。

如果方法声明了返回值类型但是没有在方法体中使用 return 返回值,则编译器会报错。

方法名(Method Name):


方法名是用来标识方法的名称,其他代码可以通过方法名来调用该方法。

方法名应该符合Java的命名规范,通常采用驼峰命名法。

参数类型(Parameter Types):


方法可以接受零个或多个参数,参数类型指定了每个参数的数据类型。

参数列表是包含在圆括号内的,多个参数之间使用逗号分隔。

方法体(Method Body):


方法体是方法的实际实现,包含了一系列语句,用于执行特定的任务或操作。

方法体位于花括号 {} 内,其中的语句会按顺序执行。

方法的类型

1、静态方法(Static Method):使用 static 关键字修饰的方法,可以直接通过类名调用,无需实例化对象。


public class Ice{
  public static void a()
  {
  System.out.println("ice");
  }
  public static void main(String[] args)
  {
  //调用静态方法,无需实例化对象
  Ice.a();
  }
}



2、实例方法(Instance Method):没有使用 static 关键字修饰的方法,必须通过类的实例对象调用。


public class Ice{
  public void a()
  {
  System.out.println("ice");
  }
  public static void main(String[] args)
  {
  //创建实例对象
  Ice b = new Ice();
  //调用实例方法,需要使用实例对象
  b.a();
  }
}


方法的调用

当方法返回一个值的时候,方法调用通常被当做一个值。


public class Ice{
  public static int a()
  {
  return 1;
  }//方法返回一个值
  public static void main(String[] args)
  {
  int b = Ice.a();
  System.out.println(b);
  }
}



如果方法返回值是void,方法调用一定是一条语句。


public class Ice{
  public static void a()
  {
  System.out.println("ice ice");
  }//方法返回void
  public static void main(String[] args)
  {
  Ice b = new Ice();
  b.a();
  }
}



方法的重载

先看该例:


public class Ice{
  public static int max(int num1,int num2)
  {
  if(num1>num2)
    return num1;
  else
    return num2;
  }
  public static void main(String[] args)
  {
  int b=Ice.max(5, 1);
  System.out.println(b);
  }
}



上面代码使用的max方法仅仅适用于int型数据。但如果我们想得到两个浮点类型数据的最大值呢?


解决方法是创建另一个有相同名字但参数不同的方法(一个类的两个方法拥有相同的名字,但是有不同的参数列表),如下面代码所示:


public class Ice {
    public static int max(int num1, int num2) {
        if (num1 > num2)
            return num1;
        else
            return num2;
    }
   
    // 方法重载,接受 double 类型的参数
    public static double max(double num1, double num2) {
        if (num1 > num2)
            return num1;
        else
            return num2;
    }
    public static void main(String[] args) {
        int b1 = Ice.max(5, 1); // 调用第一个 max 方法
        System.out.println(b1);
        double b2 = Ice.max(3.5, 4.2); // 调用第二个 max 方法
        System.out.println(b2);
    }
}


如果我们调用max方法时传递的是int型参数,则int型参数的max方法就会被调用;如果传递的是double型参数,则double类型的max方法体会被调用,这就是方法重载。


构造方法

构造方法是一种特殊类型的方法,用于在创建对象时进行初始化操作。它与类同名,没有返回类型(甚至不是 void),并且在创建对象时由 Java 虚拟机自动调用。


语法结构:
public class ClassName {//类名
        // 构造方法定义
    public ClassName(/* 参数列表 */) {
        // 构造方法体
    }
    // 其他成员方法和属性
}


构造方法的语法结构包括:


访问修饰符:通常为 public,用于控制该构造方法的访问权限。

方法名:与类名相同。

参数列表:可以有零个或多个参数,用于在创建对象时传递初始化信息。

构造方法体:包含在大括号 {} 内的代码块,用于执行初始化操作。

示例如下:


public class Ice{
  //属性
  private String size;
  private int year;
  //构造方法,用于初始化 Ice 对象的属性
  public Ice(String size,int year)
  {
  this.size=size;
  this.year=year;
  }
  //方法
  public void a()
  {
  System.out.println("size:"+size);
  System.out.println("year:"+year);
  }
  public static void main(String[] args)
  {
  //创建对象并初始化
  Ice aa=new Ice("mideum",7);
  aa.a();
  }
}



方法之可变参数

JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法。


方法的可变参数的声明如下所示:

typeName... parameterName

参数类型...参数名



public class Ice
{
    //输出数组中最大值
  public static void max(double...numbers)
  {
  double max1=numbers[0];
  for(int i=1;i
  {
    if(numbers[i]>max1)
    max1=numbers[i];
  }
  System.out.println(max1);
  }
  //调用
  public static void main(String[] args)
  {
  max(12,32,21,6.3);
  max(new double[]{1,1.2,2.2});
  }
}


由于max方法的参数类型是double,若代码改为float[],则将产生类型不匹配的错误:



**注意:**在Java中,一个方法只能有一个可变参数,并且这个可变参数必须是方法参数列表中的最后一个参数。


示例:


//正常工作的代码示例
public class Ice
{
  public static void max(int a,double...numbers)
  {
  double max1=numbers[0];
  for(int i=1;i
  {
    if(numbers[i]>max1)
    max1=numbers[i];
  }
  if(a>max1)
  //第一个数与后面最大的一个进行比较
    System.out.println(a);
  else
    System.out.println(max1);
  }
  public static void main(String[] args)
  {
  max(122,32,21,6.3);//122>32,输出122
  max(12,32,21,6.3);//12<32,输出32.0
  }
}



倘若我将代码变为:


public static void max(int a,double...numbers)


则产生如下报错



这是因为在调用方法时,可变参数可以接受任意数量的参数,包括零个参数,因此它会"吞噬"掉方法参数列表中的所有参数,导致后续参数无法被准确定位。



目录
相关文章
|
5月前
|
前端开发 JavaScript Java
Java 开发中 Swing 界面嵌入浏览器实现方法详解
摘要:Java中嵌入浏览器可通过多种技术实现:1) JCEF框架利用Chromium内核,适合复杂网页;2) JEditorPane组件支持简单HTML显示,但功能有限;3) DJNativeSwing-SWT可内嵌浏览器,需特定内核支持;4) JavaFX WebView结合Swing可完美支持现代网页技术。每种方案各有特点,开发者需根据项目需求选择合适方法,如JCEF适合高性能要求,JEditorPane适合简单展示。(149字)
568 1
|
2月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
249 18
|
2月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
203 4
|
3月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
149 11
|
2月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
309 5
|
3月前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
4月前
|
算法 Java 开发者
Java 项目实战数字华容道与石头迷阵游戏开发详解及实战方法
本文介绍了使用Java实现数字华容道和石头迷阵游戏的技术方案与应用实例,涵盖GUI界面设计、二维数组操作、游戏逻辑控制及自动解法算法(如A*),适合Java开发者学习游戏开发技巧。
308 46
|
5月前
|
Java 索引
Java ArrayList中的常见删除操作及方法详解。
通过这些方法,Java `ArrayList` 提供了灵活而强大的操作来处理元素的移除,这些方法能够满足不同场景下的需求。
541 30
|
4月前
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
410 0
|
5月前
|
安全 Java API
Java 17 及以上版本核心特性在现代开发实践中的深度应用与高效实践方法 Java 开发实践
本项目以“学生成绩管理系统”为例,深入实践Java 17+核心特性与现代开发技术。采用Spring Boot 3.1、WebFlux、R2DBC等构建响应式应用,结合Record类、模式匹配、Stream优化等新特性提升代码质量。涵盖容器化部署(Docker)、自动化测试、性能优化及安全加固,全面展示Java最新技术在实际项目中的应用,助力开发者掌握现代化Java开发方法。
249 1