Java实例成员和静态成员的理解

1.解释

-Java中的成员分为两种:实例成员静态成员。使用关键字static声明的成员成为静态成员,否则为实例成员;
- 实例成员属于对象,创建了实例后才能通过对象访问实例成员变量和调用实例成员方法;
- 静态成员属于类,即使没有创建实例,也可通过雷鸣访问静态成员变量和调用静态成员方法;


2.注意

  • 在类内部可以直接访问静态成员,省略类名。静态成员也可以通过对象引用。在静态成员方法体重,不能访问实例成员,不能使用this引用;
  • 在声明时可对静态成员变量赋值,也可使用static声明静态初始化块,对静态成员变量进行初始化,语法格式如下:
static
{
   静态成员变量初始化;
}

3.使用

package EqualTest;

public class MyDateB {
    private int year,month,day;
    private static int thisYear;

    static
    {
        thisYear=2015;
    }

    public MyDateB(int year,int month,int day)
    {
        this.set(year,month,day);
    }

    public MyDateB()
    {
        this(2000,7,5);
    }

    public MyDateB(MyDateB d)
    {
        this.set(d);
    }

    public void set(int year,int month,int day)
    {
        this.year=year;
        this.month=(month>=1&&month<=12)?month:1;
        this.day=(day>=1&&day<=31)?day:1;
    }

    public void set(MyDateB d)
    {
        set(d.year,d.month,d.day);
    }

    public int getYear()
    {
        return this.year;
    }

    public int getMonth()
    {
        return this.month;
    }

    public int getDay()
    {
        return this.day;
    }

    public String toString()
    {
        return year+"年"+String.format("%02d", month)+"月"+String.format("%02d",day)+"日";
        }

    public static int getThisYear()
    {
        return thisYear;
    }

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

    public boolean isLeapYear()
    {
        return isLeapYear(this.year);
    }

    public boolean equals(MyDateB d)
    {
        return this==d||d!=null&&this.day==d.day&&this.month==d.month&&this.year==d.year;
    }

    public static int daysOfMonth(int year,int month)
    {
        switch(month)
        {
        case 1:case 3:case 5:case 7:case 8:case 10:case 12:
            return 31;
        case 4:case 6:case 9:case 11:
            return 30;
        case 2:
            return MyDateB.isLeapYear(year)?29:28;
        default:
            return 0;
        }
    }   
        public int daysOfMonth()
        {
            return daysOfMonth(this.year,this.month);}

        public void tomorrow()
        {
            this.day++;
            if(this.day>this.daysOfMonth())
            {
                this.day=1;
                this.month++;
                if(this.month>12)
                {
                    this.month=1;
                    this.year++;
                }
            }
        }

        public MyDateB yesterday()
        {
            MyDateB date=new MyDateB(this);
            date.day--;
            if(date.day==0)
            {
                date.month--;
            if(date.month==0)
            {
                date.month=12;
                date.year--;
            }
            date.day=daysOfMonth(date.year,date.month);
        }
        return date;
    }
        public static void main(String[] args) 
        {
            System.out.println("今年是"+MyDateB.getThisYear()+",闰年?"
        +MyDateB.isLeapYear(MyDateB.getThisYear()));

            MyDateB d1=new MyDateB(2016,7,5);
            MyDateB d2=new MyDateB(d1);
            MyDateB d3=new MyDateB();
            System.out.println("今年是"+d1.getYear()+",闰年?"
                    +d1.isLeapYear());
            System.out.println("今年是"+d3.getYear()+",闰年?"
                    +d3.isLeapYear());
            System.out.println("d1:"+d1+",d2:"+d2+",d1==d2?"+(d1==d2)+",d1.equals(d2)?"+d1.equals(d2));
            System.out.println(d1+"的明天是");
            d1.tomorrow();
            System.out.println(d1+"\n"+d1+"的昨天是"+(d2=d1.yesterday()));
        }
}

解释:
1.访问静态成员获得年份:

System.out.println("今年是"+MyDateB.getThisYear()+",闰年?"
        +MyDateB.isLeapYear(MyDateB.getThisYear()));

getThisYear()为定义的获得年份的静态方法,返回静态成员初始化中的静态变量2015;
MyDateB.isLeapYear(MyDateB.getThisYear())通过类名调用静态成员方法isLeapYear();
2.调用拷贝构造方法复制实例

MyDateB d1=new MyDateB(2016,7,5);
MyDateB d2=new MyDateB(d1);

3.调用无参数的构造方法

MyDateB d3=new MyDateB();

4.通过对象调用实例成员方法

System.out.println("今年是"+d1.getYear()+",闰年?"
                    +d1.isLeapYear());

5.调用无参数构造方法,指定默认日期

System.out.println("今年是"+d3.getYear()+",闰年?"
                    +d3.isLeapYear());
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值