2015/11/19 内部类

原创 2015年11月19日 15:43:24

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中,不会释放资源

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

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



相关文章推荐

11.内部类.doc

  • 2011年09月06日 07:41
  • 54KB
  • 下载

内部类

定义:内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。 当描述事物时,事物内部还有事物,该事物用内部类描述。因为内部事物在使用外部事物内容。例,...
  • Cleann
  • Cleann
  • 2017年02月01日 12:27
  • 216

2015 7 1 java核心技术 卷1 第6章 接口与内部类

第6章 接口与内部类 首先,介绍一下接口(interface)技术,这种技术主要用来描述类具有什么功能,而并个给出每个功能的实现。一个类可以实现(implment)一个或多个接口,并在需要接口的地方,...

内部类、常用类、正则表达式、File类(2015/8/01)

内部类局部类 内部类、局部类 public class Student { private String name; private int age; p...

import、内部类 day11

1、import  包名.类名 注意:import通常出现在package语句之后,类定义之前. 2、引入系统库中的类 Java语言中的常用包 : 1.       java.lang: 包含Jav...

【Java学习笔记】11.内部类

1、内部类 定义在其他类内部的类被称为内部类 内部类提供了更好的封装,不允许同一包的其他类访问 内部类成员可以访问外部的私有数据 匿名内部类适用于创建仅需要使用一次的类 定义与普通类的区别 1....

Java基础:Day11笔记内容 (内部类、权限修饰符 )

1.内部类 写在类里面的类, 好处是可以访问外部类中的所有成员. 特点: 1、外部类要访问内部类的成员,必须创建对象。 ...

重拾Java回忆录(十一):Java11内部类的使用

什么是内部类:定义在另外一个类中的类,称为内部类 编译完成后产生2个类 Outter.class 和 Outter$Inner.class 内部类的分类 静态内部类:定义在类中使用static描...

JavaSe基础XX11——面向对象——[内部类]

*内部类
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2015/11/19 内部类
举报原因:
原因补充:

(最多只允许输入30个字)