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. OptimalSolution(2)--二叉树问题(2)BST、BBT、BSBT

    一.判断二叉树是否为平衡二叉树(时间复杂度O(N)) 平衡二叉树就是:要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过1. 解法:整个过程为二叉树的后序遍历.对任何一个节点node来说, ...

  2. Vue运用

    目录结构: ├── README.md 项目介绍 ├── index.html 入口页面 ├── build 构建脚本目录 │   ├── build-server.js 运行本地构建服务器,可以访问 ...

  3. python中@property装饰器的使用

    目录 python中@property装饰器的使用 1.引出问题 2.初步改善 3.使用@property 4.解析@property 5.总结 python中@property装饰器的使用 1.引出 ...

  4. USACO 07DEC 道路建设(Building Roads)

    Farmer John had just acquired several new farms! He wants to connect the farms with roads so that he ...

  5. ArcGIS Engine连接ArcSDE SQL Server(获得所有SDE图层)

    ArcSDE是ESRI公司推出的基于SDE技术的空间数据库解决方案,它是在现有的关系或对象关系型数据库管理系统的基础上进行应用扩展,可以将空间数据和非空间数据存储在目前绝大多数商用DBMS中,享受商用 ...

  6. [2018-07-4] django笔记

    新建app python ..\venv\scripts\django-admin.py startapp cy python manage.py makemigrations python mana ...

  7. [考试反思]1017csp-s模拟测试77(lrd day1) :反抗

    说在前面:强烈谴责AK神Mr_zkt没有丝毫素质RP-- 然而我也想没素质一次,但是我没机会AK一套除了B组题以外的题... 太菜了,没权力.人家AK了人家就是牛逼你没话说 达哥的题必须好好写反思. ...

  8. 大数据之路week01--day02我实在时被继承super这些东西搞的头疼,今天来好好整理以下。

    这一周的第一天的内容是面向对象的封装,以及对方法的调用.实在时没法单独拿出来单说,就结合这一节一起说了. 我实在是被继承中的super用法给弄的有点晕,程序总是不能按照我想的那样,不是说结果,而是实现 ...

  9. php 下载图片并打包成Zip格式压缩包

    前言:最近公司有个需要下载多个图片并打包成压缩包的需求,下面来看看具体是怎么做的 1.没什么说的,懒得说啥,直接看代码 /** * 下载图片并生成压缩包 * @param $data 图片数组,一维 ...

  10. 实现 call、apply、bind

    实现 call.apply.bind 在之前一篇文章写了这三个参数的区别,但是其实面试更常考察如何实现.其实所有的原生函数的 polyfill 如何实现,只需要考虑 4 点即可: 基本功能 原型 th ...