zoukankan      html  css  js  c++  java
  • java中的方法

    1、定义方法

    修饰符 返回值类型 方法名(参数列表){
      //方法体
    }
    例子:
    public class HelloWorld {   //main method   public static void main(String[] args){   int i = 5, j =3;   int k = max(i, j);   System.out.println("The maximum between " + i + " and " + j + " is " + k);   }   public static int max(int num1, int num2){   int result;   result = (num1 > num2) ? num1 : num2;   return result;   }
    }

    2、传值与传引用

      1)传值是值传递参数的时候传的是值的拷贝,对参数的操作不会改变原值

      

    public class HelloWorld {
      public static void change(int age){
      age = 30;
      }
      //main method
      public static void main(String[] args){
    
      int test1 = 10;
    
      System.out.println("Before change, the age is " + test1);
    
      change(test1);
      System.out.println("Afther change, the age is " + test1);
      }
    }

    输出结果:

    Before change, the age is 10
    Afther change, the age is 10

       2)参数的引用传递:传递的是引用的地址,也就是变量所对应的内存空间的地址。

    public class HelloWorld {
      public static void change(A a){
      a.age = 30;
      }
      
    //main method   public static void main(String[] args){   A test1 = new A();   test1.age = 10;   System.out.println("Before change, the age is " + test1.age);   change(test1);   System.out.println("Afther change, the age is " + test1.age);   }
      
    static class A{   public int age;   } }

    输出结果:

    Before change, the age is 10
    Afther change, the age is 30

       3)如果传引用时,在处理函数如果操作的不是传递进来的引用所指向的内存空间,而是new出来的一个新的空内存,那么操作不会改变原来的值。

    public class HelloWorld {
      public static void change(A a){
      a = new A();
      a.age = 30;
      }
      
    //main method   public static void main(String[] args){   A test1 = new A();   test1.age = 10;   System.out.println("Before change, the age is " + test1.age);   change(test1);   System.out.println("Afther change, the age is " + test1.age);   }
      
    static class A{   public int age;   }
    }

    输出结果:

    Before change, the age is 10
    Afther change, the age is 10

      4)数组作为参数传递的时候,属于引用传递,函数对数组的改变会影响原来的数组

    public class HelloWorld {
      public static void change(int[] age){
      age[0] = 30;
      }
      
    //main method   public static void main(String[] args){   int[] test1 = new int[] {20,10};   System.out.println("Before change, the first number is " + test1[0]);   change(test1);   System.out.println("Afther change, the first number is " + test1[0]);   } }

    输出结果:

    Before change, the first number is 20
    Afther change, the first number is 30

      5)String:String类型(引用)作为参数传递时传递的是引用,只是对String做出任何修改时有一个新的String对象会产生,原来的String对象的值不会做任何修改。
         但是可以将新的对象的引用赋给原来的引用,这样给人的表面现象就是原来的对象变了,其实没有变,只是原来指向它的引用指向了新的对象

    public class HelloWorld {
      public static void change(String src){
      src = "Hello";
      }
      
    //main method   public static void main(String[] args){   String test = "Good!";   System.out.println("Before change, the message is " + test);   change(test);   System.out.println("Afther change, the message is " + test);   } }

    输出结果:

    Before change, the message is Good!
    Afther change, the message is Good!

    传值、传引用?


    3、重载

      具有相同的函数名字,但是函数参数列表不同的函数。不能根据不同的修饰符和返回值类型来重载方法。java编译器根据方法签名调用具体的方法

    public static int max(int num1, int num2){
      //函数体
    } 
    public static double max(double num1, double num2){   //函数体 }

       1)变量的作用域:变量在程序中可以引用的范围。方法中定义的变量称为局部变量,局部变量的范围从声明变量的地方开始,直到包含该变量的块结束。局部变量都必须在使用之前声明与赋值。

      2)Math数学类方法 调用:Math.toDegrees(a); Math.sin(a);

    三角函数类

     public static double sin(double radius)
    public static double cons(double radius)
    public static double tan(double radius)

    public static double toRadians(double degree)
    public static double toDegrees(double radius) //弧度转成角度

    public static double asin(double a)
    public static double acos(double a)
    public static double astan(double a)

    指数函数类

    public static double exp(double x) // e的x次方
    public static double log(double x) //e为底
    public static double log10(double x) //10为底
    public static double pow(double a, double b) //a的b次方
    public static double sqrt(double x) //开方

    取整函数

    public static double ceil(double a) //向上取整
    public static double floor(double a) //向下取整 
    public static double rint(double a) //就近取整,如果距离两个整数一样近,返回就近的偶数 
    public static int round(float x) //四舍五入

    min、max、abs方法

    random方法 

    a + Math.random() * b --> 返回a ~ a+b之间的随机整数,不包括a+b
    

      

    返回0~9之间的随机数: (int) (Math.random()*10)
    返回50 ~ 99之间的随机数: 50 + (int (Math.random() * 50))
    返回随机的小写字母: (char)('a'+Math.random() *('z' - 'a' + 1))
    返回另个字符ch1,ch2之间的随机一个字符:(char)( 'ch1' + Math.random() * ( 'ch2' - 'ch1' + 1 ))

    程序练习: 打印日历

    package demo;
    import java.util.Scanner;
    /**
    * 打印日历
    * Created by luts on 2015/11/26.
    */
    public class PrintCalendar {
      public static void main(String[] args){
      Scanner input = new Scanner(System.in);
      //提示用户输入年份
      System.out.println("Enter full year (e.g., 2001)");
      int year = input.nextInt();
    
      //提示用户输入月份
      System.out.println("Enter monrh in numer between 1 and 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 = "Jannuary"; 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 = "Octorber"; break;
          case 11: Monthname = "November"; break;
          case 12: Monthname = "December";
        }
        return Monthname;
      }
    
      //打印月份主体
      public static void printMonthBody(int year, int month){
        //获取月份第一天的星期
        int startDay = getStartDay(year, month);
    
        //计算月份总共的天数
        int numberOfDaysInMonth = getNumberOfDaysInMonth(year, month);
    
        //打印空格
        int i = 0;
        for (i = 0; i < startDay; i++)
          System.out.print(" ");
        for (i = 1; i <= numberOfDaysInMonth; 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 START_DAY_FOR_JAN_1_1800 = 3;
        //计算1800/1/1到输入日期的天数
        int totalNumberOfDays = getTotalNumberOfDays(year, month);
    
        //返回输入日期的星期
        return (totalNumberOfDays + START_DAY_FOR_JAN_1_1800) % 7;
      }
    
      //获取总天数
      public static int getTotalNumberOfDays(int year, int month){
        int total = 0;
    
        for (int i = 1800; i < year; i++){
        if (isLeapYear(i))
          total += 366;
        else
          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;
        return 0;
    }
    
      public static boolean isLeapYear(int year){
        return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
      }
    }

    每次调用一个方法的时候,系统都将参数和局部变量存储在一个被称为堆栈(stack)的区域中。当一个方法调用另外一个方法的时候,调用者的堆栈空间保持不动,开辟新的空间处理新方法的调用。一个方法完成它的工作之后返回到它的调用者,就释放其相应的空间

  • 相关阅读:
    .net 流读取
    c#小Tip:数字格式化显示
    VS.NET优化编译速度
    Application.Run()和Form.Show()的区别
    如何利用系统函数操作文件夹及文件
    设计优秀的用户界面
    我妈过来了
    帮你免于失业的十大软件技术(转抄)
    正试图在 OS 加载程序锁内执行托管代码
    NASA World Wind
  • 原文地址:https://www.cnblogs.com/luts/p/5000270.html
Copyright © 2011-2022 走看看