• 匿名对象与非匿名对象的区别


     类封装完以后就可以通过使用new关键字和类的构造方法来创建对象,这种对象分为两种:匿名对象与非匿名对象。何为匿名对象,何为非匿名对象呢?举个例子:假如有如下类:

            package com.heima.vo;

            public class Student{
                        private String name="lisi";
                        private int age=12;
                        public void print(){

                                    System.out.println(name+":"+age);
                       }
            }

            这种形式的对象称之为匿名对象:new Student();

            这种形式的对象称之为非匿名对象:Student stu=new Student(); 

            两者的区别:

                    1、两者的结构不同,这一点通过其表现形式一目了然,在此不作赘述;

                    2、在内存中的分布不同:匿名对象创建的对象只存在于堆中;非匿名对象创建对象时的对象虽然也在堆中,但其类变量却在栈中,栈中的类变量通过创建变量的内存地址来指向相应的对象。

                    3、①匿名对象调用方法有意义,而调用类中的属性则没有意义:例如:new Student().name="wangwu";,这属于使用匿名对象调用属性,那么为什么说这样做没有意义呢?当代码执行到这一行代码时则修改new Student()对象的name属性,可是当该条语句被执行后呢?由于这时new Student()没有继续引用,所以此对象在堆中就成了垃圾。那么为什么说匿名对象调用方法有意义呢?方法存在于栈空间,当在内存中创建的对象调用方法时,JVM开始为局部变量开辟内存空间,方法开始执行,方法强调其功能,对象调用方法可以完成其功能,所以匿名对象调用方法有意义。

                    ②非匿名对象调用方法或调用类中的属性都有意义(其中前者不在累述,请参见第①点):例如:Student stu=new Student();,stu.name="wangwu"这属于使用非匿名对象调用属性,那么为什么说这样做有意义呢?当代码执行到这一行代码时则修改stu对象的那么属性,此时使用该对象调用print()方法则输出的name值为wangwu,鉴于这一点所以认为非匿名对象调用属性实用意义的。

  • 相关阅读:
    PartialView
    常用取默认值
    迁移环境或升级正常功能出bug常见原因
    模拟登陆语法
    fsg报表相关
    常用数组定义方式
    to_char函数 官方文档详解(数字格式转换和日期转换)
    个人工作window10常用快捷键
    ebs常见概念解释
    常用ASCII码和字符的转换
  • 原文地址:https://www.cnblogs.com/aiqingqing/p/4582468.html
Copyright © 2020-2023  润新知