今天就总结理清一下关于面向对象和面向过程的程序设计的一些不一样特色,以及讲下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 */
博客园一位大佬模块化