Java学习小笔记——Method

方法(Method)在大一的C++课程里面就学习过,这个部分还好对得起谭老师,能基本明白什么是方法。但是在Java 中,感觉方法和C++还是不能相同去理解的,毕竟一个是面向过程的语言,一个是面向对象的语言。接下来就是我在学习《Java语言程序设计——基础篇》中对于一些我个人不够理解的要点的记录。

 方法,通俗理解,就是用来创建可重用的代码。

 定义方法的语法:

  修饰符    返回值类型      方法名(参数列表){

               方法体;

      }

 

 main方法与其他方法唯一区别在于它是有Java虚拟机调用的,main方法的方法头永远是一样的,包括修饰符public和static,返回值类型void,方法名main。

 

 对void方法的调用必须是一条语句。void方法不需要return语句,但return能用于终止方法并返回到方法的调用者,这种用法很少,但是对于改变void方法中的正常控制流程是很有用的。详细可见书P127-128页内容。

 

 重载方法(method overloading),就是在一个类中有两个方法,它们具有相同的名字,但有不同的参数列表。Java编译器根据方法签名决定使用哪个方法。但是被重载的方法必须具于不同的的参数列表,不能基于不同修饰符或者返回值类型来重载方法。要避免歧义调用(ambiguous invocation)。

 

最后就是自顶向下和自底向上方法。emmm,练习的代码,输入年、月,打印出日历。

package com.ddup;

import java.util.Scanner;

public class method1 {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);

        System.out.print("输入年:");
        int year = input.nextInt();

        System.out.print("输入月:");
        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));
        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);
        int numberOfDayInMonth = getNumberOfDaysInMonth(year, month);
        int i = 0;
        for (i = 0; i<startDay; i++){
            System.out.print("    ");
        }
        for (i = 1; i < numberOfDayInMonth; i++){
            System.out.printf("%4d", i);

            if ((i+startDay)%7 == 0){
                System.out.println();
            }
        }
        System.out.println();
    }

    public static int getStartDay(int year, int month){
        final int firstDay = 3;
        int totalNumberOfDays = getNumberOfDays(year, month);
        return (totalNumberOfDays+firstDay)%7 ;
    }

    public static int getNumberOfDays(int year, int month){
        int total = 0;
        for(int i = 1800 ; i < year; i++ ){
            if (isLeapYear(i))
                total = total + 366;
            else
                total = total + 365;
        }
        total = total + getNumberOfDaysInMonth(year, month);
        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;
        }else if (month == 2){
            return isLeapYear(year)? 29 :28 ;
        }else {
            return 30;
        }
    }

    public static boolean isLeapYear (int year){
        return year%400 == 0 || (year % 4 ==0 && year%100 != 0);
    }
}

 然后运行截图:

啦啦啦~ 希望明天可以看更多的知识点。

posted @ 2018-03-20 20:21  Nnn_Lillian  阅读(165)  评论(0编辑  收藏  举报