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 - 方法(函数)的更多相关文章

  1. Java学习笔记之---方法和数组

    Java学习笔记之---方法与数组 (一)方法 (1)什么是方法? 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 (2)方法的优点 使程序变得更简短而 ...

  2. 0019 Java学习笔记-面向对象-方法

    方法属于谁 方法要么属于类,要么属于对象 static修饰的方法属于类 没有static修饰的方法属于对象 方法只能定义在类里面,不能独立定义 不能独立的执行方法,要么通过类调用,要么通过方法调用 一 ...

  3. C#学习笔记_06_方法&函数

    06_方法&函数 方法的定义 方法就是一个功能的集合,可以把程序中某段具有特殊功能的代码提取出来: 声明方法 [ 访问权限修饰符 ] [ 其他的修饰符 ] 返回值类型 方法名 ( [形参列表] ...

  4. Java学习笔记之方法重载,动态方法调度和抽象类

    一.方法重载 如果子类中的方法与它的超类中的方法有相同的方法名,则称子类中的方法重载超类中的方法,特别是当超类和子类中的方法名和参数类型都相同时,在子类中调用该方法时,超类中的方法会被隐藏.考虑下面程 ...

  5. Java学习笔记之方法重载

    被重载的方法必须具有不同的参数列表.不能基于不同修饰符或返回值类型来重载方法. package welcome; public class TestMethodOverloading { public ...

  6. Java学习笔记之——方法重载

    方法重载: overload 1. 方法签名 组成:方法名(参数列表) 参数列表不同分为哪些情况? (1)有无参数 (2)参数的类型 (3)参数的个数 (4)参数的顺序(前提是类型不一样) 2.方法重 ...

  7. java学习笔记5(方法)

    方法: 1.如何创建方法 修饰符   返回值类型  方法名(参数){被封装的代码段} 2.方法的定义和使用的注意事项: a:方法不能定义在另一个方法里面: b:方法 名字和方法的参数列表,定义和调用时 ...

  8. Java学习笔记day05_方法重载

    1.方法的重载overload 在同一个类中, 允许出现同名的方法, 只要方法的参数列表不同即可. 参数列表不同: 参数个数不同, 参数类型不同, 顺序不同. public class MethodO ...

  9. Java 学习笔记之 方法内的临时变量是线程安全

    方法内的临时变量是线程安全: 方法内部的私有变量,是线程安全的. public class HasSelfPrivateNum { public void addI(String username) ...

随机推荐

  1. 武汉软件开发:一看就会的wpf入门教程

    据了解,目前武汉软件开发市场关于PC端桌面开发的技术主要有两块:winform和wpf.wpf是微软既winform之后推出的一套新的桌面开发技术.采用数据驱动的方式可以轻松编写出非常炫的界面. 1. ...

  2. Spring Boot Security

    如图,是一种通用的用户权限模型.一般情况下会有5张表,分别是:用户表,角色表,权限表,用户角色关系表,角色权限对应表. 一般,资源分配时是基于角色的(即,资源访问权限赋给角色,用户通过角色进而拥有权限 ...

  3. SignalR学习笔记(三)Self-Host

    SignalR可以借助Owin摆脱对IIS的依赖,实现Self-Host,使得SignalR有了部署在非Windows平台的可能. 什么是Owin Owin的英文全称是Open Web Interfa ...

  4. asp.net core 系列 13 日志

    一.概述 ASP.NET Core 支持适用于各种内置和第三方日志记录, 供程序的日志记录 API,本文介绍了如何将日志记录 API 与内置提供程序一起使用.对于第三方日志记录提供程序使用,文章最后有 ...

  5. asp.net core 系列 10 配置configuration (上)

    一.  ASP.NET Core 中的配置概述 ASP.NET Core 中的应用配置是基于键值对,由configuration 程序提供. configuration  将从各种配置源提供程序操作键 ...

  6. 【Java基础】【03运算符&if语句】

    03.01_Java语言基础(逻辑运算符的基本用法)(掌握) A:逻辑运算符有哪些 &,|,^,! &&,|| B:案例演示 逻辑运算符的基本用法 注意事项: a:逻辑运算符一 ...

  7. 写在最前面 - 《看懂每一行代码 - kubernetes》

    我要写什么 <看懂每一行代码 - kubernetes>会包含k8s整个项目的源码解析,考虑到门槛问题,在开始分析k8s之前我会通过一些更低难度的golang开源项目讲解来帮助大家提升go ...

  8. Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字

    Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...

  9. JAVA 连等赋值问题

    一.描述 关于 Java 连等赋值,例如a=b=c;我们知道它是从右往左依次赋值的,其结果大致可以拆分为b=c;a=b;,但是当栈中没有持有变量的引用时,则会出现问题,例如: public class ...

  10. [十四]基础类型之StringBuffer 与 StringBuilder对比

    StringBuilder 和 StringBuffer是高度类似的两个类 StringBuilder是StringBuffer的版本改写,下面从几个方面简单的对比下他们的区别 类继承关系 上文中,我 ...