zoukankan      html  css  js  c++  java
  • 对JAVA的static深刻理解(结合C语言的思考)

     1 public class statictest {
     2 
     3     
     4     String X = "我是非静态变量";
     5     
     6     
     7     static int butterfly =0;
     8     static String staticX = "我是静态变量" ;
     9     static String staticZ="我也是静态变量";
    10     
    11     
    12     statictest(){
    13         System.out.println("我是构造器");
    14     }
    15     
    16     
    17     
    18     public static void main(String[] args) {
    19         statictest this1 =new statictest();//new出这个对象只是为了下面的fangfa2()用,但即使你用static块里的构造器也没关系
    20         //System.out.println(ff3);  错,说明静态方法中的变量也是个临时变量,并不是全局的
    21         //System.out.println(staticY);  错,说明即使在STATIC块里定义的量,也是一个临时变量,并不是全局的,也不是这个类中的
    22         //this.fangfa2();  错,说明this是一个对象,不能用在static方法中
    23         this1.fangfa2();
    24         fangfa4();//单纯的想说明不需用this1引用
    25         
    26     }
    27 
    28     
    29     static{
    30         statictest this2 =new statictest();//只为了说明可以在static块中就早点进行new出一个对象,目的是运行一下构造器
    31         String staticY ="staticy";
    32         //System.out.println(x);错
    33         System.out.println(staticY);
    34         //this.fangfa1();这样写错,因为this是表示自己这个对象,是一个对象值,而static是先于对象加载的
    35         fangfa1();//说明static块可以调用静态方法方法
    36 //        if(true){} 对的,说明其实static块就可以当成一个没有名字,不能被调用的特殊的静态方法,它的实质是一个静态方法,同时还相当于main方法一样可以
    37 //        运行,而且比main先运行
    38     }
    39     
    40     static void fangfa0(){
    41         System.out.println("我是蝴蝶");
    42     }//这个方法只是想表明我喜欢蝴蝶,没什么具体用处
    43     
    44     
    45     
    46     
    47     static void fangfa1(){
    48         System.out.println(staticX);
    49         //System.out.println(X);错,因为静态方法不能调用非静态量
    50         System.out.println(fangfa3());
    51         //System.out.println(ff3) ;错,说明ff3即使在静态方法中定义的,但是它还是一个临时变量,但是如果在它前面加上static就不会错了
    52         
    53         
    54     }
    55     
    56     static String fangfa3(){
    57          String ff3 ="我是fangfa3";
    58         return ff3;
    59         
    60     }
    61     
    62     static void fangfa4(){
    63          fangfa0();          
    64     }
    65     
    66     
    67     void fangfa2(){
    68         System.out.println(staticZ);//静态方法可以调用静态量
    69         this.X ="2";
    70     }
    71     
    72     
    73     
    74 }
    75 /*打印结果:*/
    76 //我是构造器
    77 //staticy
    78 //我是静态变量
    79 //我是fangfa3
    80 //我是构造器
    81 //我也是静态变量
    82 //我是蝴蝶
    83 
    84 
    85 /* 总结过程:1、static加载并初始化:先对静态量(变量和方法)进行初始化,对方法的初始化的意思是说,对这个变量名进行指针的赋值;对变量的初始化的就是
    86  * 直接对这个变量进行一般数据类型的赋值
    87  *      2、static执行:然后对static块中的内容进行执行,它相当于main方法一样先被执行,是静态的执行入口好比“main”,
    88  *      3、非静态的加载并初始化:轮到所以的非静态的变量和方法的加载及它的赋值
    89  *      4、执行构造器
    90  *      5、非静态的执行:对main方法进行执行
    91  * 注意:方法的赋值和调用是2个概念,方法的赋值是对这个方法名的也就是间接变量进行地址指针的赋值;而方法的调用是调用这个方法
    92  * 注意:还有非静态块没提到
    93  * 注意:执行和加载和初始化这3个概念一定要分清楚
    94  * 注意:static是所有的该类的对象所共有,也就是一个 只有这1个,而非static量是每一个对象自己就有一个,好比最开始新建的变量X,this2.X和this1.X并不是
    95  * 同一个
    96  * 注意:因为static量是共有的,所以还是前面不要加对象名而直接调用比较好,这样对概念的理解有帮助
    97  */


     

  • 相关阅读:
    常用sql
    epoll
    poll
    ShardedJedis的分片原理
    puppet(一种Linux、Unix、windows平台的集中配置管理系统)
    zabbix(一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案)
    1111
    http_load(基于linux平台的一种性能测试工具)
    zenoss(智能监控软件)
    SaltStack(自动化运维工具)
  • 原文地址:https://www.cnblogs.com/eiaino/p/3935258.html
Copyright © 2011-2022 走看看