方法对一段功能代码进行集中管理,每个同学在某一时刻只做一件事情。单一职责。
5.1 方法的分类
构造方法
在创建对象时自动调用
成员方法
使用对象进行调用
静态方法
static 使用类名进行调用
() -->代表的就是方法
5.2 方法的创建
代码语言:javascript复制语法:
访问修饰符 [static] 返回值类型 方法名([形式参数]){
方法体
}
返回值类型
分为两种
1、void 没有返回值
2、有返回值
代码语言:javascript复制2.1、八大基本数据类型 int double float long byte short char boolean
2.2、引用数据类型 (所有的类都被称之为类型) String
代码语言:javascript复制方法名:自己命名,与变量的命名规则一样
一个变量名是否合法的三条规则
1、java中的变量名是由【A-Z】【a-z】字母,【0-9】数字,_下划线,$符组成
2、变量名的首字符不能以数字开始,以习惯性的做法都是以字母开头
3、不能出现java的关键字 public class static void int double char boolean byte short long float
一个变量名是否合理的规则
4、如果变量名由两个或多个单词组成,使用**驼峰命名法**,
对变量,方法的名称要求第一个单词的首字符小写,第二个单词的首字符大写,比如: firstNum,
如果是类名要求所有单词的首字符都大写 比如:HelloWorld
5、变量名要具体一定的可读性,见名知义. diYiGeShu
[形式参数]:
这里的参数就是定义变量,多个形式参数之间用逗号分隔,方法代表着一个动作,你思考一下,只要是有动作的事情都放在方法里-->动词
形式参数的变量用于接收调用处发送过来完成这个功能的数据的
5.3 按编写方式进行分类
- 5.3.1 无返回值,无参数 public [static] void 方法名(){ }
- 5.3.2 有返回值,无参数 public [static] 返回值类型 方法名(){ }
- 5.3.3 无返回值,有参数 public [ static] void 方法名([形式参数]){ }
- 5.3.4 有返回值,有参数 public [static] 返回值类型 方法名([形式参数]){ }
5.4 static 静态方法
静态方法在类加载的时候就会对方法进行加载,方法要加载过才能执行。
成员方法在创建对象的时候才进行加载,加载时间后于静态方法,所以静态方法中不能调用成员方法。
方法要写到public class 类名{ 写方法 }。
不要写到 public static void main(String[] args){这里面不要写}
5.4.1 无返回值,无参数案例
代码语言:javascript复制public static void main(String[] args) {
//调用
printNum1_10();
}
/*
打印1-10之间所有的数
* 方法的定义
* 方法定义出来不会自动执行
访问修饰符 static void 方法名(){
打印1-10之间所有的数
}
* */
public static void printNum1_10(){
for (int i = 1; i <= 10 ; i ) {
System.out.println(i);
}
}
代码语言:javascript复制public class Demo5 {
public static void main(String[] args) {
printNum1_10();
System.out.println("程序结束");
}
/**
*
* 访问修饰符 [static] 返回值类型 方法名(){
* 打印1-10之间所有的数
* }
*/
public static void printNum1_10(){
for (int i = 1; i <= 10; i ) {
System.out.println(i);
if(i==5){
//break;//如果是break跳出当前循环最后的方法执行结束一定会打印,如果使用return 方法执行结束不会打印
return;//return如果使用在无返回值的方法中return;结束当前方法的执行
}
}
System.out.println("方法执行结束");
}
}
5.4.2 有返回值,无参数
使用return
语法: return 返回的数据; --> 将数据返回到调用处 结束当前方法的执行,一次只能返回一个结果
代码语言:javascript复制public static void main(String[] args) {
//调用
// printNum1_10();
//程序调试F8 单步执行 F7 逐条执行
int sum = addSum();
System.out.println("调用方法得到的结果:" sum);
}
/*
计算1-10之间所有数的和
有返回值无参数的方法
*/
public static int addSum(){
int sum=0;
for (int i = 1; i <= 10; i ) {
sum =i;
}
return sum;
}
5.4.3 无返回值,有参数
代码语言:javascript复制import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入一个数:");
int num=input.nextInt();
sumNum(num); //100是一个具体的值 实际参数 调用方法程序就会进入到这个方法中去执行
}
/*
* sumNum看成是在另外一台电脑上执行,另一台电脑无法操作
* */
public static void sumNum(int num){ //是一个变量的定义 形式参数
int sum=0;
for (int i = 1; i <= num; i ) {
sum =i;
}
System.out.println(sum);
}
}
sumNum(100); 调用处小括号中传入的值叫实际参数
public static void sumNum(int num) 定义方法的语法这里小括号中的变量叫形式参数
执行流程就是将实际参数的值赋值给形式参数。并且,多个参数之间用逗号分隔,传入的类型位置要一一对应
问题,写一个方法来求圆的面积 PIXrXr;
代码语言:javascript复制import java.util.Scanner;
public class Main2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个半径:");
int r=input.nextInt();
area(r,3.14);
}
public static void area(int r,double pi){
System.out.println(r*r*pi);
}
}
注意:
area(r,3.14);
public static void area(int r,double pi)
多个参数之间用逗号分隔,类型,位置,数量都要一一对应
5.4.4 有返回值,有参数
代码语言:javascript复制import java.util.Scanner;
public class Main3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个数:");
int num=input.nextInt();
int result=sumNum(num);//sumNum(num);[调用方法执行]和sumNum(int num)[定义方法]不是同一个变量,num里的值赋值给定义方法这里的num变量
System.out.println(result);
}
public static int sumNum(int num){ //是一个变量的定义 形式参数
int sum=0;
for (int i = 1; i <= num; i ) {
sum =i;
}
return sum;
}
}
5.5 方法的好处
1、方法可以让以前零乱的代码,变得整齐
2、冗余代码可以重复利用
题目1: 求1-10之间所有数的积,并打印结果,定义方法实现
题目2:统计1-输入的一个数的区间中,能同时被3和5整除的数的个数
题目3:输入一个年份,月份,日期,计算这个日期是当年的第几天 定义方法实现
代码语言:javascript复制import java.util.Scanner;
public class Demo5 {
//1990 1 1 星期一
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个年份:");
int year = input.nextInt();
System.out.println("请输入一个月份:");
int month = input.nextInt();
//算输入的日期到1990-1-1之间的天数总和
int sum=getSum(year,month);
//求输入的日期的月份有多少天
int day = getMonthDay(month,year);
//显示日历结果
show(sum,day);
}
public static int getSum(int year,int month){
int sum = 0;
//1、求整年的总天数
for (int i = 1990; i < year; i ) {
sum =getYearDay(i,366,365);
}
//2、求今年整月的总天数
for (int i = 1; i < month; i ) {
sum =getMonthDay(i,year);
}
//当前日期到1990-1-1的总天数
return sum;
}
public static void show(int sum,int day){
int count = 0;
System.out.println("一t二t三t四t五t六t日");
for (int i = 1; i <= sum % 7; i ) {
System.out.print(" t");
count ;
}
for (int i = 1; i <= day; i ) {
System.out.print(i "t");
count ;
if (count % 7 == 0) {
System.out.println();
}
}
}
/**
* 判断年是平年还是闰年,根据年份返回不同的结果
* @param year 年
* @param result1 结果1
* @param result2 结果2
* @return 根据年的判断从结果1和结果2中返回其中的一个
*/
public static int getYearDay(int year,int result1,int result2){
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
return result1;
} else {
return result2;
}
}
/**
* 判断month是几月份,返回对应的天数,year的作用,是在2月的时候用于判断闰年平年的天数
* @param month 月份
* @param year 年份
* @return 月份的天数
*/
public static int getMonthDay(int month,int year){
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31; //因为return在方法中有终止方法执行的效果,所以不需要break
case 4:
case 6:
case 9:
case 11:
return 30;
default:
//在该方法又调用了getYearDay() ,getYearDay方法有返回值,
// 这里直接return 代表将getYearDay方法的值直接返回到该方法的调用处
return getYearDay(year,29,28);
}
}
}
谢谢大家,今天的知识总结就到这啦!希望大家多多支持,我在很多平台都有博客论文,也希望大家多多照顾,栓Q了!!!