对象的生与死

131 篇文章 1 订阅

对象的生与死

栈与堆:生存空间

 对象的生存空间堆,和方法调用及变量的生存空间栈
 当java虚拟机启动的时候,它自动从内存中扣取一块内存,并以此区段来执行java程序,至于有多少内存以及你是否能够调整它都要取决于java虚拟机和平台的版本。

变量的生存空间:

  局部变量:栈
  实例变量:所属的对象中

当调用一个方法的时候,该方法会放在调用栈的栈顶。实际被堆上栈的是堆栈块,它带有方法的状态,包括执行到哪一程序,以及所有的局部变量

栈顶的方法是目前正在执行的方法

为什么要了解堆与栈的机制?

 如果想要了解变量的有效范围,对象的建立,异常处理,内存管理和线程处理,认识堆栈是很重要的

构造方法,new 的时候会执行其中的代码

如何分辨构造函数和方法:

  java中可以有与类同名的方法,但是这样的方法有返回类型

构造函数不会被继承

父类的构造函数在对象的生命中所扮演的角色

  在创建新对象的时候,所有继承下来的构造函数都会执行
  构造函数链(从上网下运行)
  调用父类的构造函数——super()
  带参数的super(参数),因为在父类中,构造函数可以被重载,如果不给参数,那么就只会调用无参数的构造方法。如果有参数,则根据参数来调用相关的构造方法
  由于父类必须在子类创建完成之前就需要完整地成型,因此super()在构造函数中必须写在首部,不能写在语句的后面,因为子类可能会用到某些继承下来的方法必须调用父类的实例变量

有参数的父类构造函数

  没有无参数的构造函数的类将不能被继承

使用this()来从某个构造函数调用同一个类的另一个构造函数

  this()只能用在构造函数中,且必须是第一行语句
  super()与this()不能兼得
  当我们不同的重载的构造函数之间仅仅有很小的不同的时候,如果我们仍然将大量相同的程序代码进行多次复制,那么就会造成空间的大大浪费,因此,在这里,我们会在构造函数中使用this()来调用一个共所有的构造函数共享的程序的构造函数,由它向上调取父类的构造函数

对象的生命周期

  和引用相关
  局部变量只能在声明它的方法在执行中才能被使用
  只要有活着的引用,对象也就会活着
  除非有对对象的引用,否则该对象一点意义都没有
  当最后一个引用消失时,对象就会变成可回收的

三种方式释放对象的引用:

  1.引用被赋值到其他的对象上,因为这样再也没有引用变量能够取得那个对象存储的地址
  2.引用永久性离开他的范围(所在的方法结束)
  3.直接将引用设定为null

数字与静态
1.在静态中没有this这个关键字

如何理解?
     静态是随着类的加载而加载的,this是随着对象的创建而存在
     静态比对象先存在
     一个静态的方法代表说,一种不依靠实例变量也就不需要对象的行为
静态的方法只能访问静态的成员变量和静态的成员方法
     静态方法:
       成员变量只能访问静态变量
       成员方法只能访问静态方法
     非静态方法:
       成员变量:可以访问静态静态变量也可以访问成员变量
       成员方法:都可以
 
可以用私有的构造函数来限制非抽象类被初始化
静态的final变量为常数
    一个被标记的静态变量代表它一旦被初始化之后就不会改动
    public static final double PI = 3.141592653589793

final

静态final变量的初始化  
    1.声明的时候
    public static final int  ddd=25;
    2.在静态初始化过程中
    public static final int ddd;
     static{
        ddd=25;
     }
final不只是用在静态变量上,不管修饰哪一种,都代表它的值不能变动
因此可以使用final来防止方法的覆盖和创建子类
final变量代表你不能改变它的值
final方法代表你不能将它覆盖
final类代表你不能继承该类,也就是创建它的子类

autoboxing

ArrayList <Intteger> lll = new ArrayList<Integer>() ;
此处不能直接声明ArrayList<int>,generic类型规定只能指定类或接口类型,不过由于存在autobox,你可以直接将基本数据类型塞进去
可以让我们在各种地方交换使用primitive主数据类型和它的包装类型
 Integer i =1;
 int c = 12;
 c=i;
 System.out.println(c);

数字的格式化

将想要输出的数字转化为字符串的格式
格式化结构: 
   格式指令  描述要输出的特殊格式
   要格式化的值  不是所有东西都能被格式化,只能格式化相同类型的
     String s = String.format("%,d",1000000);
    %代表一项变量,此变化就是跟在格式化指令后面的参数

格式化说明的格式
   最多有五个部分
    %[argument number][flags][width][.precision]type
      其中只有%和type是必要的
    
 超过一项以上的参数
    String s = String.format("%,d %,d",1000000,23231);
    这表示第一项参数取得是第一个%的格式,第二个是第二个百分号的格式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值