菜鸡的Java笔记 第六 - java 方法
前提:现在所讲解的方法定义格式,只属于JAVA 方法定义的其中一种组成方式。而完整的组成方式将随着学习逐步渗透。
1.方法的基本定义
方法(Method)在一些书中也会有人将其说是 函数(Function) 。但是两者的含义完全相同的,那什么是方法?为什么需要有方法?实际上所谓的方法指的就是一段代码封装在一个结构体之中,并且可以重复调用。
方法的定义语法原则(本次所讲解的语法指的是在主类中定义的方法,并且由主方法直接调用。)
2.方法调用
java中的方法分为(1)静态方法 直接使用 类名.方法名 调用
(2)普通方法 通过new创建对象 然后使用 对象.方法 调用
public static 返回值类型 方法名称([参数类型 变量,参数类型 变量,...]){
方法中包含的代码;
[return 返回值;]
}
返回值类型可以设置为两种:
JAVA 中的数据类型:基本数据类型,引用数据类型;如果现在有返回的内容则需要通过 retum 返回
不返回任何的结果:void;
方法就是留给用户进行重复调用的。
public class TestDemo{
public static void main(Srting args[]){
printlnfo(); // 调用方法
printlnfo(); // 调用方法
}
public static void printlnfo(){ // 此方法没有参数没有返回值
System.out.println(".........................");
System.out.println("-- Hello World! --");
System.out.println(".........................");
}
}
范例:定义一个可以接收参数的方法
public class TestDemo{
public static void main(Srting args[]){
printlnfo(10); // 调用方法
printlnfo(100); // 调用方法
}
public static void printlnfo(int age){
if(age > 250){
System.out.println("您是人吗?");
}else{
System.out.println("您的年龄是:"+ age);
}
}
}
实际上在进行方法编写的时候有其自己的定义格式:要求定义方法的单词第一个单词字母小写,而后每个单词的首字母大写。
那么以上定义了无参无返回值,有参无返回值的方法,那么下面在来定义有参数有返回值的方法
范例:定义一个加法操作
public class TestDemo{
public static void main(Srting args[]){
int result = add(10,20); // 由于返回的是int型数据,所以可以利用变量接收
System.out.println(result);
System.out.println(add(100,300)); // 直接将方法的返回值输出
}
public static int add(int x,int y){
if(x<0){
return 0; // 只要有返回值类型声明,那么必须使用return 返回
}
if(y<0){
return 0; // 只要有返回值类型声明,那么必须使用return 返回
}
return x + y; // 只要有返回值类型声明,那么必须使用return 返回
}
}
在学习循环语句的时候学习过 break 与 continue语句,这两个语句主要是进行循环控制,合理的利用可以让循环语句之后的代码不在执行,但是必须与 if 判断一起使用。
而同样的操作在方法中也提供,如果说你的方法使用了 void 声明,那么就是可以
在方法执行过程之中直接利用“return”来结束方法调用。
范例:利用return 结束方法调用
public class TestDemo{
public static void main(Srting args[]){
print(10);
print(100);
}
public static void print(int age){ // 此时方法没有返回值
if(age > 250){
return; // 后续代码不再执行,前提:方法必须返回 void
}
System.out.println("年龄是:" + age);
}
}
不管什么情况,只要是在return之后的代码都不再执行,但是需要区分的是,如果方法返回的是 void,那么就可以直接写 return,但是如果方法本身有返回值,那么就必须在编写return的同时返回内容。
return的常用作用有以下两种
一种是返回参数所用的关键字,假如一个有返回值的方法执行完了之后需要返回一个参数,示例:
public string functionTest(){
String a = "abc";
return a;
}
那么这个方法被调用之后就会返回一个值为abc的字符串,string result = functionTest();
第二种用法是,代码执行到此处终止。
比如当代码执行到某个地方会出现几种结果,然后其中一种结果就不能执行后续代码,这时候在那里加上一个return就可以终止后面的代码执行
实际的开发之中是否使用方法有两个决定性的原则:
主方法里的代码是不是太多了,如果多了,可以将其拆分到方法之中;
在你编写代码的过程之中总是在不断的进行复制和粘贴;就可以考虑将这部分代码封装为方法
3. 方法重载(重点)
方法重载指的是方法名称相同,参数的类型或个数不同。为了理解方法重载的意义 要求:
现在要求定义有三个加法操作,包括两个整型相加,三个整型相加,两个小数相加。
public class TestDemo{
public static void main(Srting args[]){
System.out.println("两个整数相加:" + add1(10,20));
System.out.println("三个整数相加:" + add2(10,20,30));
System.out.println("两个小数相加:" + add3(10.2,30.4));
}
public static int add1(int x,int y){
return x+y;
}
public static int add2(int x,int y,int z){
return x + y + z;
}
public static double add3(double x,double y){
return x+y;
}
}
如果说功能相同的方法名字不一样,那么在调用的时候实在是很麻烦的,这种情况下最好的解决方案就是方法重载(像这样有几十个就会很麻烦,要自己去找合适的方法,不过现在可以用方法重载来解决)
范例:利用重载解决
调用重载方法时会根据传递的参数类型以及个数调用不同的方法执行。
public class TestDemo{
public static void main(Srting args[]){
System.out.println("两个整数相加:" + add(10,20));
System.out.println("三个整数相加:" + add(10,20,30));
System.out.println("两个小数相加:" + add(10.2,30.4));
}
public static int add(int x,int y){
return x+y;
}
public static int add(int x,int y,int z){
return x + y + z;
}
public static double add(double x,double y){
return x+y;
}
}
两类操作完成的是同一个功能,但是很明显,在调用的时候利用方法重载的操作会更加简单。
但是在进行方重载的时候有一项重要的说明----关于 返回值的问题。在方法重载的时候本身只规定了参数的类型与个数的不同,但是并没有针对于返回值的类型是否相同进行限制。但是在实际来讲,方法重载时返回值类型一定要相同。
方法重载时返回值类型可以不同,但是从开发的标准来讲应该相同的。
2.3 方法的递归调用
如果以开发中出现的代码为主的画,那么递归操作几乎不会出现,但是如果你要想分析一些开发工具原理的话那么就必须使用递归。递归是迈入数据结构的第一步,但是这并不是说一下子就就可以理解递归,相反,如果真的想理解递归操作,那么可以将本次的代码自己编写50遍以上。
所谓的递归指的是方法自己调用自己的情况。而对于递归操作一般都要满足如下操作。
递归必须在方法上进行
递归中必须有明确的结束条件
递归的过程之中必须进行结束条件的变更。
范例:利用while循环实现一个累加操作。
public class TestDemo{
public static void main(Srting args[]){
int x = 1;
int sum = 0;
while(x <= 100){
sum += x;
x ++;
}
System.out.println(sum);
}
}
那么下面讲此代码修改为递归的调用形式。
public class TestDemo{
public static void main(Srting args[]){
System.out.println(sum(100));
}
public static int sum(int num){ // 进入到方法之中
if(num == 1){ // 已经到了最后一个数据
return 1; // 直接返回1
}
// 100+99+98+...+2+1;
return num + sum(num -1); // 每次修改接收条件
对于此代码的调用分析如下:
第一次调用(主方法调用):retum 100 + sum(99);
第二次调用(sum(99)方法):retum 99 + sum(98);
第三次调用(sum(98)方法):retum 98 + sum(97);
...............................
倒数第二次调用(sum(2)方法):retum 2 + sum(1);
最后一次调用(sum(1)方法):if 判断条件满足,retum 1。
最终变为了:retum 100 +99+98+......+3+2+1(if 语句);
实际上递归操作有一件很可怕的影响:由于其操作所占用的时间(包括内存占用)的时间过长,那么有可能会造成内存的溢出。导致程序出现问题。所以不是必须用到的情况下,不建议使用递归操作。
3.总结
方法的定义结构,但是本次的方法有限制性:只能够在主类中定义由主方法进行调用;
方法的重载:方法名称相同,参数的类型和个数不同,方法重载对返回值类型没有要求,但是一定要统一返回值类型。
菜鸡的Java笔记 第六 - java 方法的更多相关文章
- Java笔记(六)
IO流: 字符流和字节流: 字符流两个基类: InputStream OutputStream 字节流两个基类: Reader Writer FileWriter: import java.io.Fi ...
- java并发系列(六)-----Java并发:volatile关键字解析
在 Java 并发编程中,要想使并发程序能够正确地执行,必须要保证三条原则,即:原子性.可见性和有序性.只要有一条原则没有被保证,就有可能会导致程序运行不正确.volatile关键字 被用来保证可见性 ...
- 【Java笔记】配置文件java.util.Properties类的使用
配置文件的路径:项目名/src/main/resources/mmall.properties mmall.properties的内容是键值对.例如假设写了ftp服务器的一些信息. ftp.serve ...
- Java笔记12:Java对象排序
代码: import java.util.Arrays; import java.util.Comparator; class Person { private String name; privat ...
- 【Java笔记】【Java核心技术卷1】chapter3 D1JavaStandard
package chapter3;/*有包名,命令行编译javac -d . 名字.java(注意空格)运行时用java chapter3.JavaStandard*/ public/*访问修饰符*/ ...
- 菜鸡的Java笔记 第四 - java 基础运算符
数学运算符,逻辑运算,三目运算,位运算 double d2 = 314e2; //采用科学计数法的写法,表示10的2次方.= 31400.0 代码写的越简单越好 简化运算符 代码:x=x+y 可以 ...
- 菜鸡的Java笔记 第十 - java 类与对象
(局部变量需要初始化,全局变量不初始化系统也会帮忙初始化而局部变量系统不会帮忙初始化)>>> 2.1 类与对象基本概念 在现实生活之中,类指的就是具备某一共性的群 ...
- 菜鸡的Java笔记 第二十三 - java 抽象类的概念
abstractClass 抽象类的概念 1.抽象类的基本定义 2.抽象类的使用原则 不会抽象类与接口,java = 没学 ...
- 菜鸡的Java笔记 第八 - java 面向对象
面向对象的特点以及开发过程. java中最大的特点是其支持面向对象编程设计思想.在面向对象之前广泛流传的是面向过程的编程思想,例如:C语言的开发就属于面向过程 如果要想更简单的去理解面向过 ...
随机推荐
- SpringCloud升级之路2020.0.x版-25.OpenFeign简介与使用
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent OpenFeign 的由来和实现思路 在微服务系统中,我们经常会进行 RPC 调用.在 S ...
- mysql8 主从搭建
主:192.168.10.2 从:192.168.10.3 主:1.登录mysql,授权账号,让从数据库可以进行复制. mysql CREATE USER 'repl'@'192.168.10.3' ...
- java 从零开始手写 RPC (04) -序列化
序列化 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何实 ...
- C语言日记① 初识C
概念 c语言是一种计算机语言 也就是人与计算机打交道的语言 在早期,因为计算机使用的二进制 所以早期写代码都是科学家来写的使用对应的功能二进制代码 需要用到手册,所以开发不方便 在后来,人们发明了汇编 ...
- docker-compose 搭建kafka集群
docker-compose搭建kafka集群 下载镜像 1.wurstmeister/zookeeper 2.wurstmeister/kafka 3.sheepkiller/kafka-manag ...
- 中国唯一入选 Forrester 领导者象限,阿里云 Serverless 全球领先
3 月 26 日消息,权威咨询机构 Forrester 发布 2021 年第一季度 FaaS 平台评估报告,阿里云函数计算凭借在产品能力.安全性.战略愿景和市场规模等方面的优势脱颖而出,产品能力位列全 ...
- Schematics Tools(Schematics 工具)
Schematics工具 # Process: 创建逻辑示意图 arcpy.CreateDiagram_schematics("", "", "&qu ...
- SpringBoot-邮件任务
邮件发送,在我们的日常开发中,也非常的多,Springboot也帮我们做了支持 邮件发送需要引入spring-boot-start-mail SpringBoot 自动配置MailSenderAuto ...
- 2021.5.22 vj补题
A - Marks CodeForces - 152A 题意:给出一个学生人数n,每个学生的m个学科成绩(成绩从1到9)没有空格排列给出.在每科中都有成绩最好的人或者并列,求出最好成绩的人数 思路:求 ...
- 2020.11.6-vj补题
A - A CodeForces - 136A 题解:按输入的顺序输出对应的下标即可,定义一个数组,将输入的作为下标,下标为值,最后依次输出即可: #include<bits/stdc++.h& ...