• java基础:2.1 方法、重载、随机字符、方法抽象


    java中名叫方法,在C语言里我们叫做函数。

    每当调用一个方法时,系统会创建一个活动记录(也称为活动框架),用于保存方法中的参数和变量。活动记录置于一个内存区域中,称为调用堆栈( call stack)。调用堆栈也称为执行堆栈、运行时堆栈,或者一个机器堆栈,常简称为“堆栈”。当一个方法调用另一个方法时,调用者的活动记录保持不动,一个新的活动记录被创建用于被调用的新方法。T-个方法结束返回到调用者时,其相应的活动记录也被释放。

    一个小程序,结合运用了方法和输入重定向

    import java.util.Scanner;
    public class A {
    public static void main(String[] args) {
    	Scanner input = new Scanner(System.in);
    		float core = input.nextFloat();
    		while(core != 0) {
    			System.out.println("the grade is :" + getGrade(core));
    		core = input.nextFloat();
    		}
    	}
    	
    	public static char getGrade(float x) {
    		if(x>=90)
    			return 'A';
    		else if(x>=80)
    			return 'B';
    		else return 'C';
        }
    }
    

    重载方法

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

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

    例如调用max(1,2),创建了两个方法 max(int x1,double x2)和max(double x1,int x2),就会产生歧义,引起编译报错。

    生成随机字符

    x +Math.random()8(y-x+1)  生成[x,y]之间的随机数

    在class 1中写出随机数生成函数,class 2中调用1中的函数。两个程序分别为

    public class RandomCharacter {
    	public static char getRandomCharacter(char chl, char ch2){
    		return(char)(chl + Math.random()*(ch2 - chl + 1));}
    	
    	public static char getRandomLowerCharacter(){
    		return getRandomCharacter('a','z');
    	}
    	public static char getRandomUpperCharacter(){
    		return getRandomCharacter('A','Z');
    	}
    	public static char getRandomDigitCharacter(){
    		return getRandomCharacter('0','9');
    	}
    	public static char getRandomCharacter(){
    		return getRandomCharacter('u0000','uFFFF');
    	}
    }
    public class TextRandomCharacter {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		final int number = 160;
    		final int number_line = 20;
    		for (int i=1;i<=number;i++) {
    			char ch = RandomCharacter.getRandomLowerCharacter();
    			if(i%number_line==0)
    				System.out.println(ch);
    			else System.out.print(ch);
    			
    		}
    	}
    
    }
    

    方法抽象

    方法抽象( method abstraction) 是通过将方法的使用和它的实现分离来实现的。用户在不知道方法是如何实现的情况下,就可以使用方法。方法的实现细节封装在方法内,对使用该方法的用户来说是隐藏的。这就称为信息隐藏( information hiding) 或封装(encapsulation)。如果决定改变方法的实现,但只要不改变方法签名,用户的程序就不受影响。方法的实现对用户隐藏在“黑盒子” 中。

    假设要编写一个程序,显示给定年月的日历。程序提示用户输入年份和月份,然后显示该月的整个日历

    package basic_practice_001;
    
    import java.util.Scanner;
    
    public class PrintCalendar {
    
    	public static void main(String[] args) {
    		// TODO Ao-generated method stub
    		Scanner input = new Scanner(System.in);
    		System.out.print("Enter the year(such as:1800,...,2018,...):");
    		int year = input.nextInt();
    		System.out.print("Enter the month(such as:1,2,...12):");
    		int month = input.nextInt();
    		printTitle(year,month);
    	}
    	
    	
    	public static void printTitle(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 void printMonthBody(int year,int month) {
    		int StartDay = getStartDay(year,month);  // 周几开始
    		int A_Month_day =getMonthDays(year,month);
    		for(int i=StartDay;i>0;i--) 
    			if(i==7) break;
    			else System.out.print("     ");
    		for(int i=1;i<=A_Month_day;i++) {
    			System.out.printf("%5d",i);
    			if((i+StartDay)%7 == 0) System.out.println();
    		}
    	}
    	
    	
    	public static String getMonthName(int month) {
    		String month_name = " ";
    		switch(month) {
    			case 1: month_name += "January";break;
    			case 2: month_name += "Febrary";break;
    			case 3: month_name += "March";break;
    			case 4: month_name += "April";break;
    			case 5: month_name += "May";break;
    			case 6: month_name += "June";break;
    			case 7: month_name += "July";break;
    			case 8: month_name += "August";break;
    			case 9: month_name += "September";break;
    			case 10: month_name += "Octorber";break;
    			case 11: month_name += "November";break;
    			case 12: month_name += "December";break;
    		}
    		return month_name;
    	}
    	
    	
    	public static int getStartDay(int year,int month) {
    		int totalDay = totalDay(year,month);
    		int startDay_of_week = StartDayOfWweek(totalDay);
    		return startDay_of_week;
    	}
    	
    	public static int totalDay(int year,int month) {
    		int sum=0;
    		for(int i=1800;i<year;i++) {     // 1800年1月1日 周三
    			if ( i%400==0 || (i%4==0 && i%100!=0) )
    				sum += 366;
    			else sum+=365;
    		}
    		for(int i=1;i<month;i++) {
    			sum += getMonthDays(year,i);
    		}
    		return sum;	
    	}
    	
    
    	public static int StartDayOfWweek(int totalDay) {
    		final int week_1800_1_1 = 3;
    		return (week_1800_1_1 + totalDay)%7;
    	}
    	
    	public static int getMonthDays(int year,int month) {
    		int i=month;  // 废话,但懒得改后面If里面的变量名称了,所以加了这一句
    		int A_Month_day;
    		if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12) A_Month_day=31;
    		else if(i==4 || i==6 || i==9 || i==11) A_Month_day=30;
    			 else if(i==2 && ( year%400==0 || (year%4==0 && year%100!=0)))
    				 	A_Month_day=29;
    		else A_Month_day=28;	
    	return  A_Month_day;
    	}
    }
    

    结果如下:

  • 相关阅读:
    14.UA池和代理池
    13.scrapy框架的日志等级和请求传参
    12.scrapy框架之递归解析和post请求
    11.scrapy框架持久化存储
    10.scrapy框架简介和基础应用
    09.移动端数据爬取
    08.Python网络爬虫之图片懒加载技术、selenium和PhantomJS
    07.验证码处理
    vi编辑器
    tar 压缩命令
  • 原文地址:https://www.cnblogs.com/l20902/p/10610954.html
Copyright © 2020-2023  润新知