兩隻貓:
貓1: 花色,1歲,叫小花
貓2:白色,2歲,叫小白
問:當輸入貓的名字時,輸出貓的顏色和歲數
當用過程式語言時候,會發現,變量很分散。
此時引入類:
可以提取一些共同的東西,比如提取貓類。
做一個類
class Cat{ //類名首字母大寫
int age;
String name;
String color;
}
創建一個對象
Cat cat1 = new Cat();
cat1.age = 1;
cat1.name = "小花";
cat1.color = "花色";
-類是抽象的、概念的、代表一類事物,比如人類、貓類……
-對象是具體的,實際的,代表一個具體事物
-類是對象的模板,對象是類的一個個體,實例
對象賦值
Person a = new Person();
a.age = 10;
a.name = "Jone";
Person b;
b = a;
System.out.println(b.age);
會輸出:10
爲什麼麼??!!
Person a = new Person(); 執行之後,內存就會分配一片空間給a;a指向這個空間。
a.age = 10;
a.name = “Jone”; 這兩句就會在指定的地方賦值。
Person b; 這句僅僅是聲明瞭b這個變量,但是沒有new 空間。
b = a; b也指向a所指向的空間。
b.age = 9;
很自然地,這個也導致了a的age也是9;
因爲他們指向的是同一個空間。(類似於指針)
對象總是在內存中存在的
程序員使用類模板創建對象。(new 對象,然後存在內存中)
內存中能存多少對象,取決於內存的大小。
但是大小是有限的,所以要進行垃圾回收。java虛擬機自動回收。但是有時候也會發生內存泄露。
剛纔只是定義了一些變量,也就是成員變量,接下來介紹成員方法。
成員方法
class Person{
int age;
String name;
public void speak(){
System.out.println("I am a good man!");
}
}
java 命名規範
方法名首字母小寫,類名首字母大寫。
myCry 或者 my_cry
訪問修飾符 返回類型 方法名 (參數列表){
函數體;
}
構造方法(構造函數)
在創建對象的時候,可以初始化一些屬性。
構造方法特點
- 構造方法名和類名相同
- 沒有返回值
- 在創建一個新的對象的時候,系統會自動的調用該類的構造方法完成對新對象的初始化。
- 一個類可以有多個構造方法
- 每個類都有一個默認的構造方法(在你不寫構造方法的時候)
class Person{
int age;
String name;
public Person(int age, String name){
age = age;
name = name;
}
}
此時,創建的時候就需要指定值
Person p1 = new Person(1,"Jack");
其實,之前就有一個默認的構造方法。不含參數。系統自動生成的。你不寫的時候就會調用這個,當你寫一個的時候,就覆蓋了這個默認構造方法。
class Person{
int age;
String name;
//默認構造方法
public Person(){
}
public Person(int age, String name){
age = age;
name = name;
}
}
一個類可以有多個不同的構造方法。比如:
class Person{
int age;
String name;
//默認構造方法
public Person(){
}
public Person(int age, String name){
age = age;
name = name;
}
public Person(String name){
name = name;
}
}
調用哪個構造方法取決於所給的參數匹配哪個。