@(Java知識點總結)[Java, Java面向對象]java
[toc]程序員
Java對象的使用時經過引用進行的
基本數據類型直接賦值,引用類型傳遞的是一個地址
棧:存放局部變量
堆:存放new出來的對象
方法區:存放類的信息(代碼) 、static變量、常量池(字符串常量)等...this
Student s1 = new Student(); s1.name="張三"; s1.study(); s1.sayHello("王武"); Student s2 = new Student(); s2.age = 18; s2.name="李四";
靜態初始化代碼塊spa
static{code
...
}對象
若是但願加載後,對整個類進行某些初始化操做,可使用static初始化塊繼承
是在類初始化時執行,不是在建立對象時執行ip
靜態初始化塊中不能訪問非static成員內存
執行順序:上溯到Object類,先執行Object的靜態初始化塊,再向下執行子類的靜態初始化塊,直到咱們的類的靜態初始化塊爲止資源
多態性是OOP的一個重要特性,主要是用來實現動態聯編的,換句話說,就是程序的最終狀態只有在執行過程當中才被決定而非在編譯期間就決定了。
這對於大型信息來講能提升系統的靈活性和擴展性
引用變量的兩種類型:
多態的存在要有3個必要條件:
子類若是重寫了父類中的方法,方法調用的時候與實際類類型相綁定(傳遞的隱式參數this指向的開闢內存空間的類的對象,而不是父類的對象)
public class Test { public static void testAnimalVoice(Animal c) { c.voice(); if (c instanceof Cat) { ((Cat) c).catchMouse(); } } public static void main(String[] args) { Animal a = new Cat(); Cat a2 = (Cat) a; testAnimalVoice(a); } } class Animal { void voice() { System.out.println("發出動物的叫聲"); } } class Cat extends Animal { private String name = "Tom"; void catchMouse() { //方法存在隱式參數this和super super.voice(); System.out.println(this.name+"抓老鼠"); } }