第六章 方法

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. Handlebars块级Helpers

    1.Handlebars简单介绍: Handlebars是JavaScript一个语义模板库,通过对view和data的分离来快速构建Web模板.它采用"Logic-less templat ...

  2. CentOS7 FTP服务搭建(虚拟用户访问FTP服务)

    概述 最近在搞Oracle在Linux系统下集群,针对Linux系统,笔人也是一片空白.Liunx外部文件的传输,避免不了使用FTP服务,所以现在就整理下,CentOS7环境下,FTP服务的搭建.FT ...

  3. 如何持续集成/交付一个开源.NET函数库到Nuget.org

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:这是一个简单的入门向导,涉及到GitHub.AppVeyor和Nuget.org. 最 ...

  4. freemarker内置函数和用法

    原文链接:http://www.iteye.com/topic/908500 在我们应用Freemarker 过程中,经常会操作例如字符串,数字,集合等,却不清楚Freemrker 有没有类似于Jav ...

  5. Python学习笔记(三)——类型与变量

    一.输入与输出 print("string"); print("string1","string2","string3" ...

  6. 作弊Q-百威

    ===_=374793763===_= 2652880032 865580818 大康 2652880032 春牛 3479301404  皮卡丘 3242026908  舍得放手

  7. TTrayIcon用法

    TTrayIcon用法 self.trycn1.Icon:=Application.Icon; Self.trycn1.Hint:=self.Caption; self.trycn1.Visible: ...

  8. Sharepoint+Office Infopath+快速搭建问卷调查系统

    项目背景 要开发供公司内部使用的N多个在线调查问卷,要求信息在统一的平台上方便跟踪及管理. 公司内部上了Sharepoint系统及大家习惯了使用infopath及Quick app for share ...

  9. Unity Standard Assets 简介之 Characters

    这篇介绍Characters资源包.包含三个文件夹:FirstPersonCharacter.RollerBall.ThirdPersonCharacter. FirstPersonCharacter ...

  10. ZeroMQ接口函数之 :zmq_ctx_set - 设置环境上下文属性

    ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_ctx_set zmq_ctx_set(3) ØMQ Manual - ØMQ/3.2.5 Name zmq_ct ...