類和物件
什么是類
類是一組相關屬性和行為的集合,可以看作是一類事物的模板,比如說:無論中年人、老年人還是小孩,都有身高、體重(這是屬性),都會吃飯、睡覺(這是行為),那么我們就可以抽取出這些共有的屬性和行為,封裝為一個類,類由兩部分組成:
- 屬性:事物的狀態資訊
- 行為:事物能夠做啥
什么是物件
物件是某類事物的具體體現,物件是類的一個實體,比如說:一株蒲公英是植物類的具體實體,
物件和類的關系
- 類是物件的抽象
- 物件是類的具體
類的定義
格式
修飾符 class關鍵字 類名{
//成員變數(屬性)
//成員方法(行為)
}
定義類
public class Student{
String name;//姓名
int age;//年齡
//吃飯
public void eat(){
System.out.println("吃飯");
}
}
Student是類名,name和age是成員變數(屬性),定義的方式和宣告普通變數一樣;eat是成員方法(行為),
創建和使用物件
格式
類名 物件名=new 類名();
public static void main(String[] args){
//創建Student類實體
Student s=new Student();
//使用成員變數
System.out.println(s.name);//null
System.out.println(s.age);//0
//呼叫eat方法
s.eat();
}
成員變數的默認值
如果沒有對成員變數進行賦值的話,那么將會使用它們的默認值

public class Student {
int age;
float weight;
char sex;
boolean isMan;
String name;
public void eat(){
System.out.println("吃飯");
}
public static void main(String[] args) {
Student s=new Student();
System.out.println(s.age);//0
System.out.println(s.weight);//0.0
System.out.println(s.isMan);//false
System.out.println(s.name);//null
System.out.println(s.sex=='\u0000');//true
}
}
區域變數
區域變數在方法內部定義
public class Student {
int age;
public void say(){
//定義區域變數a
int a=1;
System.out.println(a);
}
//形參也是區域變數
public void hel(int a){
System.out.println(a);
}
}
成員變數和區域變數的區別
-
在類中的位置不同
成員變數定義在類中、方法外
區域變數定義在方法中或方法宣告上(形參)
-
作用范圍不同
成員變數作用范圍是整個類
區域變數的作用范圍是它所在的方法
public class Student {
int age;
public void say(){
//定義區域變數a
int a=1;
System.out.println(age);
System.out.println(a);
}
public void hel(){
System.out.println(age);
//System.out.println(a); 無法訪問到a
}
}
是否有默認值
成員變數有默認值
區域變數沒有默認值,必須定義賦值,然后使用
public void say(){
int a;
//System.out.println(a); 未賦值無法使用
}
-
在記憶體的位置
成員變數在
堆記憶體中區域變數在
堆疊記憶體中 -
生命周期不同
成員變數隨著物件的創建而存在,隨著物件的消失而消失
區域變數隨著方法的呼叫而存在,方法呼叫完畢它便消失
封裝概述
封裝是指將資料和操作資料的方法系結起來,對資料的訪問只能通過定義的介面,我們在類中撰寫的方法就是對實作細節的一種封裝;我們撰寫的類就是對資料和資料操作的封裝,
封裝步驟
-
使用
private修飾符將變數修飾為私有變數(只有本類中可以訪問) -
對外提供公有的可以訪問私有變數的方法,如getXXX()方法和setXXX()方法
public class Test1 {
public static void main(String[] args) {
Person p=new Person();
//System.out.println(p.name); 無法直接訪問
System.out.println(p.getName());//null 只能通過對外提供的介面進行訪問
}
}
class Person{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
注意
一個.java檔案中可以定義多個類,但是只能有一個類使用public修飾符
this關鍵字代表正在操作的那個物件,this.name表示該物件的成員變數name,區別于區域變數name
構造方法
我們知道,想要使用物件內的東西,必須要先使用new關鍵字創建物件,那么它是怎么創建出來的呢?答案就是構造方法,可是我們的類中沒有定義構造方法啊?雖然沒有定義,但是我們每個類都有一個默認值的無參構造方法,我們在new物件的時候就會呼叫構造方法,那么我們該如何定義自己的構造方法呢?
格式
【修飾符】 類名(【引數串列】){
//代碼
}
注意點
-
構造方法的名字必須和類名一致
-
構造方法沒有回傳值(其實是省略了,因為構造方法只能回傳本類的型別)
-
一旦自己DIY了構造方法,那么默認的無參構造方法就無效了
-
沒有引數串列的是無參構造方法,有引數串列的是有參構造方法
-
我們可以在一個類中定義多個構造方法
public class Test1 {
public static void main(String[] args) {
//使用無參構造創建物件
Person p1=new Person();
//使用有參構造創建物件
Person p2=new Person("張三");
}
}
class Person{
private String name;
private int age;
//無參構造方法
public Person(){
System.out.println("我是無參構造方法");
}
//我是有參構造方法
public Person(String name){
System.out.println(name);
System.out.println("我是有參構造方法");
}
}
執行結果: 我是無參構造方法 張三> 我是有參構造方法
使用構造實作封裝
前面通過撰寫setXXX方法和getXXX方法以及私有化成員變數實作封裝,這里我們通過構造方法實作封裝
class Person{
private String name;
private int age;
//無參構造方法
public Person(){
System.out.println("我是無參構造方法");
}
//我是有參構造方法
public Person(String name,int age){
System.out.println("我是有參構造");
this.name=name;
this.age=age;
}
}
public class Test1 {
public static void main(String[] args) {
//使用無參構造創建物件
Person p1=new Person();
//使用有參構造創建物件
Person p2=new Person("張三",23);
}
}
我們無法訪問物件的成員變數(屬性),只能通過構造進行訪問
JavaBean
JavaBean是java語言撰寫類的一種標準規范,符合JavaBean`的類必須要滿足以下條件:
-
類必須是具體和公開的(使用public修飾)
-
類必須有無參構造方法(有參構造建議加上)
-
必須要有操作成員變數的
setXXX方法和getXXX方法
class Person{
private String name;
private int age;
//無參構造方法
public Person(){
System.out.println("我是無參構造方法");
}
//我是有參構造方法
public Person(String name,int age){
System.out.println("我是有參構造");
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
最后
感謝你看到這里,文章有什么不足還請指正,覺得文章對你有幫助的話記得給我點個贊,每天都會分享java相技術文章或行業資訊,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/132223.html
標籤:Java
上一篇:Linux之父帶1.2億程式員如何深度剖析Git底層原理檔案
下一篇:Helm部署和體驗jenkins
