今天就總結理清一下關於面向對象和麪向過程的程序設計的一些不一樣特色,以及講下static關鍵字。html
「static方法就是沒有this的方法。在static方法內部不能調用非靜態方法,反過來是能夠的。並且能夠在沒有建立任何對象的前提下,僅僅經過類自己來調用static方法。這實際上正是static方法的主要用途。」——《Java編程思想》java
先講static關鍵字並不會影響變量或者方法的做用域。與c/c++的static不一樣。在C/C++中static是能夠做用域局部變量的,可是在Java中切記:static是不容許用來修飾局部變量。c++
這裏的printIn方法中調用getInfo()會出錯,由於靜態不能調用非靜態。裏面會報錯「Cannot make a static reference to the non-static method getInfo() from the type BookJava(603979977)」,這英文也很好理解。編程
public class statictest {//考察這個代碼的打印狀況 //3 第三步 Person person = new Person("Test"); //這裏是第一個person參數:test 5運行完4後就開始經過構造器來生成對象,這裏Person沒有加載過,去找Person static { //3有static塊,直接運行這一步。因此一開始打印這一句 System.out.println("test static"); } public statictest() { System.out.println("test constructor"); //7打印第五句 } public static void main(String[] args) { //1主方法入口,第一先讀取這裏 new MyClass(); } } class Person { //6過來就運行static塊,打印第三句 static { System.out.println("person static"); } public Person(String str) { //6打印第一個參數test,第四句 System.out.println("person " + str); }} class MyClass extends statictest { //2繼承的是statictest類,因此先看上面的statictest Person person = new Person("MyClass"); //8運行完stasictest,開始打印這裏的person static{ //4加載statictest完,回來加載MyClass,發現static,直接第二步打印 System.out.println("myclass static"); } public MyClass() { System.out.println("myclass constructor"); //9最後運行到這一步,打印出最後一句 } } /*答案 test static myclass static person static person Testtest constructorperson MyClassmyclass constructor */
博客園一位大佬模塊化