類:類是對一類事物共性的抽象。
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;
}
}