第六章 方法

6.2 定义方法

  1.方法的定义由方法名称、参数、返回值类型以及方法体组成。

  2.定义在方法头中的变量称为形式参数(formal parameter)或者简称为形参(parameter)。参数就像占位符。当调用方法时,就给参数传递一个值,这个值称为实际参数(actual parameter)或实参(argument)。参数列表(parameter list)指明方法中参数的类型、顺序和个数。方法名和参数列表一起构成方法签名(method signature)。参数是可选的,也就是说,方法可以不包含参数。

  3.带返回值的方法称为函数,返回值类型为void的方法称为过程。

6.8 重载方法

  1.重载方法使得你可以使用同样的名字来定义不同方法,只要它们的签名是不同的。

  2.重载方法可以使得程序更加清楚,以及更加具有可读性。执行同样功能但是具有不同参数类型的方法应该使用同样的名字。

  3.被重载的方法必须具有不同的参数列表。不能基于不同修饰符或返回值类型来重载方法。

  4.有时调用一个方法时,会有两个或更多的可能,但是,编译器无法判断哪个是最精确的匹配。这称为歧义调用(ambiguous invocation)。歧义调用会产生一个编译错误。

 package com.chapter6;

 public class TestMethodOverloading {

     /**
* 方法重载:
* 1.第一个方法求最大整数;
* 2.第二个方法求最大双精度数;
* 3.第三个方法求三个双精度数中的最大值。
*/ public static void main(String[] args) { System.out.println("比较3和4:"+max(3,4)); System.out.println("比较3.0和5.4:"+max(3.0,5.4)); System.out.println("比较3.0,5.4,10.14:"+max(3.0,5.4,10.14)); } public static int max(int num1,int num2){
if(num1>num2){
return num1;
}else{
return num2;
}
} public static double max(double num1,double num2){
if(num1>num2){
return num1;
}else{
return num2;
}
} public static double max(double num1,double num2,double num3){
return max(max(num1,num2),num3);
} }
6.9 变量的作用域

  1.变量的作用域(scope of a variable)是指变量可以在程序中引用的范围。

  2.在方法中定义的变量称为局部变量(local variable)。局部变量的作用域从声明变量的地方开始,直到包含该变量的块结束为止。局部变量都必须在使用之前进行声明和赋值。

  3.不要在块内声明一个变量然后企图在块外使用它,下面是一个常见错误的例子:

    for(int i=0;i<10;i++){

    }

    System.out.println(i);

6.11方法抽象和逐步求精
 package com.chapter6;

 import java.util.Scanner;

 public class PrintCalendar {

     /**
* 打印日历
*/ public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入一个年份(例如:2016):");
int year = input.nextInt(); System.out.println("请输入一个月份(1-12):");
int month = input.nextInt(); printMonth(year, month); } // 打印日历方法
public static void printMonth(int year, int month) { printMonthTitle(year, month);// 打印日历的标题 printMonthBody(year, month);// 打印日历的主体
} // 打印日历标题的方法:年月,虚线,每周七天的星期名称
public static void printMonthTitle(int year, int month) { System.out.println(" " + getMonthName(month) + " " + year);
System.out.println("-------------------------------------------");
System.out.println(" Sun Mon Tue Wed Thu Fri Sat"); } // 获得每个月的名字
public static String getMonthName(int month) {
String monthName = "";
switch (month) {
case 1:
monthName = "January";
break;// 一月
case 2:
monthName = "February";
break;// 二月
case 3:
monthName = "March";
break;// 三月
case 4:
monthName = "April";
break;// 四月
case 5:
monthName = "May";
break;// 五月
case 6:
monthName = "June";
break;// 六月
case 7:
monthName = "July";
break;// 七月
case 8:
monthName = "August";
break;// 八月
case 9:
monthName = "September";
break;// 九月
case 10:
monthName = "October";
break;// 十月
case 11:
monthName = "November";
break;// 十一月
case 12:
monthName = "December";
break;// 十二月
}
return monthName;
} // 打印日历的主体
public static void printMonthBody(int year, int month) { int startDay = getStartDay(year, month);//getStartDay(year, month)这个月的第一天是星期几 int numberOfDaysInMonth = getNumberOfDaysInMonth(year, month);//getNumberOfDaysInMonth(year, month)这个月有多少天 int i = 0;
for (i = 0; i < startDay; i++) {
System.out.print(" ");
}
for (i = 1; i <=numberOfDaysInMonth; i++) {
System.out.printf("%5d", i);
if ((i + startDay) % 7 == 0) {
System.out.println();
}
}
System.out.println();
} // 这个月的第一天是星期几
/*
* 假设知道1800年1月1日是星期三(START_DAY_FOR_JAN_1_1800 = 3),然后然后计算1800年1月1日和日历月份的第一天之间相差的总天数(totalNumberOfDays)。
* 因为每个星期有7天,所以日历月份第一天的星期就是(totalNumberOfDays+START_DAY_FOR_JAN_1_1800)%7。
*/
public static int getStartDay(int year, int month) { final int START_DAY_FOR_JAN_1_1800 = 3; int totalNumberOfDays = getTotalNumberOfDays(year, month); return (totalNumberOfDays + START_DAY_FOR_JAN_1_1800) % 7;
} //获取1800年1月1日和日历月份的第一天之间相差的总天数
public static int getTotalNumberOfDays(int year, int month) { int total = 0; for (int i = 1800; i < year; i++) {
if (isLeapYear(i)) {
total = total + 366;
} else {
total = total + 365;
}
} for (int i = 1; i < month; i++) {
total = total + getNumberOfDaysInMonth(year, i);
} return total;
} //计算总天数,需要知道该年是否是闰年以及每个月的天数
public static int getNumberOfDaysInMonth(int year, int month) { if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
return 31;
} if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30;
} if (month == 2) {
return isLeapYear(year) ? 29 : 28;//二月通常有28天,但是在闰年有29天
} return 0; } //判断该年是否为闰年
public static boolean isLeapYear(int year) {
return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
} }

Java语言程序设计(基础篇) 第六章 方法的更多相关文章

  1. Java语言程序设计(基础篇) 第七章 一维数组

    第七章 一维数组 7.2 数组的基础知识 1.一旦数组被创建,它的大小是固定的.使用一个数组引用变量,通过下标来访问数组中的元素. 2.数组是用来存储数据的集合,但是,通常我们会发现把数组看作一个存储 ...

  2. Java语言程序设计(基础篇) 第五章 循环

    第五章 循环 5.2 while循环 1.while循环的语法如下: while(循环继续条件){ //循环体 语句(组); } 2.程序:提示用户为两个个位数相加的问题给出答案 package co ...

  3. Java语言程序设计(基础篇) 第四章 数学函数、字符和字符串

    第四章 数学函数.字符和字符串 4.2 常用数学函数 方法分三类:三角函数方法(trigonometric method).指数函数方法(exponent method)和服务方法(service m ...

  4. Java语言程序设计(基础篇) 第三章 选择

    第三章 选择 3.8 计算身体质量指数 package com.chapter3; import java.util.Scanner; public class ComputeAndInterpret ...

  5. Java语言程序设计(基础篇)第一章

    第一章 计算机.程序和Java概述 1.1 引言 什么是程序设计呢? 程序设计就是创建(或者开发)软件,软件也称为程序. 1.2 什么是计算机 计算机是存储和处理数据的电子设备,计算机包括硬件(har ...

  6. 0031 Java学习笔记-梁勇著《Java语言程序设计-基础篇 第十版》英语单词

    第01章 计算机.程序和Java概述 CPU(Central Processing Unit) * 中央处理器 Control Unit * 控制单元 arithmetic/logic unit /ə ...

  7. Java语言程序设计(基础篇)第二章

    第二章 基本程序设计 2.2 编写简单的程序 1.变量名尽量选择描述性的名字(descriptive name). 2.实数(即带小数点的数字)在计算机中使用一种浮点的方法来表示.因此,实数也称为浮点 ...

  8. Java语言程序设计(基础篇) 第八章 多维数组

    第八章 多维数组 8.2 二维数组的基础知识 二维数组中的元素通过行和列的下标来访问. 8.2.1 声明二维数组变量并创建二维数组 下面是二维数组的语法: 数据类型[][] 数组名; int[][] ...

  9. Java语言程序设计-助教篇

    1. 给第一次上课(软件工程)的老师与助教 现代软件工程讲义 0 课程概述 给学生:看里面的第0个作业要求 2. 助教心得 美国视界(1):第一流的本科课堂该是什么样?(看里面的助教部分) 助教工作看 ...

随机推荐

  1. Win10 UI入门窗口由默认500px to 320px

    https://code.msdn.microsoft.com/Layout-for-windows-that-ba648e1c/ https://msdn.microsoft.com/library ...

  2. 【Mybatis框架】查询缓存(一级缓存)

    做Java的各位程序员们,估计SSH和SSM是我们的基础必备框架.也就是说我们都已经至少接触过了这两套常见的集成框架.当我们用SSH的时候,相信很多人都接触过hibernate的两级缓存,同样,相对应 ...

  3. WPF

    最近在学习WPF,学习WPF首先上的是微软的MSDN,然后再搜索了一下网络有关WPF的学习资料.为了温故而知新把学习过程记录下来,以备后查.这篇主要讲WPF的开发基础,介绍了如何使用Visual St ...

  4. nodejs随记04

    aes加密 资料 简介; 例子; process 改变工作目录: process.chdir(path); 路径计算 例子 获取调用执行所在文件地址 function getCaller() { tr ...

  5. Daily Scrum Meeting ——SixthDay

    一.Daily Scrum Meeting照片 佳恺请假了...可能去约会了罢 二.Burndown Chart 欣慰,但是还是感到"鸭梨山大"! 三.项目进展 1.活动列表查询功 ...

  6. MySQL 分组后,统计记录条数

    分组后,统计记录条数: SELECT num,count(*) AS counts from test_a GROUP BY num; 查询结果如下: 对num去重后的数量的统计: SELECT co ...

  7. C# 读取 CSV 文件

    最近做一个C#项目要导入CSV文件中的数据到Oracle中,使用Aspose.Cells读取中文字段标题却乱码,表的最后多出几行null记录,而且不是免费的,后来找到了NPOI,顾名思义,就是POI的 ...

  8. 在Lingo中输入矩阵(通过Excel)

    举例说明:我要将'C:\Users\Lenovo\Desktop\lingodata.xlsx'里的数据导入lingo1.左键拖动选中'C:\Users\Lenovo\Desktop\lingodat ...

  9. HDU1010 DFS+剪枝

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  10. HDU5769 Substring(后缀数组)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5769 #include <iostream> #include <stdio.h> ...