面向對象(Object Oriented)java
棧的特色
一、棧描述的是方法執行的內存模型。每一個方法被調用都會建立一個棧幀(操做數,局部變量,方法出口等)
二、JVM爲每一個線程建立一個棧,用於存放該線程執行方法的信息(實際參數,局部變量等)
三、棧屬於線程私有的,不能實現線程間的共享。
四、棧的存儲特性:先進後出(彈夾)
五、棧由系統自動分配一個連續的內存空間,速度快!數組
堆的特色
一、堆用於存儲建立好的對象和數組(數組也是對象)
二、JVM只有一個堆,被全部線程共享
三、堆是一個不連續的內存空間,分配靈活,速度慢!
四、堆的存儲特性:先進先出dom
方法區(又叫靜態區)
一、JVM只有一個方法區,被全部線程共享。
二、方法區實際上也是堆,只是用於存儲類、常量相關的信息。
三、用來存放程序中永遠不變的內容(類的信息,靜態變量,字符串常量)
jvm
1 package com.boom0827; 2 3 /** 4 * 練習: 定義一個學生類:描述學生,屬性,年齡,age,分數score,名字 String name,性別 String gender 5 * 而後定義默認無參的構造方法,並對全部的屬性 進行初始化 而後定義帶參數的構造方法,四個參數,對全部的屬性經過參數賦值。 而後定義 一個成員方法 show 6 * 展現學生的屬性的。 定義測試類,生成兩個學生對象,一個調用默認無參的構造方法,一個調用 帶參數的構造方法 而後分別調用 show 方法。 7 * 8 * @author Administrator 9 * 10 */ 11 12 public class Test02 { 13 14 public static void main(String[] args) { 15 Student student = new Student(); 16 System.out.println("------無參的構造方法------"); 17 student.show(); 18 System.out.println("------有參的構造方法------"); 19 Student student2 = new Student("小紅", "女", 18, 60); 20 student2.show(); 21 } 22 23 } 24 25 // 建立一個學生類 26 class Student { 27 String name; 28 String gender; 29 int age; 30 int score; 31 32 // 學生類的無參構造方法 初始化成員變量 33 public Student() { 34 name = "小明"; 35 gender = "男"; 36 age = 18; 37 score = 60; 38 } 39 40 // 定義有參的構造方法 41 public Student(String setNname, String setGender, int setAge, int setScore) { 42 name = setNname; 43 gender = setGender; 44 age = setAge; 45 score = setScore; 46 } 47 48 void show() { 49 System.out.println("姓名:" + name + "\n性別:" + gender + "\n年齡:" + age + "\n分數:" + score); 50 } 51 }
對象數組ide
1 /** 2 * 對象數組隨機賦值初始化 3 * 4 * @author Administrator 5 * 6 */ 7 public class Test03 { 8 public static void main(String[] args) { 9 // 建立5個學生 10 Student[] students = new Student[5]; 11 12 // 打印,空數據的信息 13 for (Student student : students) { 14 System.out.println(student);// null 15 } 16 17 // 初始化隨機數組分配姓名 18 String[] names = { "小紅", "小黑", "小青", "小紫", "小綠", "小橙", "小藍", "小黃", "小剛" }; 19 // 對五個學生逐一進行初始化 20 for (int i = 0; i < students.length; i++) { 21 // 隨機初始化姓名 22 int index = getRandomNumber(0, names.length); 23 String name = names[index]; 24 // 隨機初始化性別 25 String sex = getRandomNumber(0, 2) == 0 ? "男" : "女"; 26 // 隨機年齡 27 int age = getRandomNumber(18, 25); 28 // 隨機分數 29 int score = getRandomNumber(60, 101); 30 31 // 賦值 32 students[i] = new Student(name, sex, age, score); 33 students[i].show(); 34 } 35 36 } 37 38 // 獲取隨機數 39 public static int getRandomNumber(int min, int max) { 40 return (int) (Math.random() * (max - min) + min); 41 } 42 } 43 44 class Student { 45 String name; 46 String sex; 47 int age; 48 int score; 49 50 // 建立構造方法初始化屬性值 51 public Student(String name, String sex, int age, int score) { 52 this.name = name; 53 this.sex = sex; 54 this.age = age; 55 this.score = score; 56 } 57 58 // 顯示學生的基本信息 59 void show() { 60 System.out.println("姓名 = " + name + "\t年齡 = " + age + "\t性別 = " + sex + "\t成績:" + score); 61 } 62 }
this關鍵字
this關鍵字:當成員和局部變量重名,this關鍵字區分;
this表明對象(當前對象),表明當前對象的一個引用
this關鍵字必須放在第一行(Java虛擬機先初始化值)
this不能用和static關鍵字共存
函數
static關鍵字
static特色:
1, static是一個修飾符,用於修飾成員變量和成員方法;不能修飾局部變量
2, static修飾的成員被全部的對象所共享;
3, static優先於對象存在,static的成員隨着類的加載就已存在;
4, static修飾的成員可直接被類名所調用【類名.靜態成員】;
5, static修飾的數據是共享數據,對象中存儲的是特有數據;
測試
成員變量跟靜態變量的區別:
1,生命週期不一樣
成員變量隨着對象建立而存在,隨着對象的回收而釋放;
靜態變量隨着類的加載而存在,隨着類的消失而釋放。(虛擬機消失)
2,調用方式不一樣
成員變量只能被對象調用;
靜態變量能夠被對象調用,也可被直接被類名調用。
3,別名不一樣
成員變量也稱實例變量;
靜態變量也稱類變量
4,數據的存儲位置不一樣
成員變量數據存儲在堆內存的對象中,也叫對象的特有數據;
靜態變量數據存儲在方法區(靜態區),也叫對象的共享數據。
Static使用注意事項:
1, 靜態方法只能訪問靜態成員;
2, 靜態方法中不可使用this或者super關鍵字(this和super是賴於某個對象的);
3, 主函數是靜態的 (由jvm 負責調用執行。不須要建立所在類的對象就能夠直接運行)this
靜態代碼塊
特色:在類加載的時候,執行,而且僅執行一次。對類的靜態成員變量初始化,並執行靜態代碼塊。
做用:若是某些代碼但願僅執行一次,能夠在這裏面進行,還有對靜態成員變量初始化。
編碼