Java方法之定义形式及可变参数

Java中的方法类似于面向过程程序设计中的函数,但与其不同的是,Java中的方法不能独立存在,它属于类或对象。既然方法属于类或对象,那么,方法的调用者就必须是类或对象。(当然,之后将会提到的同一个类中方法互相调用,实际上也是类或对象在作为调用者)

还是先上一段代码:

package com.my.pac05;

/**
* @author Summerday
* @date 2019/12/1 15:30
*/
public class MethodTest {
public static void main(String[] args) {
//通过类直接调用static修饰的first()方法
MethodTest.first();
//MethodTest.second();错误
//方法由static修饰,可以通过类直接调用static修饰的方法
//创建实例对象,访问没有static修饰的普通方法
MethodTest method = new MethodTest();
method.second();
//接收secondVal方法的返回值
int secondValue = method.secondVal();
System.out.println(secondValue);//10 method.third(2);
//接收thirdVal方法的返回值
int thirdValue = method.thirdVal(20);
System.out.println(thirdValue);//20 method.fourth('a', 'b');
method.fifth("hello","what's","your","name");
System.out.println();
method.sixth(new String[]{"hello","what's","your","name"});
} //static修饰的静态方法
public static void first(){
System.out.println("static: no param...");
}
//无参数(无参无返)
public void second() {
System.out.println("no param..");
}
//无参有返
public int secondVal(){
return 10;
}
//一个参数(有参无返)
public void third(int param1) {
System.out.println("one param.. value is " + param1);
}
//有参有返
public int thirdVal(int param1){
return param1;
}
//两个参数
public void fourth(char param1, char param2) {
System.out.println("two params.. param1 is "
+ param1 + ",param2 is " + param2);
}
//多个参数1
public void fifth(String...params){
System.out.println("*type...param*");
for(String param:params){
System.out.print(param+" ");
}
}
//错误:public void fifth1(String...params,int a )
//多个参数2
public void sixth(String[] params){
System.out.println("*type[] param*");
for(String param:params){
System.out.print(param+" ");
}
}
}

方法调用

使用static修饰的方法

//通过类直接调用static修饰的fourth()方法
MethodTest.first();
//也可以通过创建的对象调用static修饰的方法
method.first();
//static修饰的静态方法
public static void first(){
System.out.println("static: no param...");
}
  • 属于这个类本身。
  • 类和对象都可以调用。
  • 类和对象调用的结果相同。

没有static修饰的方法

//MethodTest.second();错误
//创建实例对象,访问没有static修饰的普通方法
MethodTest method = new MethodTest();
method.second();
//无static修饰的普通方法
public void second() {
System.out.println("no param..");
}
  • 属于类的对象,不属于类本身。
  • 只能由对象作为调用者。
  • 使用不同对象调用同一个方法,结果可能不同。

方法的定义格式

无参无返

//无参无返
public void second() {
System.out.println("no param..");
}

无参有返

 //无参有返
public int secondVal(){
return 10;
}

有参无返

//有参无返
public void third(int param1) {
System.out.println("one param.. value is " + param1);
}

有参有返

 //有参有返
public int thirdVal(int param1){
return param1;
}

形参个数可变的方法

采用数组形参来定义

把数组作为形参加入形参列表中。类似于我们用的最多的public static void main(String[] args)相当于main方法接收一个String类型的数组,也就是命令行参数,关于命令行参数,就暂时不提啦。

//多个参数2
public void sixth(String[] params){
System.out.println("*type[] param*");
for(String param:params){
System.out.print(param+" ");
}
}
  • 只能接收数组。
  • 可以出现在形参列表的任意位置。

采用JDK1.5新特性来定义

JDK1.5之后,可以在最后一个参数类型和参数名之间加上...

 //多个参数1
public void fifth(String...params){
System.out.println("*type...param*");
for(String param:params){
System.out.print(param+" ");
}
}
//需要在最后一个参数类型和参数名之间!!!
//错误:public void fifth1(String...params,int a )
  • 表明可以接收多个参数值,多个参数值被当作数组传入。
  • 传入参数形式可以是多个参数以‘,’相隔,也可以传入数组。
  • 只能处于参数列表之后,所以一个方法中最多只能有一个长度可变的形参。

参考书籍:《疯狂Java》讲义、《Java核心技术卷I》

接下一篇:Java方法之值传递机制

Java方法之定义形式及可变参数的更多相关文章

  1. Java方法的定义以及调用、方法重载、可变参数以及递归

    目录 何谓方法 方法的定义及调用 方法的定义 方法调用 方法重载 命令行传参 可变参数 递归 何谓方法 Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序组合 方法包含于 ...

  2. Java(31)泛型和可变参数

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228443.html 博客主页:https://www.cnblogs.com/testero ...

  3. Java基础系列(31)- 可变参数

    可变参数 JDK1.5开始,Java支持传递同类型的可变参数给一个方法 在方法声明中,在指定参数类型后加一个省略号(...) 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数.任何普通的参数 ...

  4. java学习第16天(补充可变参数)

    如果我们在写方法的时候,参数个数不明确,就应该定义可变参数. 格式: 修饰符 返回值类型 方法名(数据类型... 变量) {} 注意: A:该变量其实是一个数组名 B:如果一个方法有多个参数,并且有可 ...

  5. 编程语言基础:用“收集器”理解各种语言(C++、Java、Python)中的可变参数!

    [C++通常用一种特殊的List收集可变形参,而Java通常用一个数组,Python收集为tuple.dict.] 1.Java中的可变参数的函数:void f(ClassName... object ...

  6. java方法的定义格式

    Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,声明格式为: [修饰符1  修饰符2  …..] 返回值类型  方法名( 形式参数列表 ){ Java 语句;… … … } 例如 ...

  7. JAVA 1.5 局部特性(可变参数/ANNOTATION/并发操作)

    1: 可变参数 可变参数意味着可以对某类型参数进行概括,例如十个INT可以总结为一个INT数组,当然在固定长度情况下用数组是很正常的 这也意味着重点是可变,不定长度的参数 PS1:对于继承和重写我没有 ...

  8. 22.java方法的定义

    java中的方法:就相当于c语言中的函数:sun在开发java的时候,为提高其代码的重复利用率,引入了方法. 什么是方法? 方法就是一段代码片段,这个片段可以完成特定的功能,并且可以重复利用. 从入口 ...

  9. Java | 方法的定义 & 重载 & 递归

    方法 方法就是一段用来完成特定功能的代码片段.   方法用于定义该类或该类的实例的行为特征和功能实现.方法是类和对象行为特征的抽象.在面向对象中,整个程序的基本单位是类,方法是从属于类和对象的. 方法 ...

随机推荐

  1. Ubuntu svn 安装 Rabbitvcs

    先添加源 sudo add-apt-repository ppa:rabbitvcs/ppa 必要的话在源清单里面也添加一下 sudo gedit /etc/apt/sources.list 内容是 ...

  2. day4-01 流程控制

    目录 一.if语法 1.什么是if? 2.语法结构 2.1.if 条件: 2.2.if...else: 2.3.if...elif...else: 2.4.if嵌套 二.循环结构 2.1 什么是循环结 ...

  3. [翻译]Jupyter notebook .NET Core 内核预览1

    当您想到Jupyter Notebooks时,您可能会考虑使用Python,R,Julia或Scala而不是.NET编写代码. 今天,我们很高兴宣布您可以在Jupyter Notebooks中编写.N ...

  4. InfluxDB常见疑问与解答 - 数据写入时如何在表级别指定保留策略

    网友Siguoei:我想让一个库中不同的measurment能够指定不同的保存策略.而不是写入时使用数据库的默认保留策略. Answer:这个特性InfluxDB支持的,写入时序数据时,在行协议前加上 ...

  5. IndentationError: unindent does not match any outer indentation level笔记

    执行一个Python脚本的时候,报"IndentationError: unindent does not match any outer indentation level" 错 ...

  6. 学习笔记48_Memcache跟用户登录模块结合

    public interface ICacheWriter {  void AddCache(string key,object value, DateTime expDate);  void Add ...

  7. 求和:fft,表达式化简

    $f(n)=\sum\limits_{i=0}^{n} \sum\limits_{j=0}^{i} S(i,j) \times 2^j \times j!$ 其中$S(i,j)$为第二类斯特林数,公式 ...

  8. 通过cmd命令查看Python库、函数和模块的帮助文档与介绍

    dir函数式可以查看对象的属性 使用方法很简单,举os类型为例,在Python命令窗口输入 dir(‘os’) 即可查看os模块的属性 打开cmd命令窗口 输入python(注意:计算机需要有Pyth ...

  9. python函数的基本语法<二>

    函数的流程控制: if...else... a = 100 b = 200 if a == 100 and b ==300: print('100,200') elif b == 200: print ...

  10. Rxjava2源码解析

    1:用法: Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer& ...