类:类是对一类事物共性的抽象。
1.类与类之间的关系:
依赖(uses-a):如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类,在实际的设计中,应尽可能地减少相互依赖的类,(让类的耦合度最小)
聚合(has-a):类A的对象包含类B的对象
继承(is-a):一个类扩展了另一个 类
2.定义类
格式:
[修饰符] class 类名
{
//属性定义格式: [修饰符] 属性类型 属性名 [属性值];
属性1;
属性2;
……
/*构造器定义格式
[修饰符] 类名(参数列表)
{
方法体
}
*/
构造器1;
构造器2;
……
/*方法定义格式:
[修饰符] 方法返回值类型 方法名(形参列表)
{
方法体
}
*/
方法1;
方法2;
……
}
对象:一切客观存在的事物都可以成为对象。
1.1 对象的元素
属性(也称实例域):对象有什么,对于每个特定的对象都有一组特定的实例域值。这些值得集合就是这个对象的当前状态
方法:对象能做什么,用于操作对象以及存取它们的实例域
1.2 对象的特点
对象的行为:可以对对象施加那些操作,或者对对象施加哪些方法
对象的状态:当施加哪些方法时,对象如和响应
对象标识:如何辨别具有相同行为与状态的不同对象
类和对象的关系
1.类是对象的模板,对象是类的一个实例
2.由类构造对象的过程称为创建类的实例
使用预定义类
1.构造某个类的对象,
2.指定其初始状态
3.对对象应用方法
/*
Date类:它的对象描述一个时间点(精确到毫秒):表示距离一个固定时间点的毫秒数,这个时间点(所谓的纪元)为1970年1月1日00:00:00
*/
import java.util.Date;
public class ObjectAndClass
{
public static void main(String[] args)
{
//1.构造一个Date对象,这个对象被初始化为当前的日期和时间
new Date();
System.out.println(new Date());
//2.对象变量:只引用一个对象,并没有实际包含一个对象
Date t1; //定义了一个对象变量,它可以引用Date类型的对象
//2.1 初始化对象变量
//2.1-1 用新构造的对象初始化这个变量
t1=new Date;
//2.1-2 引用一个已存在的对象
Date t2=new Date();
t1=t2; //t1,t2引用同一个对象
//注:new操作符返回值是一个引用
Date t3=null; //显示的将对象变量设置为null,表示这个对象变量现在没有引用任何对象
//3.使用该对象
System.out.println(t2.toString());
}
}
/*LocalDate是一个不可变的日期时间对象,表示日期,通常被视为年月日。
*/
import java.time.LocalDate;
class ObjectAndClass
{
public static void main(String[] args)
{
LocalDate d1=LocalDate.now(); //使用静态工厂方法代表你调用构造器
LocalDate d2=LocalDate.of(1999,12,31); //根据所提供的年月日来构造一个特定日期的对象
System.out.println(d1.getYear());
System.out.println(d1.getMonthValue());
System.out.println(d1.getDayOfMonth());
}
}
构造器
构造器是一种特殊的方法,用来构造并初始化对象
构造器的名字与类名相同
构造一个类的对象,需要在构造器前面加上 new 操作符定义了一个对象变量,它就可以引用这个类的实例对象,
new 类(); //构造了一个类的对象,它的值是对新创建对象的引用,可以显式地将对象变量设置为null,表示这个对象变量目前没用引用任何对象
使用自定义类
import java.time.LocalDate;
public class ObjectAndClass
{
public static void main(String[] args)
{
Employee emp1=new Employee("叶叶",100,2018,10,23);
/*方法通常有两类参数,第一类参数称为隐式参数(也称方法调用的目标或接受者),出现在方法名前的调用对象,即emp1,第二类参数称为显示参数:位于方法名后面的括号中。
*/
System.out.println(emp1.getName());
System.out.println(emp1.getSalary());
System.out.println(emp1.getD());
}
}
class Employee
{
private String name;
private double salary;
private LocalDate d;
/*构造器与类名相同,构造器总是伴随着new操作符的执行被调用
1.如果在定义类时,没有定义构造器,系统会调用一个无参构造器
2.构造器没有返回值
3.每个类的构造器可以有多个
*/
public Employee(String n,double s,int year,int month,int day)
{
name=n;
salary=s;
d=LocalDate.of(year,month,day);
}
//由于它们只返回实例域值,因此被称为域访问器,同理,可以更改实例域的公有方法被称为域更改器方法
public String getName()
{
return name;
}
public double getSalary()
{
return salary;
}
public LocalDate getD()
{
return d;
}
}