目錄
1、什么是類和物件
2、成員變數
2.1、類的實體化
2.2、普通成員變數
2.3、靜態成員變數
3、類的方法
3.1、普通成員的方法
3.2、靜態成員變數的方法
4、封裝
4.1private實作封裝
4.2 getter 、 seetter 方法
5、構造方法
5.1 代碼舉例:
5.2this的意義
6、構造代碼塊
6.1實體代碼塊
6.2靜態代碼塊
1、什么是類和物件
1.類就相當于一個模板,可以產生多個物件
2、在Java中使用關鍵字class來宣告類,即創造一個新的資料型別,類在Java中屬于參考類,
3、物件就是接收類的變數
基本語法:
//創建類
class <class_name> {
field;//成員屬性
method;//成員方法
}
//實體化物件
<class_name> <物件名> = <class_name> ();
class為定義類的關鍵字, <class_name>為類的名字,{}為類的主體,
類
中的元素稱為:成員屬性,類中的函式稱為:成員方法,
class Work {
public int size;
public float a;
}
2、成員變數
2.1、類的實體化
類只是一個模型一樣的東西,限定了類有哪些成員變數,
一個類可以實體化出多個物件,實體化出的物件占用實際的物理空間,存盤類成員變數
成員變數分為普通成員變數和靜態成員變數,
2.2、普通成員變數
普通成員變數需要在main函式里new新的物件,普通成員變數可以new多個物件,
注意事項
1.使用 . 訪問物件的欄位
2.“訪問”既包含讀,也包含寫
3.對于一個物件的欄位如果沒有設定初始值,那么會被設定一個默認的初始值
默認潛規則
對于各種數字型別,默認值為0
對于boolean型別,默認值為false
對于參考型別(String,Array,以及自定制類),默認值為null
//類,一定是要小駝峰形式
class Person{
public String name;//public是欄位,String是屬性,name是成員變數
public int age;
}
public class ClassAndObject {
public static void main(String[] args) {
//物件1
//普通成員變數需要new一個物件
Person person1 = new Person();
System.out.println(person1.name);
System.out.println(person1.age);
System.out.println("==========");
//物件2
Person person2 = new Person();
person2.name = "fei";
person2.age = 20;
//普通成員變數的訪問需要通過物件的參考來訪問
System.out.println(person2.name);
System.out.println(person2.age);
System.out.println("==========");
//物件2
Person person3 = new Person();
person3.name = "java";
person3.age = 15;
System.out.println(person3.name);
System.out.println(person3.age);
}
}
運行結果

2.3、靜態成員變數
靜態成員變數由static修飾,不需要new一個物件,可以直接呼叫,寫法->類名.成員變數,
不像普通成員變數一樣可以new多個物件從而賦予不同的值,
靜態成員變數值反復使用的,輸出的也是與System.out.println()接近的一個物件,
class Person{
public static int count; //靜態成員變數
}
public class ClassAndObject {
public static void main2(String[] args) {
//靜態成員變數不需要new一個物件,
//直接-》類名.靜態的成員屬性/方法
Person.count = 1;
System.out.println(Person.count);//1
Person.count++;
System.out.println(Person.count);//2
}
}
運行結果

3、類的方法
3.1、普通成員的方法
class Person{
public String name;
public void study() {
System.out.println(name+"在學習");
}
public void sleep() {
System.out.println(name+"在睡覺");
}
}
public class ClassAndObject {
public static void main(String[] args) {
Person person = new Person();
person.name = "fei";
//方法
person.study();
person.sleep();
}
}
運行結果

3.2、靜態成員變數的方法
靜態方法由static修飾
靜態方法屬于類,而不是屬于類的物件
可以直接呼叫靜態方法,而無需創建類的實體
靜態方法可以訪問靜態資料成員,并可以更改靜態資料成員的值
在靜態方法中,不可以訪問非靜態資料成員
class Person{
public static String name;
public static int count; //靜態成員變數
//類方法,就是靜態成員的方法
public static void staticFunc(){
System.out.println("name: "+name+";"+"count = "+count);
}
}
public class ClassAndObject {
public static void main2(String[] args) {
Person.count = 1;
Person.name = "fei";
//靜態方法-》直接-》類.方法,不需要new一個物件來接收方法
Person.staticFunc();
System.out.println("==========");
Person.count++;
System.out.println(Person.name+";"+Person.count);
}
}
運行結果

4、封裝
封裝是用于管理一個軟體代碼的復雜程度的最基本的方法
封裝的本質就是讓類的呼叫者不必太多的了解類的實作者是如何實作類的,只要知道如何使用類就行了,這樣就降低了類使用者的學習和使用成本,從而講道理復雜程度,
4.1private實作封裝
1.private/public 這兩個關鍵字表示“訪問權限控制”,
2.被public 修飾的成員變數或者成員方法,可以直接被類的呼叫者使用,
3.被private 修飾的成員變數或者成員方法,只能在當前類里面使用,不能被類的呼叫者使用,
4.2 getter 、 seetter 方法
getter、setter 是和 private 封裝使用的,通過這兩個方法的介面,可以在物件里面改變成員的賦值,不用擔心類里面的成員變數的改名
代碼舉例
class Person{
//實體成員變數
private String name;
private int age;
//setter、getter 方法的實作
public void setName(String name) {
// name = name; //不能這樣寫
this.name = name;//this呼叫當前物件的參考
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
}
public class ClassAndObject {
public static void main(String[] args) {
Person person = new Person();
//方法的介面,無論類里面的成員變數怎么改名都可以直接參考
person.setName("fei");
String name = person.getName();
person.setAge(21);
int age = person.getAge();
System.out.println("name : "+name+" ; "+"age : "+age);
}
}

5、構造方法
方法名和類名是相同的,且構造方法比較特殊,沒有回傳值,
構造方法是用于一個物件的產生(物件的實體化)
{為物件分配記憶體,呼叫合適的構造方法}
注意事項:
1、如果沒有實作任何的構造方法,編譯器會幫我們默認生成一個不帶引數的構造方法,
2、 每個類中至少有一個構造方法
3、如果當前類有其他構造方法,那么編譯器不會幫我們生成不帶引數的構造方法
4.構造方法可以多載,就是方法名一樣,引數的個數不一樣
5.1 代碼舉例:
class Person{
private String name;
private int age;
public Person() {
System.out.println("Person(): : 不帶引數的構造方法");
}
public Person(String name) {
this.name = name;
System.out.println("Person(String): : 帶1個引數String型別的構造方法");
}
public Person(String name,int age) {
this.name = name;
this.age = age;
System.out.println("Person(String,int): : 帶兩個引數String、int 型別的構造方法");
}
public void show() {
System.out.println("name : "+name+" ; "+"age : "+age);
}
}
public class ClassAndObject {
public static void main(String[] args) {
Person person1 = new Person();//呼叫不帶引數的構造方法
person1.show();//不帶有引數,所以name為初始值null, age為0;
System.out.println("---------------");
Person person2 = new Person("fei");//呼叫一個引數的構造方法
person2.show();//age引數沒帶有,所以age為0;
System.out.println("---------------");
Person person3 = new Person("fei",21);//呼叫兩個引數的構造方法
person3.show();
}
}
運行結果:

5.2this的意義
1、this.data 呼叫當前物件的屬性
2、this.show() 呼叫當前物件的方法
3、this() 呼叫當前物件的其他構造方法,存放在建構式當中
6、構造代碼塊
6.1實體代碼塊
構造塊:定義在類中的代碼塊(不加修飾符),也叫:實體代碼塊,構造代碼塊一班用于初始化實體成員,
class Person{
private String name;
private int age;
{
this.name = "WF";
System.out.println("實體代碼塊");
}
public Person() {
System.out.println("Person(): : 不帶引數的構造方法");
}
public void show() {
System.out.println("name : "+name+" ; "+"age : "+age);
}
}
public class ClassAndObject {
public static void main(String[] args) {
Person person1 = new Person();
System.out.println("----------------");
person1.show();
}
}
運行結果

6.2靜態代碼塊
靜態代碼塊由 static 修飾,一般用于初始化靜態成員屬性
靜態代碼塊不管生成多少個物件,其只會執行一次,且是最先執行的,
class Person{
private String name;
private int age;
public static int size = 10;
{
System.out.println("實體代碼塊");
}
static {
size = 20;//可以改變靜態初始值
System.out.println("靜態成員變數");
}
public Person() {
System.out.println("Person(): : 不帶引數的構造方法");
}
}
public class ClassAndObject {
public static void main(String[] args) {
Person person1 = new Person();
System.out.println("----------------");//分割線
System.out.println(Person.size);//靜態代碼塊
//無論靜態代碼塊放在哪里,都是先列印靜態代碼塊
}
}
運行結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/348353.html
標籤:java
