【原】Java学习笔记008 - 方法(函数)

时间:2022-02-16 00:48:08
 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. DES算法

    好久没写过博客啦,最近在gao搞Qt,做出漂亮的UI确实挺难的,做美工也不简单啊,好啦,言归正传,下面是实现DES的python源码,是借鉴了开源中国一个大师的源码写出来的,直接贴啦. 加密部分: # ...

  2. sqoop与mysql之间中文乱码

    sudo -u hive sqoop export --connect "jdbc:mysql://192.168.22.201/LauncherDB?useUnicode=true&amp ...

  3. Wireshark命令行工具tshark

    Wireshark命令行工具tshark 1.目的 写这篇博客的目的主要是为了方便查阅,使用wireshark可以分析数据包,可以通过编辑过滤表达式来达到对数据的分析:但我的需求是,怎么样把Data部 ...

  4. iOS移动开发周报-第22期

    iOS移动开发周报-第22期 [摘要]:本期iOS移动开发周报带来如下内容:苹果股价创新高,iOS8自动调整UITableView布局,Swift学习心得等. 新闻 <苹果股价创新高 市值全球第 ...

  5. SSH2 架构常用注解

    1. @Repository 将 DAO 类声明为 Bean 2.@Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次. 3.@Service 通常作用在业务层 ...

  6. ALTER TABLE causes auto&lowbar;increment resulting key &&num;39&semi;PRIMARY&&num;39&semi;

    修改表为主键的自动增长值时,报出以下错误:mysql> ALTER TABLE YOON CHANGE COLUMN id id INT(11) NOT NULL AUTO_INCREMENT ...

  7. (原创)用Java实现链表结构对象:单向无环链表

    转载请注明本文出处:http://www.cnblogs.com/Starshot/p/6918569.html 链表的结构是由一个一个节点组成的,所谓链,就是每个节点的头尾连在一起.而单向链表就是: ...

  8. 高效率遍历Map以及在循环过程中移除 remove指定key

    //高效率遍历Map以及在循环过程中移除 remove指定key //使用iter循环的时候 可以在循环中移除key,for在循环的过程中移除会报错哦 //本方法效率高 Iterator iter = ...

  9. gm8180&colon;arm linux启动加载模块、运行程序

    1. init #!/bin/busybox ash#load modules mao 2013-02-16 14:12:48 echo "************************m ...

  10. Java反射实现原理分析

    目录: 一.反射的用法 二.反射实现原理 一.反射的用法 1.如何获取Class反射类 (1)通过getClass方法: Proxy proxy = new ProxyImpl(); Class pr ...