java对象(一)

java 对象和类(一)

对象与对象变量

要想使用对象,就必须首先构造对象,并指定其初始状态,然后对对象应用方法。

Java语言中使用构造器构造新实例。例如Java中有Date类,其对象描述一个时间点。构造器的名字应该与类名相同,因此Date类的构造器名为Date。构造一个Date对象,需在构造器前面加上new操作符。

//这个表达式构造了一个新对象,这个对象被初始化为当前的日期和时间。
new Date()
//将toString方法应用于新构造的Date对象上
String s = new Date().toString();

上面的例子中,构造的对象仅适用了一次。如果想多次使用,可以将对象存放在一个变量中:

//将对象存放到一个变量中
Date birthday = new Date();
//定义一个对象变量
Date deadline;

一定要认识到,变量定义了一个对象变量deadline可以引用Date类型的对象,但是不能将任何Date方法应用于这个变量上。

Date deadline;
//会编译错误
s = deadline.toString();

可以用变量引用一个已存在的对象

//方法一
deadline = new Date();
//方法二
deadline = birthday;

注意: 一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。

在java中,任何对象变量的值都是对存储在另外一个地方的一个对象的引用。new操作符的返回值也是一个引用。

//正确
deadline = null;
if(deadline != null)
    System.out.println(deadline);
//错误
birthday = null;
String s = birthday.toString();

因为局部变量不会自动地初始化为null,而必须通过调用new或将它们设置为null进行初始化。

LocalDate类

Java类库中分别有这样2个类:一个是用来表示时间点的Date类,另外一个是日历表示法的LocalDate类。

不要使用构造器来构造LocalDate类,应当使用静态工厂方法代表调用了构造器。

LocalDate.now()

也可以提供年、月、日来构造一个特定日期的对象:

LocalDate.of(2001,1,13)

通常都会将构造的对象保存在一个对象变量中:

LocalDate newYearsEve = LocalDate.of(2001,1,13);
LocalDate aThousandDaysLater = newYearsEve.plusDays(1000);
int year = aThousandDaysLater.getYear();
int month = aThousandDaysLater.getMonthValue();
int day = aThousandDaysLater.getDayOfMonth();
System.out.print(year+"-"+month+"-"+day);
更改器方法与访问器方法

如果想要打印本月的日历,并标注今天是哪天,比如说下面这样:

星期一 星期二 星期三 星期四 星期五 星期六 星期天
1 2
3 4* 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

import java.time.*;
/**
 * @author duke_coding@163.com
 * @date 2018/9/4 19:40
 */
public class CalendarTest {
    public static void main(String[] args)
    {
        LocalDate date = LocalDate.now();
        int month = date.getMonthValue();
        int today = date.getDayOfMonth();

        //设置date为这个月的第一天,并得到这一天为星期几
        date = date.minusDays(today-1);
        DayOfWeek weekday = date.getDayOfWeek();
        int value =weekday.getValue();

        System.out.println("星期一 星期二 星期三 星期四 星期五 星期六 星期天");
        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();
        }
        if (date.getDayOfWeek().getValue() != 1) System.out.println();
    }
}

java.time.LocalDate中一些方法的展示:

static LocalTime now()
/** 构造一个表示当前日期的对象 **/
static LocalTime of(int year, int month, int day)
/** 构造一个表示给定日期的对象 **/
int getYear()
int getMonthValue()
int getDayOfMonth()
/** 得到当前日期的年、月和日**/
DayOfWeek getDayOfWeek
/** 得到当前日期是星期几,作为DayOfWeek类的一个实例返回。调用getValue来得到1~7之间的一个数,表示这是星期几,1表示星期一,7表示星期日 **/
LocalDate plusDays(int n)
LocalDate minusDays(int n)
/** 生成当前日期之后或之前n天的日期 **/
用户自定义类

最简单的类定义形式为:

class ClassName
{
    field1
    field2
    ......
    constructor1
    constructor2
    ......
    method1
    method2
    ......
}

写一个自定义类的例子:

import java.time.*;
/**
 * @author duke_coding@163.com
 * @date 2018/9/4 14:53
 */
public class EmployeeTest {
    public static void main(String[] args)
    {
        Employee[] staff = new Employee[3];

        staff[0] = new Employee("刘甲",75000,1991,1,1);
        staff[1] = new Employee("刘乙",50000,1991,2,2);
        staff[2] = new Employee("刘丙",30000,1991,3,3);

        for (Employee e : staff)
            e.raiseSalary(5);

        for (Employee e : staff)
        System.out.println("name="+e.getName()+",salary="+e.getSalary()
                                              +",hireDay="+e.getHireDay());
    }
}

class Employee
{
    private String name;
    private double salary;
    private LocalDate hireDay;

    public Employee(String n, double s, int year, int month, int day)
    {
        name = n;
        salary = s;
        hireDay = LocalDate.of(year,month,day);

    }

    public String getName()
    {
        return name;
    }

    public double getSalary()
    {
        return salary;
    }

    public LocalDate getHireDay()
    {
        return hireDay;
    }

    public void raiseSalary(double byPercent)
    {
        double raise = salary * byPercent / 100;
        salary += raise;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值