Post

chap4 Class

chap4 Class

对象变量


1
Date rightNow = new Date();

这里的rightNow称作“对象变量”,很重要的一点是认识到:对象变量并不实际包含一个对象,而只是一个指向对象的指针!

比如两个Date类的对象变量a和b都能同时引用同一个Date对象。

访问器方法


1)访问器方法

1
LocalDate aThousandDaysLater = newYearsEve.plusDays(1000);

这个调用之后newYearsEve会有什么变化?它会改为1000天之后的日期吗?事实上,并没
有。plusDays方法会生成一个新的 LocalDate对象,然后把这个新对象赋给 aThousandDaysLater变
量。原来的对象不做任何改动。我们说 plusDays方法没有更改调用这个方法的对象。

这类似于第3章中见过的String类的 toUpperCase方法。在一个字符串上调用 toUpperCase时,这个字
符串仍保持不变,会返回一个将字符大写的新字符串

2)更改器方法

Java库曾经有另一个处理日历的类,名为GregorianCalendar。可以如下为这个类表示的一个日期增加1000天:

1
2
3
GregorianCalendar someDay = new GregorianCalendar(1999,11,31);

someDay.add(Calendar.DAY_0F_MONTH,1800);

与LocalDate.plusDays方法不同,GregorianCalendar.add方法是一个更改器方法(mutator method)。
调用这个方法后,someDay 对象的状态会改变:

1
2
3
year = someDay.get(Calendar.YEAR);//2002
month = someDay.get(Calendar.MONTH)+1;//09
day = someDay.get(Calendar.DAY_0F MONTH);// 26

类的并列关系


比如我的文件名叫A.java,那么我们知道如果有main方法,那么它一定是被包含在class A{…}里面的;

但是如果我在这个文件里又定义了一个employee类,那么employee类的代码放在哪里?是class A{…}的…里面吗?

不是的:

  • 一个 .java 文件可以有多个类,但只能有一个 public 类(且文件名必须与该 public 类名一致,这里是 A.java)。
    其他类(如 Employee)不能是 public 的(只能是默认包权限——即不写任何修饰词,或 static 嵌套类)

  • 所有类都是独立的,不能嵌套在另一个类的 {} 内(除非是嵌套类)

正确的写法是:

1
2
3
4
5
6
7
8
//in A.java
public class A{
  ...
}

class Employee{
  ...
}
This post is licensed under CC BY 4.0 by the author.