Core java第九版第四章对象与类

Talk is cheap, show me the code.

  1. java中所有的数组和对象都是使用new来进行定义,java所有的对象都存储在堆中,如果没有new就没有定义只是声明。而C++中数组和对象都不需要使用new,如果使用new那就是动态创建,不使用new的数组和对象是在栈中,使用new动态创建的是在堆中。

    C++中:
    int a[4]; //定义一个数组,存储在栈中
    int *a = new int[4]; //动态定义一个数组,存储在堆中
    Order order; //定义一个对象,存储在栈中
    Order *order = new Order(); //动态定义一个Order对象,存储在堆中

    java中:
    int a[]; //声明了数组但没有定义,不能使用
    int[] a = new int[3]; //定义了一个数组,存储在堆中
    Order order; //声明了一个对象但没有定义,不能使用
    Order order = new Order(); //定义了一个对象,存储在堆中

  2. java中使用日期,不建议使用已经过气的Date类,而建议使用更具一般性的java.util.GregorianCalendar。

    import java.util.GregorianCalendar;
    GregorianCalendar的常用方法:
    GregorianCalendar(int year, int month, int day, int hour, int minute, int second)
    GregorianCalendar(int year, int month, int day) //注意只有month是从0开始的
    一般使用Calendar的常量来获取和设置值,比如Calendar.MONTH, Calendar.YEAR, Calendar.Day_OF_MONTH, Calendar.HOUR, Calendar.HOUR_OF_DAY, Calendar.MINUTE, Calendar.SECOND等等
    void set(int year, int month, int day)
    void set(int year, int month, int day, int hour, int minute, int second)
    void set(int field, int value)
    int get(int field)
    void add(int field, int amount)

  3. java中编译时如果有多个文件,比如Employee.java和EmployeeTest.java,执行编译时只需要输入命令javac EmployeeTest.java即可,因为java的编译器编译EmployeeTest时发现调用了类Employee,就会自动去查找名为Employee.class的文件,如果没找到就去寻找Employee.java文件,然后对它进行编译。如果发现有比Employee.class更加新的日期的Employee.java文件,就会重新编译。

  4. java中使用this时都是用的 “.”号,比如this.name,而C++中this是指针,指针都必须使用 “->”符号,比如this->name。

  5. java中类中如果使用了其他类作为成员变量时,再定义get方法时,注意返回时要使用clone方法,返回可变引用对象的拷贝,而不能直接返回引用对象,这样会破坏类成员变量的封装性。

    Employee harry;
    Date d = harry.getBirthday();
    //wrong
    class Employee
    {
    private Date birthday;
    public Date getBirthday() //这样直接返回的引用对象d和harry.birthday指向的都是堆中同一个对象,破坏了封装性
    {
    return birthday;
    }
    }
    //right
    class Employee
    {
    private Date birthday;
    public Date getBirthday()
    {
    return birthday.clone(); //这样返回的是birthday的拷贝,改变d不会影响harry.birthday
    }
    }

  6. java中可以为每个类都添加一个main方法,这是单元测试的技巧,最后使用哪个main作为程序入口取决于执行java Object时Object是哪个类。

  7. java是值传递,声明一个类对象时可以把对象名理解为指向堆中一个对象的指针,对象名就是一个地址。当将类对象作为函数形参时,传入实参时形参获得实参地址的一份拷贝,但是形参和实参都是指向堆中的同一个对象,使用形参调用方法可以改变实参的状态,但是仅仅改变形参地址内容并不会影响到实参。

    public static void swap(Employee x, Employee y)
    {
    Employee temp = x;
    x = y;
    y = temp;
    }
    执行swap(a, b)时a的地址拷贝给x,b的地址拷贝给y,swap函数将x和y的地址互换了,但是a和b的地址并没有互换,交换失败

  8. java中类的初始化顺序:静态变量默认值->静态初始化块->变量默认值->变量初始化块->构造函数。如果类存在父类,初始化顺序为:父类静态变量默认值->父类静态变量初始化块->子类静态变量默认值->子类静态变量初始化块->子类main方法构造子类对象->父类变量默认值->父类变量初始化块->父类构造函数->子类变量默认值->子类变量初始化块->子类构造函数。

  9. 生成注释文档,采用javadoc -d docDirectory packageName命令,可以在docDirectory目录下生成packageName项目的文档。注释时可以用@version表明版本信息,@author表明作者信息,@param表明方法参数信息,@return表明方法返回信息,用/** /进行类和类的域变量的注释等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值