2015/11/19 内部类

2015/11/19 由于内部类引起的学习

   

       为了什么写博客-----怕忘  ;    为了什么怕忘 ---怕问了不会 ;  为了什么怕问了不会  ---怕经验少 ;为了什么怕经验少----怕赚钱少;

       学习只是为了赚钱 ,所以必须努力。

     

       内部类:今天看见同事写的内部类,我起初的想法就是写这个几把玩意做毛啊,不费事啊,后来想想,算了为了多赚钱还是学习下吧。


      以maven启动的测试类为例,内部类其实就相当于一个可以包含方法的方法

public class RunTest {
    Logger logger = LoggerFactory.getLogger(RunTest.class);

    String name="wulei";

    public void test111(){
        new neibulei("11111").neibutest();
        //和neibulei nei=new neibulei("1111"); nei.nebutest();一样,只是多了一个对象的引用
        
        new neibulei().neibutest();
    }
   private  class neibulei{
       public neibulei(){
           name="wangmin";
       }
       public neibulei(String name123){
           name=name123;
       }
       public void neibutest(){
           name="wuleiwangmin";
           logger.info("name:{}",name);
       }

    }

    @Test
    public void test(){
        test111();
    }

}
好处是啥我也不知道,感觉就是闲的 分开写不好么 ,非写一起,好处以后知道再补充吧。

里面用到内部类,就设计到构造函数什么时候调用,构造函数的作用了。

   

    构造器:与类同名,可以有参数,可以没有(爱有几个有几个)没有返回值(不能写什么void什么玩意的),随着new去调用(所以一般就是个初始化,没人在这个里面进行别的操作,也不是说不能这么做,也许大家就是定个规范,不想这么做吧 )


                    如果执行的是有参数的构造函数,则默认的无参构造函数不会执行,如果执行的时候new 类().方法()   这个时候先要去执行下无参的构造方法,之后再调用方法。

                  构造器其实我感觉也没啥用,就是个初始化,spring都自己管理对象了 ,谁知道用这个赋值做毛,以后知道再补充吧,构造器都看了,肯定想到的是那些对象空间的分配,什么对象,什么值存在什么位置上。


    内存空间:所有的内存分配,你的先把程序给他编译运行起来啦,不编译谈毛运行(运行需要class文件),不运行谈毛内存分配,在java里面写new,只是写个文字,不编译,不运行不会分配空间

                        首先内存的区域有大致的几个地方分配------栈,堆,静态变量存储区,代码区

   

首先思考的三个问题:1.什么变量?存哪?

                                         2.when分空间

                                         3.when释放


              栈(对象的引用,局部变量,形参)

              堆(new出来的数据,成员变量)

              静态变量存储区(静态变量)

              代码区(方法,.class)

              真不知道知道这玩意有啥用,写错程序不就自己报错了么,为了赚钱还是研究研究吧,下面举个例子

   

在一个类里面   Person p;(这时栈里面什么也没有)

                           Person p    =newPerson ();(这时程序开始工作啦先看看有没有class,如果没有的话是无法创建对象的)

                           这个时候首先做的事情不是把对象的引用放在栈里面


现在处于程序的运行阶段jvm的生命周期是存活的(java运行时需要虚拟机,一个jvm的生命周期是指启动到退出的过程,程序的运行按钮从红到灰的这个过程,一个jvm生命周期一个类只加载一次,所以改了java文件,需要重启服务)


                           1.加载类,把class加载到内存放在代码区,同时把静态变量加载进静态变量存储区

                           2.创建对象的引用在中(存了一个地址)

                           3.如果 Person p1    =newPerson ();这个时候不用加载class,分配静态变量存储,直接创建对象的引用(一个jvm相同的类只加载一次,静态变量应该也是),同时对这个类里面的成员变量分配空间,存在中,因为是new才会分配的,所以是堆不是栈

                           4.如果Student stu=new Student();这个时候还需要加载Student类,之后加载这个类的静态变量,创建对象的引用

      

这个时候我感觉最需要思考的一个问题是:tm的一个类什么时候被加载难道只有new么

                           显然不是,类加载有两种,new,调用静态方法

之后面试的问题来了,静态方法中可以直接使用成员变量和方法不------>答案果断no啊

                            分析:静态方法(类加载时create),成员变量,方法(new是create),现在尼玛都没有new,而是另一种加载类的方式,何来可以静态方法调用成员变量,方法

                                    

当这个类去调用别的类的方法的时候(如果只是new类,没有调用方法是不会对局部变量和形参分配内存的),这个时候就有形参,局部变量的存在了,这个时候内存分配的位置是



    释放资源:对应静态变量(1个jvm生命周期),所以很少用static,如果只有一次,机器不重启一直处于一个jvm中,不会释放资源

                        对类的成员变量,在类对象销毁的时候销毁

                       对形参,局部变量,方法结束回收资源



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值