精华内容
下载资源
问答
  • 类和对象之间的关系

    万次阅读 2005-03-08 15:01:00
    随处可见都是对象,小到地上一粒沙,大到中国万里长城,埃及金字塔,所有东西都是对象(万物皆对象)我们之所以会对对象这个词比较陌生,是因为我们平时不直接这么称呼它们,那么我们平时是怎么称呼这些...

      从日常生活中看对象

     其实对象这个名次对我们来说一点也不陌生,因为我们的日常生活中。随处可见的都是对象,小到地上的一粒沙,大到中国的万里长城,埃及的金字塔,所有的东西都是对象(万物皆对象)

    我们之所以会对对象这个词比较陌生,是因为我们平时不直接这么称呼它们,那么我们平时是怎么称呼这些对象呢?通常我们会以这个对象分类的名称来称呼它,例如路上有许多车子,天空有许多鸟,这里的车子,鸟都只是一种对象的分类而已,而这些分类我们习惯称为类。所以世界上有许许多多的车类,鸟类等等

    那么对象和类之间有什么关系呢?对象就是附合某种类定义索产生出来的实例,而不是一个类。类只是个抽象的称呼,而对象是个看得到,摸的到,听得到的实例

    可有些时候我们也不用类的名称来称呼一个对象,而是直接使用对象的名称,对如我家有只狗,它的名字叫小白,这里的狗是类名称,而小白就是对象的名称。既然它要叫小白而不叫小黄,小黑,一定是它本身有不同于其他狗对象的地方,比如说毛发的颜色,而你可能是它的主人,因为我们很少为陌生的狗取名字。而毛发的颜色,主人是谁等等都是用来描述这只狗的东西,我们称之为属性。所以属性是用来形容一个实例对象的,也因为有了这些属性,世界上每个对象都不相同,每个对象也有它们自己的行为或者是使用它们的方法,比如说一只狗会跑会叫等,我们把这些行为称之为方法。刚刚说到的属性属于对象静态的一面,用来形容对象额一些特性,而现在说道的这些方法属性对象动态的一面,你可以使用这些方法来操作一个对象,我们把属性合方法称为这个对象的成员,因为它们是构成一个对象的主要部分,没有了这两样东西,那么对象也没什么存在意义了。哪怕只是一粒势头,或者它没有什么操作的方法,但也有描述它的属性。真的存在没有属性和方法的类,不过它长城出来的对象没什么作用,你根本无法辨别和使用它,这种类的崔在通常只有一个用途,就是作为一种规则,然后遵守这个规则的对象,才能去做某些特定的事情

    展开全文
  • 1. DTO : 数据传输对象 , 一种设计模式之间传输数据软件应用程序 , 可以说是对业务层数据操作的对象. DTO封装 , VO展示 。 2. VO : 与DTO类似 , 用于页面展示用。. DTO和VO 实现层面是一样 , 可以当做一个对象 ,...
    			**本文宗旨:	充分利用java面向对象的思想**	
    

    一 、常见的对象称呼
    1. DTO : 数据传输对象 , 一种设计模式之间传输数据的软件应用程序 , 可以说是对业务层数据操作的对象.
    DTO封装 , VO展示 。
    2. VO : 与DTO类似 , 用于页面展示用。.
    DTO和VO 实现层面是一样的 , 可以当做一个对象 , 但是要注意设计层面是不同的 .
    3. DO : 业务逻辑对象 , 注重业务 . DTO属于自定义属性 ,可减少不必要的输出.
    3. BO : 业务对象层的缩写 , 调用Dao方法结合po vo进行操作.
    4. JavaBean : 一种可重用组件 , 即一次编写 , 任何地方执行 , 任何地方都可重用 .
    5. Entity : 持久化实体对象,与数据库对应 。
    6. POJO: 简单的java对象 , 实际就是普通的javaBean 。
    7. PO : 只含有 get/set 方法的POJO


    二 、DTO 对象的应用

    **大家不要只是认为实体对象只能作为在数据库持久化使用 , 往往大家忽略的东西也是很奇妙的  ☺**
    
    比如 :  DTO 的数据转换 
    
    1. 对Json 字符串的操作
    String str = ThirdDataReqApiUtil.Api(xxx); // str 是一个Json的字符串
    

    (1) 正常取值

    JSONObject linkObject = str.getJSONObject("xxx").getJSONObject("xxx");	
    
    		 ***当没有接口文档时,你的操作其他人看了 , 不清楚对象内容
    		 而采用DTO对象 ,其他人看了 , 就会很清晰你所取得内容是什么***
    

    (2) DTO 方式
    首先先定义一个DTO实体( ResponseDto)
    再使用FastJson对JSON格式字符串转成对象
    然后使用时 对象.属性(); 即可获取值
    这样定义返回的值能够很清晰的反应出该字符串的内容, 方便大家查看

    public class ResponseDto {
    	boolean success;
    	String id;
    	ResultDescDto result_desc;
    	String nextService;
    	String reason_code;
    	String reason_desc;
    	// 省略get set 方法
    }
    

    ResponseDto responseDto=JSONObject.parseObject(retJsonStr, ResponseDto.class);
    ResultDescDto resultDescDto=responseDto.getResult_desc();		 
    
    1. 数据间的转换
      当entity 实体类不能满足你的业务需求 , 你完全可以重新定义一个DTO实体,用作业务传输 .
      (1) 问题剖析
      需求 : 对数据操作的过程中 , 我只想使用User对象中的 name 和 ag.e 属性 (正常开发数据量很大).
      解决 : 这时 , 我们就可以自定义一个 xxxDto 的实体 进行数据转换.
      好处 : 实体 更有 针对性 , 可以根据自己业务需求获取想要的传输对象.

    (2) User 类

    public class User {
        private String id;   
        private String name;
        private String age;
        private Person person;
    // 省略get set toString 方法
    }
    

    (3) Person类

    public class Person {
    		private String personid;
    	    private String name;
    	    private String address;
    	    private String tel;
    	    private String email;
    // 省略get set toString 方法
    		}
    

    (4 ) 测试类

    import org.springframework.beans.BeanUtils;
    public class Test {
    	public static void main(String[] args) {
    		// User对象
    		User user = new User();
    		user.setId("520");
    		user.setName("测试User");
    		user.setAge("18");
    		// Person 对象
    		Person person = new Person();
    		person.setPersonid("521");
    		person.setName("测试Person");
    		person.setAddress("北京");
    		person.setTel("5201314");
    		person.setEmail("66.com");
    		// User里面有一个Person
    		user.setPerson(person);
    		// 需求 :  对数据操作的过程中 , 我只想使用User对象中的 name 和 age 属性 (正常开发数据量很大)
    		// 解决 : 这时 , 我们就可以自定义一个 xxxDto 的实体 进行数据转换
    		
    		// 定义UserDto 进行数据转换
    		UserDto userDto = new UserDto();
    	BeanUtils.copyProperties(user, userDto);
    		// 这时你想要的数据就在xxxDto中了
    	System.out.println("User数据 :"+user);
    	System.out.println("UserDto数据 :"+userDto);
    	}
    }
    

    (5) 输出结果

    User数据 :User [id=520, name=测试User, age=18, person=Person [personid=521, name=测试Person, address=北京, tel=5201314, email=66.com]]
    UserDto数据 :UserDTO [name=测试User, age=18]
    

    二 、总结
    实际开发中,要开散思维,灵活运用现有知识.

    展开全文
  • Java 面向对象之类、对象与实列、以及引用简单解释。 一、什么是类 类即模型,一类物体名字,它有这类物体共性组成,比如,汽车类、人类、...引用即称呼,我笔记本,这五个字就是我笔记本引用。如下...

    Java 面向对象之类、对象与实列、以及引用的简单解释。

    一、什么是类
    类即模型,一类物体的名字,它有这类物体的共性组成,比如,汽车类、人类、桌子类。
    二、什么是对象
    类是虚的,而对象是具体的,比如人类,小明就是对象,
    三、什么是实列
    实例即对象,这是相对于类的称谓。例如,对象是类的实例,小明是人类的实例。
    四、什么是引用
    引用即称呼,我的笔记本,这五个字就是我的笔记本的引用。如下,person为人类,p 为指向人类的实例的一个引用。new person()是实实在在的对象/实列。
    person p = new person();
    展开全文
  • 说起函数,就不免要谈谈函数的参数和返回值。一般的,我们习惯把函数看作一个处理的封装(比如黑箱),而参数和返回值一般对应着处理过程的输入和输出。...引用的传递可以允许函数和调用者共享数据对象,它们之间的信息

    说起函数,就不免要谈谈函数的参数和返回值。一般的,我们习惯把函数看作一个处理的封装(比如黑箱),而参数和返回值一般对应着处理过程的输入和输出。这种情况下,参数和返回值都是值类型的,也就是说,函数和它的调用者的信息交流方式是用过数据的拷贝来完成,即我们习惯上称呼的“值传递”。但是自从引入了“引用”的概念后,函数的传统模型就不再那么“和谐”了。引用的传递可以允许函数和调用者共享数据对象,它们之间的信息交流不再使用信息拷贝的方式,而是使用更有效率的信息共享的方式,引用导致函数的参数并有输入和输出的双重功能。然而,事物总有两面性,信息共享带来方便的同时也带来了一定的不安全性。我们这里并不讨论函数的使用和设计,我们关注与函数参数和返回值的传递方式。

    对于内置数据类型的参数和返回值,函数实际参数的传递一般是通过压栈完成,函数执行时会从栈内取出参数的值进行计算。在32处理器上,push指令一次只能压入4个字节的数据,那么对于long long就需要两次压栈指令了,而double类型参数就需要sub esp,8结合mov指令完成参数进栈的操作。函数带有返回值时,若返回值不大于4字节,则会把返回值存储在eax寄存器中,而long long类型返回值回保存在edx:eax寄存器中,double类型的数据会被协处理器栈保存。

    相对于内置类型的参数传递和返回值,对象的传值和返回可能更复杂一点。当然,如果使用对象的引用或者指针作为参数传递和返回值的方式,这里和上述的内置类型并无多大区别,因为指针总是4个字节。如果不使用引用和指针,单纯传递纯粹的对象时,编译器会如何处理呢?

    为此,我们定义一个简单的类A,为了防止编译器对我们的代码优化处理(参考我的前一篇博文),我们自己定义构造函数、复制构造函数和赋值运算符重载函数。

    复制代码
    class A
    {
        int x;
        int y;
        int z;
    public:
        A(){}
        A(const A&a)
        {
            x=a.x;
            y=a.y;
            z=a.z;
        }
        const A&operator=(const A&a)
        {
            x=a.x;
            y=a.y;
            z=a.z;
        }
    };


    复制代码

    定义一个简单的具有对象参数和返回值的函数,以及测试代码。

    复制代码
    A fun(A x)
    {
        return x;
    }
    A a;
    a=fun(a);


    复制代码

    试想一下,如果A不是自定义类型,而是int类型的话,这段测试代码会有怎样的效果。

    复制代码
    mov eax,[a];//取出a的值
    push eax;//a值进栈
    call fun;//调用fun
    add esp,4;//恢复栈指针
    mov [a],eax;//返回值写入a
    ;//而fun内部无非也是把参数x的值写入eax,然后返回而已。
    mov eax,[a]
    ret


    复制代码

    事实是这样的吗?我们看一下VS2010的反汇编。

    和我们的预期完全一致!

    现在,我们回到对象的问题上来。由于对象是值传递方式,因此,对象传递之前需要进行一次对象拷贝(从原对象到实参)。函数调用结束后还需要将返回值对象进行一次拷贝。我们看看VS2010的处理方式。

     

    对象a定义是需要调用它的构造函数A::A(0A1112Ch)

    对象A包含三个整形数据成员,因此它的大小是120x0C)字节。sub esp,0Ch正是开辟12个字节存储从对象a拷贝出来的12字节数据。

    mov ecx,esp记录了被拷贝的参数对象的地址(this指针),push eax压入的是a的地址,也就是拷贝构造函数调用时参数对象的地址(引用)。拷贝构造函数(A::A(0A11131h))会把a地址记录的对象数据拷贝到ecx记录的this对应的参数对象内。调用结束后,使用ret 4指令将刚才压入的a的地址弹出栈,这样栈顶保存着完整参数对象(刚才开辟的12个字节)。这样参数对象被完整的复制出来了。

    push ecx压入了内存地址ebp-58h,这个地址既不是a的地址,也不是拷贝出参数对象的地址,而是要保存返回对象的地址!调用fun之前将该地址压栈,就是为了保存fun处理结束后的返回值对象。fun调用结束后将esp指针恢复了16字节,正好是参数对象的大小(12字节)加上返回值对象的地址(4字节)之和!要获得fun的返回值,直接访问eax即可,因为它保存着返回值对象的地址(ebp-58h)!

    最后一步是对象的赋值,这里需要调用对象的赋值运算符重载函数。而参数正是刚才fun调用结束后eax的值,因为它存储了返回值对象的地址。ecx记录this指针,正是被赋值对象的地址(a的地址)。赋值运算符重载函数调用结束后,完成返回值对象的赋值操作。

    按照编译器产生的fun函数的语义,我们使用高级语言可以将它的意思描述如下。

    复制代码
    A a;//定义a
    a.A();//默认构造
    A x;//开辟x的12字节空间
    x.(a);//对象复制到实际参数
    A*pret=&ret;//取返回值对象地址(已经开辟过了)
    fun(pret,x);//传递返回值指针pret和参数对象x
    a=*pret;//把返回值对象赋值给对象a
    //这样原本fun的函数形式就有所变化了。
    void fun(A*pret,A x)
    {
        pret->A(x);//将返回值拷贝到返回值对象内
        return;//啥也不返回了
    }


    复制代码

    我们看一下fun的汇编代码。

    参数对象的地址被x记录了下来,ebp+8记录的正是函数第一个参数的内容,即返回值对象的地址!在拷贝构造函数调用之前,ecx保存的this指针正是返回值对象的,进栈的参数是x的地址,和我们预期的一样!

    因此,我们可以针对对象的传值和返回得出如下结论:

    1. 对象参数传递之前需要进行一次对象拷贝,将原对象的内容完整的拷贝到参数对象内部,函数执行时访问的是参数对象,而不是原对象。

    2. 对象返回时,也需要将函数处理的结果进行一次对象拷贝,不过被拷贝的返回值对象内存已经在函数调用之前已经开辟出来了,函数只需要记录它的地址即可,然后调用拷贝构造函数初始化它。

    3. 函数调用结束后,eax保存了返回值对象的地址,供调用者使用。

    通过本文的描述,相信读者对对象作为函数参数和返回值时,编译器的内部处理机制有个更清晰的了解。





    延伸阅读:
    http://blog.csdn.net/zyearn/article/details/9709041
    http://tieba.baidu.com/p/1967981445

    展开全文
  • 对象的传值与返回

    2013-09-28 12:40:49
    说起函数,就不免要谈谈函数的参数和返回值。一般的,我们习惯把函数看作一个处理的封装(比如黑箱),而参数和返回值一般对应着处理过程的输入和输出。...引用的传递可以允许函数和调用者共享数据对象,它们之间的信息
  • 从日常生活中看对象

    2010-11-22 10:38:00
    随处可见都是对象,小到地上一粒沙,大到中国万里长城,埃及金字塔,所有东西都是对象(万物皆对象) 我们之所以会对对象这个词比较陌生,是因为我们平时不直接这么称呼它们,那么我们平时是怎么...
  • 刚开始使用Objective-C时,总是习惯将对象间发送消息之间称呼为方法调用。心想,这和c#不是一回事吗?不就是调用实例方法吗,还搞个消息发送作甚,最后还不是要转化为方法调用?通过一段时间理解学习,觉得并...
  • 有趣面向对象技术

    2007-12-04 23:06:00
    完成了几次作业以后,我学会了定义全局变量,就是把一些经常使用参数定义在所有函数体外,以免在编程过程中频繁地在函数体之间传递指针,从而使得程序设计变得“容易”了(只能说编程,还谈不上设计)。...
  • 关于“对象

    2009-04-27 16:00:00
    2.恋爱中的男女双方彼此之间的称呼。3.对象是客观世界中的事物在人脑中的映像,这种映像通过对同一类对象的抽象反映成人的意识,并做为一种概念而存在。 想必第二种解释是大家印象最深刻的了,为啥偏要叫面向“对象...
  • python 类和对象

    2020-08-16 22:58:25
    抽象的概念,比如说人类、鸟类、水果、是一个总的称呼,没有具体到某个物体; 对象(object,指具体实例,instance); 类定义的语法: class 类名:  执行语句  类变量  类方法 类最重要的两部分就是类变量和类...
  • "动物"这种称呼是他们之间的共性,而小猫小狗的这些呢,就是动物共性中具有个性中的个体。 而在面向对象编程中,类就像动物一样,是一个抽象体,是许多事物的共性集合体,而小猫呢,就是一个实例,称为对象,是共性...
  • 也谈面向对象

    千次阅读 2014-06-30 23:29:57
    封装的目的是要将代码切割成许多模块(module),每个模块之间的关连性降到最低,这么一来比较不会产生“牵一发而动全身”的状况,降低相互依赖的程度,也等于是降低复杂度,可以让开发与维护更容易。 事实上,没有...
  • 如何在多线程之间传递socket

    千次阅读 2007-05-24 16:52:00
    当然我不建议在使用CAsyncSOcket时候这么做,因为这增加了出错风险(尤其当出现拆解包问题时,有人称为粘包,我基本不认同这种称呼)。如果一定要这么做,方法应该是: 当前拥有这个socket线程调用Detach方法...
  • Spring核心机制

    2021-03-04 23:12:22
    依赖注入的概念 Spring的核心机制就是...件之间的耦合。 依赖注入和控制反转的含义相同,当某个Java对象(调用者)需要调用另一个Java对象(被调用者,即 被依赖对象)时,传统的方法是由调用者采用“new 被调用者”
  • 在人际交往中,选择正确、适当的称呼,反映了自身的教养及对对方尊敬的程度,甚至还体现着双方关系发展所达到的程度和社会风尚,因此不能随便乱用。  中国是礼仪之邦,称呼礼仪可谓丰富多采。一般来讲,称呼可以...
  • 电容用途有哪几种

    2021-01-20 06:37:52
    对于同一个电路来说,旁路(bypass)电容是把输入信号中高频噪声作为滤除对象,把前级携带高频杂波滤除,而去耦(decoupling)电容也称退耦电容,是把输出信号干扰作为滤除对象。我们经常可以看到,在电源和地...
  • 依赖注入(Dependency Injection,简称DI)与控制反转(IoC)的...但这种方式会导致调用者与被调用者之间的耦合性增加,不利于后期项目的升级和维护。 而使用了Spring框架之后,对象的实例不再由调用者来创建,而是由S...
  •  继承: 表现的是类与类之间的一种关系, 一旦子类继承自父类之后就拥有了父类的成员变量,成员方法了.  好处: 可以提高代码的复用性;   继承的格式:  需要使用关键字: extends  public class 类A extends ...
  • 扯扯SpringIoC

    2019-09-13 06:35:04
    如果有不对之处,望斧正,因为我学习过程...有人说DI(依赖注入)就是IoC(控制反转),其实这么说也没错,就像韩国人就是棒子一样,称呼的对象不一样罢了。DI思维方式就是:我是个模块,我注入到一个服务里面,也...
  • Ioc:在使用Spring框架之后,对象的实例不再由调用者来创建,而是由Spring容器来创建,Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权由应用代码转移到了Spring容器,控制权....
  • 文章目录协议对象协议协议声明协议采用协议继承协议必选以及...OC中协议最初就是从各个对象之间通信协议中抽象出来一种概念。与Java中接口类似。 对象协议 在对象模型化软件世界,不同对象也...
  • 1.滤波电容:它接在直流电源正、负极之间,以滤除直流电源中不需要交流成分,使直流电平滑。一般常采用大容量电解电容器,也可以在电路中同时并接其他类型小容量电容以滤除高频交流电。2.退耦电容:在电子...
  • 观察者模式

    2020-10-30 17:46:00
    在 GoF 《设计模式》一书中,它定义是这样:在对象之间定义一个一对多依赖,当一个对象状态改变时候,所有依赖对象都会自动收到通知。 一般情况下,被依赖对象叫作被观察者(Observable),依赖...
  • (4)ICE适配器带来好处

    千次阅读 2016-03-19 20:06:46
    为什么需要适配器在讲解ice servant...ice adapter和ice proxy从本质上讲是一样,都是建立一个中间层,把客户和最终需求之间进行解耦,只不过称呼不一样。作用每个对象适配器都有一个或更多Ice服务员,负责服务Ice
  • 旁路电容和去耦电容区别

    千次阅读 2011-02-18 13:01:00
     在电子电路中,去耦电容和旁路电容都是起到抗干扰作用,电容所处位置不同,称呼就不一样了。对于同一个电路来说,旁路(bypass)电容是把输入信号中高频噪声作为滤除对象,把前级携带高频杂波滤除,...
  • Java产生与流行是当今Internet发展客观要求,Java是一门各方面性能都很好编程语言,它基本特点是简单、面向对象、分布式、解释、健壮、安全、结构中立、可移植、性能很优异、多线程、动态,...
  • 最小知识原则就是在设计代码的时候,注意减少对象之间的交互,只和满足条件的对象进行交互。 最小知识原则的特点 1 最小知识原则与德墨忒尔法则的关系? 答 :其实这两个名词指的是同一个原则,但是我们更倾向于...

空空如也

空空如也

1 2 3 4
收藏数 73
精华内容 29
关键字:

对象之间的称呼