java中的方法调用——直接调用和类名调用的区别

java中的方法调用——直接调用和类名调用的区别


     public static void main(String[] args)//static必须带上
     {Date d1 =new Date(2022,10,1);
      Date d2 =new Date(2020,3,4);
      Date.dateCompare(d1, d2);
      //dateCompare(d1, d2);     
      dateDifference(d1,d2);
      //Date.dateDifference(d1,d2);
     }

直接调用 dateDifference(d1,d2)和类名调用Date.dateDifference(d1,d2);有何区别(都可以运行)

public class Date {
    //成员变量
    int year;
    int mouth;
    int day;
    //构造方法
    Date(int a,int b,int c)
        {year=a;
         mouth=b;
         day=c;}
    //判断闰年,0是润,1是平
    public int LeapYearJudgment(int a)
        {
            if(a%400==0) return 0;
            if(a%4==0&&a%100!=0)return 0;
            return 1;
         }
    public int LeapYearJudgment()
    {int a=year;
        if(a%400==0) return 0;
        if(a%4==0&&a%100!=0)return 0;
        return 1;
     }
    public int MouthJudgment(int b)
        {switch(b)
                {case 1: case 3:case 5:case 7:case 8:case 10:case 12: return 0;
                 case 4:case 6:case 9:case 11:  return 1;
                 case 2: {int a=LeapYearJudgment();
                             if(a==0)  return 2;
                            if(a!=0)  return 3;
                          }
                 default:return 4;
                }
        }
    int convert()
        {int a=year-1;
         int sum=0;
         int b=mouth-1;
         for(int i=a;i>0;i--) 
             {
             if(LeapYearJudgment(i)==0)   sum+=366; 
              if(LeapYearJudgment(i)==1)   sum+=365;
             }
        
         for(int j=b;j>0;j--)
             {
             if(MouthJudgment(j)==0) sum+=31;
                if(MouthJudgment(j)==1) sum+=30;
                if(MouthJudgment(j)==2) sum+=29;
                if(MouthJudgment(j)==3) sum+=28;
               }
         sum+=day;
        return sum;
        }
    static void  dateCompare(Date m,Date n)
         {int a=m.convert();
          int b=n.convert();
          if(a>b)
              System.out.println(m.year+"年"+m.mouth+"月"+m.day+"日"+"大于"+n.year+"年"+n.mouth+"月"+n.day+"日");
         if(aSystem.out.println(m.year+"年"+m.mouth+"月"+m.day+"日"+"小于"+n.year+"年"+n.mouth+"月"+n.day+"日");
         if(a==b)
             System.out.println(m.year+"年"+m.mouth+"月"+m.day+"日"+"等于"+n.year+"年"+n.mouth+"月"+n.day+"日");
         }
    static void dateDifference(Date m,Date n)
        {int a=m.convert();
          int b=n.convert();
         int c=Math.abs(a-b);
         System.out.println("相差"+c+"天");
        }
     public static void main(String[] args)//static必须带上
     {Date d1 =new Date(2022,10,1);
      Date d2 =new Date(2020,3,4);
      Date.dateCompare(d1, d2);
      //dateCompare(d1, d2);     
      dateDifference(d1,d2);
      //Date.dateDifference(d1,d2);
     }
}

以上是全部源码

同一个类中都一样 ,不同类中需要实例化再调用非static方法,或者类名.static的方法

因为你这是在同类一个文件中,所以可以直接调用方法。如果在不同包下面的不同类文件中,对于public的static方法直能通过类名去调用

调用的静态方法,正常都应该是类名调用,但是你的调用方和被调用放在同一个类中,java编译器会给你自动加强类名的啦