【原】Java学习笔记008 - 方法(函数)
package cn.temptation;
public class Sample01 {
public static void main(String[] args) {
// 方法/函数 Method/Function
// 为什么会出现方法?
// 原因1、在程序中多处出现相同的语句内容
// 原因2、会发生变化
// 【只有变化是不变的】
// 回顾一下变量,为了应对变化,提出的新的机制
// 需要对变化进行封装处理,在这里就是要对一系列的语句进行封装,得到方法的概念
// 【方法的封装性】
// 方法的格式:
// 访问修饰符 返回类型 方法名(参数类型1 参数名1, 参数类型2 参数名2, ..., 参数类型n 参数名n) {
// 方法体内各种执行语句;
// return 返回值; // return语句用于有返回类型的场合
// }
// 1、访问修饰符:public static(公开的静态的)
// 2、返回类型:① 无返回的 void;② 有返回的
// 3、方法名:方法的名称,在方法被调用时使用
// 4、方法名后的括号里可以有参数列表(有参),也可以没有参数列表(无参)
// 5、参数列表:参数类型1 参数名1, 参数类型2 参数名2, ..., 参数类型n 参数名n
// 【方法的使用原则:不调用,不执行】
// 方法的调用形式:方法名(参数列表);
// 做输出的事情
// System.out.println("天气不太好");
//// System.out.println("网络不太好");
// System.out.println("网络现在太好");
// 把对语句的使用,替换为对方法的调用
show();
// 做了一些其他的事情
// ...
// 做输出的事情
// System.out.println("天气不太好");
//// System.out.println("网络不太好");
// System.out.println("网络现在太好");
// 把对语句的使用,替换为对方法的调用
show();
// 做了一些其他的事情
// ...
// 做输出的事情
// System.out.println("天气不太好");
//// System.out.println("网络不太好");
// System.out.println("网络现在太好");
// 把对语句的使用,替换为对方法的调用
show();
}
// 在和主函数main同级的位置,制作方法
public static void show() {
// 做输出的事情
System.out.println("天气不太好");
// 当语句发生变化时,使用方法后,不需要对方法的调用发生修改,只需要修改一下方法中的语句即可
// System.out.println("网络不太好");
System.out.println("网络现在太好");
// void无返回的方法中,写上return语句也可以,但是return无任何类型的返回值
// return;
// 语法错误:Void methods cannot return a value,不能返回一个具体数据类型的结果
// return true;
}
}
package cn.temptation;
public class Sample02 {
public static void main(String[] args) {
// 1、方法在某一个类的内部的
// 2、在称呼上,方法 和 函数 其实是一个意思
// 3、做事情时,不要强求在一个方法内全部做完,不同的方法做不同的事情
// 方法对内封装语句,体现了它的【封装性】
// 方法对外到处被调用,体现了它的【复用性】
}
/**
* 方法名:显示方法的名称
* 方法用途:用于显示方法的用途
* 方法返回值:无
* 方法参数名:无
* 方法创建人:张三
* 方法创建时间:YYYY.MM.DD
* 方法修改人:李四
* 方法修改时间:YYYY.MM.DD
* 方法修改内容:.....
*/
public static void show() {
}
}
// 语法错误:Syntax error on token "}", delete this token
// 语法错误:Syntax error, insert "}" to complete ClassBody
//public static void showOther() {
//
//}
package cn.temptation;
public class Sample03 {
public static void main(String[] args) {
// 注意:
// 1、方法是不能嵌套方法的,方法和方法之间是平级的
// 2、方法名及参数列表均相同的方法是不能被定义的
// 语法错误:Illegal modifier for parameter show; only final is permitted
// public static void show() {
//
// }
}
public static void show() {
}
// 语法错误:Duplicate method show() in type
// public static void show() {
//
// }
}
package cn.temptation;
public class Sample04 {
public static void main(String[] args) {
// 调用无返回值的方法
// add();
// 调用有返回值的方法
// 注意:返回值是什么数据类型的值,在调用并接收的地方就要声明什么数据类型的变量来进行接收
// 定义局部变量result,在方法中定义的局部变量只能在该方法中使用,超出该方法无法访问。
// 所以主函数中定义的局部变量 和 同级方法中定义的局部变量,虽然同名同类型,但是互相不受影响
int result = add();
// 打印出结果
System.out.println(result);
}
// 需求:制作一个无返回值的方法,计算两个数的和
// public static void add() {
// int i = 2;
// int j = 3;
//
// int result = i + j;
//
// // 直接打印出结果
// System.out.println(result);
// }
// 需求:制作一个有返回值的方法,计算两个数的和(考虑到计算归计算,打印归打印)
public static int add() {
int i = 2;
int j = 3;
// 定义局部变量result,在方法中定义的局部变量只能在该方法中使用,超出该方法无法访问
int result = i + j;
// 如果没有写return语句,会产生语法错误:This method must return a result of type int
return result;
}
}
package cn.temptation;
public class Sample05 {
public static void main(String[] args) {
// 有参方法的调用
// 方法的参数:根据方法是被定义还是被调用,将方法的参数分为两种
// 1、形参:形式参数,用于方法定义时,起站位表明参数类型的作用
// 2、实参:实际参数,用于方法调用时,不用加上参数类型
// 注意:形参和实参的数据类型要一致
int result = add(2, 3);
// 实参不需要加上数据类型,加上会有语法错误
// int result = add(int 2, int 3);
System.out.println(result);
}
// 定义方法
public static int add(int i, int j) {
// 方法内部就可以使用形参来做加法的操作
int result = i + j;
return result;
}
}
package cn.temptation;
public class Sample06 {
public static void main(String[] args) {
// 使用方法时需要注意的问题:
// 1、方法的定义
// ① 方法的返回值类型(输出)
// ② 方法的参数列表(输入)
// 2、方法的调用
// 方法的调用形式
// 1、直接调用:一般用于无返回值的方法
// 2、赋值调用:在调用方法的地方,声明一个和方法返回值类型相同的变量,用以接收方法的返回值(一般用于有返回值的方法)
// 3、输出调用:本质上就是拿着方法的返回值作为输出语句的方法的实参使用
// 直接调用
test1();
// 赋值调用
int result = test2();
System.out.println(result);
// 输出调用
System.out.println(test2());
}
public static void test1() {
System.out.println("直接调用的方法");
}
public static int test2() {
System.out.println("有返回值的方法");
return 123;
}
}
package cn.temptation;
import java.util.Scanner;
public class Sample07 {
public static void main(String[] args) {
// 需求:制作方法,接收用户键盘录入,判断输入的两个数字哪个大?
// 制作方法时,关注点在方法的返回值类型 和 参数列表上
// 好的方法都不是一蹴而就的,是不断提炼出来的
Scanner input = new Scanner(System.in);
System.out.println("输入一个数字:");
int i = input.nextInt();
System.out.println("再输入一个数字:");
int j = input.nextInt();
input.close();
// 调用方法,传递实参
int result = max(i, j);
System.out.println("两个数:" + i + "和" + j + "中较大的数为:" + result);
}
// 根据输入的数进行比较
public static int max(int i, int j) {
// 定义一个变量
int max = 0;
if (i > j) {
max = i;
} else {
max = j;
}
return max;
}
}
package cn.temptation;
import java.util.Scanner;
public class Sample08 {
public static void main(String[] args) {
// 需求:制作一个方法,判断输入的两个数是否相等
Scanner input = new Scanner(System.in);
System.out.println("输入一个数字:");
int i = input.nextInt();
System.out.println("再输入一个数字:");
int j = input.nextInt();
input.close();
// 调用方法
if (compare(i, j)) {
System.out.println("两数相等");
} else {
System.out.println("两数不等");
}
}
// 制作方法,比较两个数是否相同
public static boolean compare(int i, int j) {
// 定义一个是否相同的标识
// boolean flag = true;
// 写法1
// if (i - j == 0) {
// flag = true;
// } else {
// flag = false;
// }
// 写法2
// if (i == j) {
// flag = true;
// } else {
// flag = false;
// }
// 写法3
// if (i - j != 0) {
// flag = false;
// }
// 写法4
// if (i != j) {
// flag = false;
// }
//
// return flag;
// 写法5
// flag = (i == j) ? true : false;
// return flag;
// 写法6
return i == j;
}
}
package cn.temptation;
import java.util.Scanner;
public class Sample09 {
public static void main(String[] args) {
// 需求:制作方法,获取三个数中最大的一个
Scanner input = new Scanner(System.in);
System.out.println("输入第一个数字:");
int i = input.nextInt();
System.out.println("输入第二个数字:");
int j = input.nextInt();
System.out.println("输入第三个数字:");
int k = input.nextInt();
input.close();
// 调用方法
int result = max(i, j, k);
System.out.println("最大的数为:" + result);
}
// 比较三个数中最大的一个
public static int max(int i, int j, int k) {
// 定义一个变量max
int max = 0;
// 写法1
// if (i > j) {
// if (i > k) {
// max = i;
// } else {
// max = k;
// }
// } else {
// if (j > k) {
// max = j;
// } else {
// max = k;
// }
// }
// 写法2
int tempMax = (i > j) ? i : j;
max = (tempMax > k) ? tempMax : k;
return max;
}
}
package cn.temptation;
public class Sample10 {
public static void main(String[] args) {
// 方法的重载(英文:Overload)
// 定义:方法名相同、参数列表不同的一系列方法称为方法的重载
System.out.println(add(2, 3));
System.out.println(add(4, 5, 6));
}
// 需求:制作一个方法,操作两个数相加
public static int add1(int i, int j) {
int result = i + j;
return result;
}
// 需求:制作一个方法,操作三个数相加
public static int add2(int i, int j, int k) {
int result = i + j + k;
return result;
}
// 需求:制作一个方法,操作四个数相加...
// 既然这些方法做的都是数字相加的事情,考虑使用相同的方法名add
// 需求:制作一个方法,操作两个数相加
public static int add(int i, int j) {
int result = i + j;
return result;
}
// 需求:制作一个方法,操作三个数相加
public static int add(int i, int j, int k) {
int result = i + j + k;
return result;
}
}
package cn.temptation;
public class Sample11 {
public static void main(String[] args) {
// 方法重载的注意点:
// 1、方法名需要相同
// 2、方法的参数列表必须不同,包括参数的类型或个数,以此区分不同的方法
// ① 如果参数个数不同,不用考虑参数类型
// ②如果参数个数相同,需要考虑参数的类型 或 参数的顺序必须不同
// 3、方法的返回值类型、访问修饰符可以相同,也可以不相同
}
public static void show(int i, int j) {
}
public static void show(int i, double j) {
}
// 参数个数相同,参数类型相同,但是参数名不同的方法不是重载方法
// 语法错误:Duplicate method show(int, int) in type
// public static void show(int a, int b) {
//
// }
public static void show(int i, int j, int k) {
}
// 和第二个方法参数个数相同、类型相同,但是顺序不同,也是重载方法
public static void show(double j, int i) {
}
// 和第一个方法参数列表相同,但是无法区分参数顺序是否不同,所以产生语法错误
// 语法错误:Duplicate method show(int, int) in type
// public static void show(int j, int i) {
//
// }
// 虽然返回值类型和其他重载方法不同,但是并不影响是重载方法
public static boolean show(int i) {
return true;
}
// 和第一个方法参数列表相同,但是返回值类型不同,这也无法区分,有语法错误
// 语法错误:Duplicate method show(int, int) in type
// public static boolean show(int i, int j) {
// return false;
// }
}
package cn.temptation;
public class Sample12 {
public static void main(String[] args) {
// 方法调用时,匹配参数的数据类型,优先选择参数类型完全匹配的重载方法
System.out.println(test(3, 4));
// System.out.println(test(3.4, 4.5));
// 注释掉重载方法1、5,保留重载方法2、3、4时有语法错误
// The method test(double, double) is ambiguous for the type
// 注释掉重载方法1、2、5,保留重载方法3、4时有语法错误
// The method test(int, double) is ambiguous for the type
// 注释掉重载方法1、2、3、4,保留重载方法5时有语法错误
// The method test() in the type Sample12 is not applicable for the arguments (int, int)
// 调用方法重载时,参数匹配规则:
// 1、如果有参数类型完全匹配的重载方法,会自动选择该重载方法
// 2、如果没有参数类型完全匹配的重载方法,首先会去匹配部分匹配的重载方法
// 注意:如果有多个部分匹配程度一致的重载方法,会ambiguous for the type语法错误,因为无法选择
// 3、如果只有一个参数类型不匹配的方法,这时也就不用谈什么重载了,观察形参的数据类型和实参的数据类型,如果形参的数据类型可以包含实参的数据类型就不会出错
}
// 重载方法1
public static int test(int i, int j) {
return 1;
}
// 重载方法2
// public static int test(double i, double j) {
// return 2;
// }
// 重载方法3
// public static int test(int i, double j) {
// return 3;
// }
// 重载方法4
// public static int test(double i, int j) {
// return 4;
// }
// 重载方法5
// public static int test() {
// return 5;
// }
// 重载方法6
public static int test(long a, long b) {
return 6;
}
}
【原】Java学习笔记008 - 方法(函数)的更多相关文章
- Java学习笔记之---方法和数组
Java学习笔记之---方法与数组 (一)方法 (1)什么是方法? 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 (2)方法的优点 使程序变得更简短而 ...
- 0019 Java学习笔记-面向对象-方法
方法属于谁 方法要么属于类,要么属于对象 static修饰的方法属于类 没有static修饰的方法属于对象 方法只能定义在类里面,不能独立定义 不能独立的执行方法,要么通过类调用,要么通过方法调用 一 ...
- C#学习笔记_06_方法&函数
06_方法&函数 方法的定义 方法就是一个功能的集合,可以把程序中某段具有特殊功能的代码提取出来: 声明方法 [ 访问权限修饰符 ] [ 其他的修饰符 ] 返回值类型 方法名 ( [形参列表] ...
- Java学习笔记之方法重载,动态方法调度和抽象类
一.方法重载 如果子类中的方法与它的超类中的方法有相同的方法名,则称子类中的方法重载超类中的方法,特别是当超类和子类中的方法名和参数类型都相同时,在子类中调用该方法时,超类中的方法会被隐藏.考虑下面程 ...
- Java学习笔记之方法重载
被重载的方法必须具有不同的参数列表.不能基于不同修饰符或返回值类型来重载方法. package welcome; public class TestMethodOverloading { public ...
- Java学习笔记之——方法重载
方法重载: overload 1. 方法签名 组成:方法名(参数列表) 参数列表不同分为哪些情况? (1)有无参数 (2)参数的类型 (3)参数的个数 (4)参数的顺序(前提是类型不一样) 2.方法重 ...
- java学习笔记5(方法)
方法: 1.如何创建方法 修饰符 返回值类型 方法名(参数){被封装的代码段} 2.方法的定义和使用的注意事项: a:方法不能定义在另一个方法里面: b:方法 名字和方法的参数列表,定义和调用时 ...
- Java学习笔记day05_方法重载
1.方法的重载overload 在同一个类中, 允许出现同名的方法, 只要方法的参数列表不同即可. 参数列表不同: 参数个数不同, 参数类型不同, 顺序不同. public class MethodO ...
- Java 学习笔记之 方法内的临时变量是线程安全
方法内的临时变量是线程安全: 方法内部的私有变量,是线程安全的. public class HasSelfPrivateNum { public void addI(String username) ...
随机推荐
- 使用google搜索时的10个小技巧!
为大家分享一些google的技巧,很多工作了好几年的同学还不知道如何高效的利用这些技巧,希望同学们掌握!此为google的技巧,百度现在也基本上都实现了这些功能. 使用搜索引擎的10个搜索技巧 ...
- C# listview展示表格格式
有时候我们需要展示表格格式的数据,首先想到的是用datagridview控件,比如更改datagridview某一行的数据,这样操作起来就比较麻烦,而listview属于轻量级,刷新和更改相对来说效率 ...
- .NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入
作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9998021.html 写在前面 上篇文章我给大家讲解了ASP.NET Core的概念及为什么使用它,接着 ...
- WebApi系列~对HttpClient的响应流进行解压
回到目录 有时我们的请求头为ContentEncoding添加了gzip进行了压缩,而服务端返回数据时也会对它进行gzip压缩,如果在这种情况下,你直接头响应流会是乱码,而必须先进行压缩,大叔将这块的 ...
- Redis Windows 64位下安装Redis详细教程
Windows Redis 下载地址:点击打开链接https://github.com/MicrosoftArchive/redis/releases 点击打开链接 文件介绍 redis-benchm ...
- 分析core,是从案发现场,推导案发经过
分析core不是一件容易的事情.试想,一个系统运行了很长一段时间,在这段时间里,系统会积累大量正常.甚至不正常的状态.这个时候如果系统突然出现了一个问题,那这个问题十有八九跟长时间积累下来的状态有关系 ...
- SpringBoot基础系列-使用Profiles
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9996884.html SpringBoot基础系列-使用Profile 概述 Profi ...
- [Redux] redux之combineReducers
combineReducers combineReducer 是将众多的 reducer 合成通过键值映射的对象,并且返回一个 combination 函数传入到 createStore 中 合并后的 ...
- 测试一波SpringBoot的HTTP吞吐量
本来,其实就我个人而言现在很少去弄性能这一块的阵地了,主要在做设计与架构,不过前几天刚刚关注公众号的罗哥给我抛了关于性能方面的问题. 一个问题立马引起了我的兴趣,太久没弄性能方面的事情了,所以在隔天有 ...
- Java学习笔记之——TreeMap
TreeMap: 特点:存储时,按照键排序 底层使用一个红黑树,特殊的而二叉树 排序跟comparable,comparator有关系 如果需要在添加时进行排序,使用hashMap即可 构造方法: T ...