4.2 使用预定义类

在Java里,所有的工作都必须在类里完成。
当然啦,并不是说有的类都必须有实例。比如,Math类,一些数学计算方法不管什么时间什么地点都是一样的,不能说因为用的时间不一样,4开方就不是2了。但是,房子类就不一样,不同的地方房子是不一样的,虽然都叫房子都是住人的地方。所以,房子类应该有实例,而Math类有实例的意义不大。

1 对象和对象变量

要使用对象完成工作,第一步就是先有一个对象,就是对一个对象进行实例化,然后再执行这个实例的方法等。
在Java里面,用一个特殊的方法来实例化一个对象,称作构造器。构造器方法必须和对象的名字一样,并且用new关键字必须在前面,才能进行实例化。

new Date();
System.out.println(new Date());//这样就打印输出了当前时间,默认格式。

可以直接执行构造器初始化的对象的方法。

String date = new  Date().toString();//这样就执行了新构造的时间对象的toString方法

可以让一个变量指向这个新构造的实例。

Date birthday = new Date();
//然后你就可以用birthday做你想做的事情啦
...

可以先申请一个变量

Date deadline;
//这是不对的,因为deadline变量还没有指向Date实例,空有执行方法的步骤程序,但是没有对象执行
//就像是声明了一个学生变量,你知道学生是怎么学习的,但是凭白的调用学习方法,那是谁再学习呢?
String str = deadline.toString();
deadline = new Date();
//这样就可以了,因为有了对象了,就有实体区执行方法了
String str = deadline.toString();

每一个实例对象可以被引用给多个变量

Date birthday = new Date();
Date deadday = birthday;
//这两个变量都指向new Date()构造出来的对象,
//使用其中一个也等同于使用另一个,因为方法最终的执行者都是那个唯一的对象嘛

可以主动不让变量有指向

deadday = null;//没有指向就是没有实例,就不能调用方法或者属性

2 Java库的本地日期类

Date类内部计时方法采用的是1970年1月1日0点0分0秒0毫秒到现在的毫秒数。
但是显然Date类是无法满足全球那么多地方不同的日期习惯的。Java提供另一个LocalDate类来解决这些问题。

LocalDate ld = LocalDate.now();//表面上没用构造器,实际上是用了,now()方法会产生一个对象实例的

你也可以用特殊的日期来构建LocalDate对象

LocalDate ld = LocalDate.of(1999, 12, 31);
int year = ld.getYear();
int month = ld.getMonthValue();
int day = ld.getDayOdMonth();

3 更改器方法和访问器方法

LoacalDate newDate= ld.plusDays(1000);//构造了一个新的时间,是ld时间加上1000天后的时间

修改器和访问器方法

public class person
{
    private int age = 0;
    //访问器方法
    public int getAge()
    {
        return age;
    }
    修改器方法
    public void setAge(int a)
    {
        //为了保证这个类的安全,在设置这个类的的age时,进行了检查,不是什么数字都可以当作年龄的哦
        if(a > 0)
            age = a;
    }
}

一般地,我们希望一个类内部属性是不予许外界随意更改的,,这样做的好处是,外界不知道这个类的状态,那么要是对这个类进行修改代码什么的,对外界不回造成影响。还有就是,处于安全考虑,也不应该让外界随意访问本类的属性。
这个get和set方法就是提供这样一个入口,让隐藏的属性和外界有沟通的渠道,不然的话,要这个属性有什么用呢?

LocalDate date = LocalDate.now();//得到当前日期
int month = date.getMonthValue();//获取月份
int today = date.getDayOfMonth();//获得多少号

date = date.minusDays(today - 1);//改变日期到次月1号
DayOfWeek weekday = date.getDayOfWeek();
int value =  weekday.getValue();//获得该日是周几

System.out.println(" Mon Tue Wed Thu Fri Sat Sun");
for (int i = 1; i < value; i++);//根据周几决定打印多少空格
    System.out.print("    ");
while (date.getMonthValue() == month)
{//到下个月了就不循环了
    System.out.printf("%3d", date.getDayOfMonth());//打印几号
    if(date.getDayOfMonth() == today)
        System.out.print("*");//如果这天和今天是同一天,就打印个星号,否则打印空格
    else
        System.out.print(" ");
    date = date.plusDays(1);//下一天
    if(date.getDayOfWeek().getValue() == 1)//如果新的一天是周一了,就换行
        System.out.println();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值