Java(2-1)

来源:互联网 发布:java正则表达式匹配{} 编辑:程序博客网 时间:2024/06/06 01:35

1.对象与对象变量:
① 要想适用对象,就首先必须构造对象,并指定其初始状态。
② 下面的表达式构造了一个新对象。这个对象被初始化为当前的日期和时间。
new Date()
通常,希望构造的对象可以多次使用,因此,需要将对象存放到一个变量中,如下:

String s = new Date().toString();

其中 s 为对象变量,一定要认识到:一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。在java中,任何对象变量的值都是对存储在另一个地方的一个对象的引用。在上方,表达式 new Date()构造了一个Date类型的对象,并且它的值是对新创建对象的引用,并且他的值是新创建对象的引用,这个引用存储在s中。
注意:局部变量不会自动的初始化为null,而必须通过调用new或将它们设置为null进行初始化。

很多人错误的认为java对象的引用和c++的引用类似。然而,在c++中没有空引用,并且引用不能被赋值。可以将java的对象变量看错c++的对象指针。代码如下

Date s; //java   Date* s //c++

当然一个Date*指针只能通过调用new进行初始化。这一点java和c++语法几乎一样。

java中的null引用对应c++中的NULL指针。

当一个对象包含另一个对象变量时,这个变量依然包含着指向另一个堆对象的指针。

③java类库中的LocalDate类:
java的Date()类有一个状态,即特定的时间点。这个时间点就是所谓的纪元,它是1970-1-1 00:00和格林时间点一样,是一种具有实践意义的科学标准时间。
现在java打算将保存时间和时间点命名分开。所以java的库包含了两个类:一个是用来表示时间点的Date类;另一个是用来表示大家熟悉的日历的LocalDate类。相关代码操作如下:

LocalDate newYearsEve = LocalDate.of(1992,12,31);

一旦有了一个LocalDate对象,可以用放法getYear,getMonthValue和getDayOfMonth得到年,月,日。

int year = newYearsEve.getYear();//1999int month = newYearsEve.getMonthValue();//12int day = newYearEve.getDayOfMonth();//31

plusDays方法会得到一个新的LocalDate,如果把应用这个方法的对象成为当前对象,这给新日期对象则是距当前对象制定天数的一个新日期:

LocalDate aNew = newYearEve.plusDays(1000);year = aNew.getYear(); //2002month = aNew.getMonthValue();//09day = aNew.getDayOfMonth();//26

需要说明的是plusDays不会改变原来的对象,而是生成一个新的LocalDate对象,然后把这个新对象赋给aNew,这是一个访问器方法,而不是一个更改器方法。
下面介绍一段程序来结束LocalDate,这段程序要求一个日期是星期几。和某月份的天数:

LocalDate date = LocalDate.now();//下面得到日月int month = date.getMonthValue();int today = date.getDayOfMont();//然后将date设置为这个月的第一天,并得到这一天为星期几:date = date.minusDays(today - 1);//这个方法是日期减少天数DayOfWeek weekday = date.getDayOfWeek();int value = weekday.getvalue();// 1=Monday...7=sunday//下面一个循环来打印日历,第一行应该有一些缩进System.out.println("Mon Tue Wed Thu Fri Sat Sun");for(int i = 1;i < value;i++)    System.out.println("   ");//现在我们来打印日历主体。进入一个循环,其中date遍历一个月中的每一天。//每次迭代时,打印日期值。如果date是当前日期,这个日期,这个日期则用一个*标记。//接下来,把date推进到下一天。如果到达新的一周的第一天,则进行换行:while(date.getMonthValue() == month){    System.out.println("%3d",dat.getDayOfMonth());        if(date.getDayOfMonth == today)            System.out.print("*");        else            SYSTEM.Out.print(" ");        date = date.plusDays(1);        if(date.getDayOfWeek().getValue() == 1)Sysotem.out.println();}