【原】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) ...
随机推荐
- 解决git pull出现: Your local changes to the following files would be overwritten by merge: ...的问题
今天在服务器上git pull是出现以下错误: error: Your local changes to the following files would be overwritten by mer ...
- Intent简介-Android开发
一.Intent介绍: Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述 ...
- Django中的模板渲染是什么
首先建立一个页面 在views.py中增加一个方法 配置URL 如何实现的呢 这就是渲染,传递的数据不同显示的数据也不同.Django里的渲染引擎和Jinja的虽然不同但是语法基本通用.现在明白什么叫 ...
- PHP自动加载机制
类的载入共经历了三个阶段 第一阶段是面向过程式的做法,整个项目里到处都是include或require. 问题:难看,不易维护. . 第二阶段是魔术方法__autoload,当new一个类的时候,如果 ...
- ES6躬行记(12)——数组
ES6为数组添加了多个新方法,既对它的功能进行了强化,也消除了容易产生歧义的语法. 一.静态方法 1)of() ES6为Array对象新增的第一个静态方法是of(),用于创建数组,它能接收任意个参数, ...
- 域名注册域名解析域名绑定 dns服务器解析 域名记录的添加 记录类型含义@ www 访问域名请求过程
创建一个web应用,简言之就是访问一个域名,可以到达一个地方,这个地方就是你存放供别人查看的文件的地方 就像一条绳,从这头拉一下,可以拉出来另一头的东西 主要有两个部分: 域名 虚拟主机(空间) 1. ...
- Spring Boot(十二)单元测试JUnit
一.介绍 JUnit是一款优秀的开源Java单元测试框架,也是目前使用率最高最流行的测试框架,开发工具Eclipse和IDEA对JUnit都有很好的支持,JUnit主要用于白盒测试和回归测试. 白盒测 ...
- Spring Boot (七)MyBatis代码自动生成和辅助插件
一.简介 1.1 MyBatis Generator介绍 MyBatis Generator 是MyBatis 官方出品的一款,用来自动生成MyBatis的 mapper.dao.entity 的框架 ...
- 【转载】ASP.NET中Server.MapPath方法获取网站根目录总结
在ASP.NET网站应用程序中,可以通过Server.MapPath方法来获取跟服务器有关的目录信息,如获取网站的根目录.获取当前代码文件所在的目录路径.获取当前代码所在路径的上级路径等.Server ...
- 【转载】C#处理空格和换行
使用C#处理字符串是一个常见的情况,当字符串中含有空格或者换行符号的时候,如果业务需要,我们可以通过相应的方法将之处理掉,处理成不含空格和换行符号的字符串,处理的过程使用到正则表达式. 具体函数处理的 ...