Java方法

何为方法

System.out.println(),那么它是什么呢?

​ System是一个类,out是一个对象,println()是一个方法

Java方法是语句的集合,它们在一起执行的一个功能。

  • 方法是解决一类问题的步骤和有序组合
  • 方法包含于类或对象中
  • 方法在程序中被创建,在其他地方被引用

设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的合集。我们设计方法的时候,最好保持方法的原子性,就是一个方法只能完成一个功能,这样利于我们后期的扩展

回顾:方法的命名规则? 小写字母开头及驼峰原理

例子:写一个运算加法的方法

package com.xiaodi.operator.method;

public class Demo01 {
//main方法
public static void main(String[] args) {
//调用add方法,传参;这个方法如果没有加static是不能这样调用的
int sum = add(9,7);
System.out.println(sum);
} //加法
//在没学习对象之前先使用static,便于调用
//返回值类型int,如果是void就代表不返回东西
//方法的参数,不写死,等一下可以自由传,不过类型要一样
public static int add(int a,int b) {
//return 返回
return a+b;
}
}

执行结果:16

一些分析我写在注释里面了,可以自己用Debug调试一下,看一下16怎么来的


方法的定义及调用

方法的定义

Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含一下语法:

方法包含一个方法头和一个方法体。下面是一个方法的所有部分:

  • 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
  • 返回值类型:方法可能会返回值,returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。这种情况下,returnValue Type 是关键字void。
  • 方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
  • 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型,顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
    • 形式参数:在方法被调用时用于接收外界输入的数据。
    • 实参:调用方法时 实际传给方法的数据。
  • 方法体:方法体包含具体的语句,定义该方法的功能。
修饰符 返回值类型 方法名(参数类型 参数名) {
...
方法体
...
return 返回值;
}

方法存在返回值的情况下,一定要把返回值通过return这个关键字返回出去,如果是void就不用return了。

演示(案例比大小):

package com.xiaodi.operator.method;

public class Demo02 {
public static void main(String[] args) {
//调用max方法,传入参数进行比较
int max = max(2,9);
System.out.println(max);
} //比大小
public static int max(int a,int b) {
int result = 0;
if (a > b) {
result = a;
}else if (a < b) {
result = b;
}else {
System.out.println(a+"=="+b);
return 0; //return除了返回结果的意思,还有一个意思叫终止方法
}
return result;
}
}

return除了返回结果的意思,还有一个意思叫终止方法:意思就是方法执行的过程中遇到return的话那么方法将终止执行

max方法中,建议把二者相等这个判断单独拿出来做判断写在最前面,这样如果相等了直接就碰到return了终止方法,减少资源

方法的调用

调用方法:对象名.方法名(实参列表);

​ 这个我们还没学到对象可能大家还不太了解,记不记得我们之前说加static这个修饰符就不用这么麻烦,我们现在还没学习对象,就先使用static

Java支持两种调用方法的方式,根据方法是否返回值来选择。

  • 当方法返回一个值的时候,方法调用通常被当作一个值。例如:
int larger = max(30, 40);
  • 如果方法没有返回值,也就是返回值是void,方法调用一定是一条语句。例如:
//println是一个方法
System.out.println("Hello,XiaoDi!");

课后拓展 了解:值传递 和 引用传递 (Java是值传递)

方法的好处会随着我们学习的深入,逐渐显现出来!


方法重载

重载就是在一个类中,有相同的函数名称,但形参不同的函数。

方法重载的规则:

  • 方法名称必须相同。
  • 参数列表必须不同(个数不同、或类型不同、参数排序不同)
  • 方法的返回类型也可以相同也可以不相同
  • 仅仅返回类型不同不足以成为方法的重载

实现理论

  • 方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器会报错。

命令行传参(理解一下概念就好)

有时候你希望运行一个程序的时候再传递给它消息。这要靠传递命令行参数给main()函数实现。

args.length:表示这个数组的长度

package com.xiaodi.operator.method;

public class Demo03 {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "]:" + args[i]);
}
}
}

我们去编译它:

​ 到对应文件的目录下(D:\代码\JavaSE\基础语法\src\com\xiaodi\operator\method>javac Demo03.java)

运行:

​ 因为有package com.xiaodi.operator.method;的缘故所以我们要退到com的上一级目录(src)才能运行否则会报错。

​ D:\代码\JavaSE\基础语法\src>java com.xiaodi.operator.method.Demo03 this is xiaodi

返回:

​ args[0]:this

​ args[1]:is

​ args[2]:xiaodi


可变参数

JDK1.5开始,java支持传递同类型的可变参数给一个方法。

在方法声明中,在指定参数类型后加一个省略号(...)。

一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通参数必须在它之前声明。传递的参数必须是一个类型的

它的本质就是我们下一章要讲的数组

理解一下 下面的代码:

package com.xiaodi.operator.method;

public class Demo04 {
public static void main(String[] args) {
text(7, 8, 1, 9, 75);
} public static void text(int... i) {
System.out.println(i[0]);
System.out.println(i[1]);
System.out.println(i[2]);
System.out.println(i[3]);
System.out.println(i[4]);
}
}

i[0]就是数组的第0个值,也就是第1个,java是从0开始计算的。

示例(输出最大的参数):

package com.xiaodi.operator.method;

public class Demo05 {
public static void main(String[] args) {
//调用可变参数的方法
printMax(23, 47, 12, 82, 45, 2);
//传递一组数组
printMax(new double[]{1, 2, 3});
} public static void printMax(double... numbers) {
if (numbers.length == 0) {
System.out.println("没有输入参数!");
return;
}
double result = numbers[0]; //排序
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] > result) {
result = numbers[i];
}
}
System.out.println("Max value:" + result); }
}

输出:

Max value:82.0

Max value:3.0


递归(经常出现在面试的笔试里)

  • A方法调用B方法,我们很容易理解!

  • 递归就是:A方法调用A方法,就是自己调用自己

  • 利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可以描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。

递归结构包含两个部分:

  • 递归头:什么时候不调用自身的方法。如果没有头,将陷入死循环。
  • 递归体:什么时候需要调用自身的方法。

有上过大学的肯定知道阶乘这个东西

阶乘就是:

​ 2! 2x1

​ 3! 3x2x1

​ 5! 5x4x3x2x1

我们使用代码递归的方法实现一下:

package com.xiaodi.operator.method;

public class Demo06 {
public static void main(String[] args) {
System.out.println(f(2));
} public static int f(int n) {
if (n==1) {
return 1;
}else {
return n*f(n-1);
}
}
}

如上代码:

  • 调用f方法求2的阶乘,2不等于1所以走else这条分支,返回 n乘于调用自己本身方法减去当前求的阶乘减去1
  • 现在已知的是n乘为2乘;f(n-1)为f(2-1)为f(1)
  • f(1)走if这条分支,返回 1
  • 所以因为f(n-1)为1
  • 所以2的阶乘为 2*1为1

能不用递归,就不用递归;因为如果遇到基数比较大的时候,非常耗费资源

本章作业:写一个计算器,要求实现加减乘除功能,并且能够循环接收新的数据,通过用户交互实现。

思路推荐:

  • 写4个方法:加减乘除
  • 利用循环+switch进行用户交互
  • 传递需要操作的两个数
  • 输出结果

我相信只要用心去写大家都能写出来的!

六、Java方法的更多相关文章

  1. 菜鸡的Java笔记 第六 - java 方法

    前提:现在所讲解的方法定义格式,只属于JAVA 方法定义的其中一种组成方式.而完整的组成方式将随着学习逐步渗透. 1.方法的基本定义 方法(Method)在一些书中也会有人将其说是  函数(Funct ...

  2. Java语言程序设计(基础篇) 第六章 方法

    第六章 方法 6.2 定义方法 1.方法的定义由方法名称.参数.返回值类型以及方法体组成. 2.定义在方法头中的变量称为形式参数(formal parameter)或者简称为形参(parameter) ...

  3. Hbase深入学习(六) Java操作HBase

    Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...

  4. java方法句柄-----2.方法句柄的获取、变换、特殊方法句柄

    目录 1.获取方法句柄 1.1查找构造方法.一般方法和静态方法的方法句柄 1.2 查找类中的特殊方法(类中的私有方法) 1.3 查找类中静态域和一般域 1.4 通过反射API得到的Constructo ...

  5. 200-Java语言基础-Java编程入门-005 | Java方法定义及使用

    一.方法概述和格式说明 为什么要用方法: 提高代码的复用性 什么是方法: 完成特定功能的代码块 方法的格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {     方 ...

  6. 6.Java方法

    一.什么是方法 方法:要去做某件事情,而采取的一些解决办法( Java 中的方法是完成某些事情的) System.out.println(); //类(系统类) 对象(标准输出对象) 方法(print ...

  7. C++调用JAVA方法详解

    C++调用JAVA方法详解          博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...

  8. JNI中C调用Java方法

    背景需求 我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT v ...

  9. Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针

    Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针   1.1. java方法引用(Method References) 与c#委托与脚本语言js ...

随机推荐

  1. ApacheCN Java 译文集 20211012 更新

    Effective Java 中文第三版 1. 考虑使用静态工厂方法替代构造方法 2. 当构造方法参数过多时使用 builder 模式 3. 使用私有构造方法或枚类实现 Singleton 属性 4. ...

  2. Springboot整合RocketMQ解决分布式事务

    直接上代码: 代码结构如下: 依次贴出相关类: DataSource1Config: package com.example.demo.config;import org.apache.ibatis. ...

  3. linnux命令 - brctl和ifconfig

    1.安装brctl centos7.6安装使用 yum install bridge-utils ubuntu使用 apt-get install bridge-utils 什么是网桥 网桥是一种在链 ...

  4. Plist存储

  5. 认识BufferedReader的readLine、ready,以及InputStream的available

    最近,同学做实验的时候,在读取服务器端返回的时候,使用了BufferedReader类的readLine,他是这么写的,while(reader.ready()) {//执行读取操作,即readLin ...

  6. jdbc插入或查询数据库时间总是比实际时间少8小时原因

    mysql插入数据库的时间总是有问题,比实际时间要早8小时.检查是jdbc连接的url中配置的时区有问题,原先是 jdbc.url=jdbc:mysql://47.**.**.**:3306/yeey ...

  7. 无意进去UIView随笔闹腾着玩 -by 胡 xu

    1 @interface UIView : UIResponder<NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem> ...

  8. DatabaseMetaData

    getColumns public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern ...

  9. [源码解析] 模型并行分布式训练 Megatron (4) --- 如何设置各种并行

    [源码解析] 模型并行分布式训练 Megatron (4) --- 如何设置各种并行 目录 [源码解析] 模型并行分布式训练 Megatron (4) --- 如何设置各种并行 0x00 摘要 0x0 ...

  10. Squid代理服务器应用

    Squid代理服务器应用 目录 Squid代理服务器应用 一.Squid的脚本概念 1. Squid的作用 2. Web代理的工作机制 3. 代理服务器的概念 4. 代理服务器的作用 5. 代理的基本 ...