精华内容
下载资源
问答
  • 对象和对象的引用

    千次阅读 多人点赞 2018-06-02 01:41:28
    最近初学java对于对象和对象的引用以及实例化有诸多迷惑,查了很多博客和API,现整理自己的理解如下:Java是一种面向对象的语言,采用类和对象的概念。Java中每个对象都有一种类型,即对象所属的类。类有两个主要...

    最近初学java对于对象和对象的引用以及实例化有诸多迷惑,查了很多博客和API,现整理自己的理解如下:

    Java是一种面向对象的语言,采用类和对象的概念。Java中每个对象都有一种类型,即对象所属的类。类有两个主要成员:域(field)和方法(method)。

    1. 域是与一个类或该类的对象相关联的数据的变量。域中存储初值或执行类的方法得到的计算结果。
    2. 方法包含该类的可执行代码。方法由语句构成。方法被调用的方式,以及这些方法所包含的语句最终指导程序的执行。

    对象以及对象的引用

    关键字new用来创建对象。从一个类中创建用一个对象被称为实例化,所以,对象也常被称为实例。

    Java中新创建的对象被放在被称为“堆”的系统存储区中。Java中的对象都通过“对象引用”(object reference)来访问。一个类的变量持有一个对象,实际上是对该对象的引用。当变量不再引用任何对象时,该对象引用就为null。而我们说的把对象传给一个方法实际上是把对象的引用传给一个方法(参考C++中指针的概念)。但是多数情况下,对象和对象引用的区别都被大家忽略。而这又恰恰是理解对象的关键。

    现在这里有一个类:

    class Point{
        public static void main(String[] args){
        System.out.println("hello");
    }

    对于Point类我们创建对象的通常语句为:

    Point point=new Point();

    通常大家以为point即为所创建的类,其实并不是这样,实际上point是我们创建的对象的引用。这个语句可以分解为两部分来看:

    Point point;//①
    point=new Point();//②

    Point是这里自定义的一个类型,即类类型。

    在语句①中经由Point声明了一个类类型的变量point,是Point类引用变量,它存放在栈空间中。也就是用来指向Point的对象的对象引用。但是此时point不是任何对象的引用,其指向为null,因为对象要在语句②中才创建。

    在语句②中由关键字new创建了一个Point的对象,并将之存放在堆中,然后利用操作符“="使得point引用变量指向刚刚创建的在堆中的对象。

    对象本身看不见摸不着,它是堆中的一块内存实体,甚至说对象本身没有名字。Point不是对象,因为一个类可以创建n个对象不可能每一个都叫做Point,point也不是对象它是Point定义的一个变量,经由语句②它成为了对象的引用。有了对象的引用,就可以方便的调用方法等操作。

    对象和对象引用的关系

    ”但是此时point不是任何对象的引用,其指向为null“上一部分我们讲到对象的引用可以指向null。它真正的含义是:

    一个对象的引用可以:指向一个具体的已经创建的对象或者指向null。即对象的引用只有唯一的指向,不能同时指向多个对象,这一点也很好理解,借用指针的概念,一个指针某一时刻只能指向唯一的内存块代表唯一的内存地址。既然point这个引用变量可以被”赋值“操作,那么自然的如果Point类此时通过”point2=new Point();"又创建了一个新的对象2,我们可以有:

    point=point2;

    这样point就成了对象2的引用,对象1和对象2为堆中的不同的内存块。但是point2此时仍旧是对象2的引用,即对象2有两个引用变量指向它。如果把气球比作对象的话,系气球的绳子比作对象的引用,那么对象2这个气球上面系了两个绳子。显然最初创建的对象1上面没有任何绳子系在上面,也就是说它没有“对象引用”,对于这样的对象就要面临被废区收集器(garbage collection)自动回收,从而在堆中消除。但是并不是立即消除,系统会判断在一个合适的时候回收。

    总结起来:对象的引用某一时刻只可以有唯一指向(或null),对象本身可以同时被多个引用变量引用(或0个)。

    得不到



    展开全文
  • 对象的引用和对象的指针 (常指针与常引用)const 左定值,右定向,修饰不变参

    常指针与常引用

    对象的引用和对象的指针

    为了说明对象指针与对象引用的相关知识,我们来看一下下面的例子

    在这个类中,我们定义了两个数据成员(一个横坐标一个纵坐标),另外,还定义了一个构造函数,还有三个成员函数,其中printInfo()函数是一个常成员函数。那么在实现的时候,也需要在printInfo函数后面加上const关键字来修饰,如下:

    下面我们来看看对象的引用和对象的指针如何来定以。

    当我们实例化一个对象coor1的时候,我们就可以给这个对象coor1起一个别名叫做coor2(也就是定义一个引用,引用的名字叫做coor2),当从coor2去调用printInfo()的时候,也会打印出coor1的坐标(3, 5)来。同理,当我们去定义一个对象的指针pCoor,如果让它去指向coor1的话,那么使用pCoor去调用printInfo()的时候,也会打印出coor1的坐标(3, 5)。这里需要提醒大家的是,如果我们定义的是对象的引用,我们就可以直接就用那个对象赋值给这个引用;但是当我们定义的是对象指针的时候,我们在给这个指针赋值的时候,一定特别注意给这个对象前面要加上取地址(&)符号,这样才能正确的赋值。说完了对象引用和对象指针后,如果我们在定义的时候,在前面加上const修饰符,这就变成了对象的常引用和常指针了。

    对象的常引用和常指针

    在这个例子当中,我们定义了一个对象的常引用和对象的常指针,当用coor1去调用printInfo()的时候,肯定不会有问题,会打印出coor1的坐标(3, 5)。关键是当我们用coor2去调用getX()的时候,因为getX这个时候还会传入一个this指针,而这个this指针就是coor2这样的this指针。请注意我们在定义getX和getY的时候,没有在其后面加const,也就是说getX和getY并不是一个常成员函数,这就意味着当用coor2去调用getX()的时候就会出现错误,而出现错误的原因就是因为此时coor2是一个常引用,作为常引用来说,它只有读权限,而getX这里的参数this是一个要求读/写权限的参数,所以其传入的时候就会出现编译错误。所以此时,coor2只能调用其常成员函数。同理使用pCoor来调用getY的时候也是错误的,因为pCoor此时是一个常指针(也只有只读权限)。

    下面继续看一个更为复杂的例子。

    在这个例子中,实例化了两个坐标对象coor1和coor2,然后又定义了一个对象指针,注意,这里定义的对象指针跟刚刚前面定以的有点不一样。之前const的位置是在Coordinate的前面,现在const放在了*的后面。如果放在*的后面,我们定义的这个pCoor一旦指向了一个对象,那么它就不能再指向另外的对象了。那么我们继续分析下面的三行代码,看看是不是正确。

    当pCoor去调用getY,而getY这里要求传入的是可读写权限的对象,而pCoor虽然用const修饰了,但是它的修饰位置是修饰的其本身(意味着这个指针不能指向其他对象),但是这个指针所指向的对象的内容本身是可变的,可见它是一个具有读写权限的指针,只限于它所指向的那个对象可读写,但是它却不能指向其他对象。所以这行代码是正确的。再看下面一行代码,pCoor去指向了coor2,这个就是不允许的(因为pCoor不可以再指向其他对象了),显然这里编译器就会报错。对于第三行代码,pCoor去调用printInfo,显然也是正确的,因为printInfo是一个常成员函数(常成员函数这里传入的this指针要求的是只读权限的),而此时的指针pCoor是具有可读写权限的,所以显然也是正确的。

    展开全文
  • JAVA 类和对象的实例

    千次阅读 多人点赞 2019-01-15 11:01:23
    JAVA 类和对象的实例 什么是类? 1. 类是具有相同的属性和功能的事物的抽象的集合,在面向对象程序设计中,人们把一类事物的静态属性和动态可以执行的操作组合在一起就得到类这个概念。 2. 类是个抽象的概念,用来...

    JAVA 类和对象的实例

    什么是类?
    1. 类是具有相同的属性和功能的事物的抽象的集合,在面向对象程序设计中,人们把一类事物的静态属性和动态可以执行的操作组合在一起就得到类这个概念。
    2. 类是个抽象的概念,用来模拟一类事物,一旦定义了一个类,这个类就永远存在。
    比如:人,人有男人和女人,他们都有身高,体重等相同的属性,他们都具有走路,吃饭,工作等这些相同的,可动态执行的操作,所以可以定义“人类”这样一个类来包含他们相同的属性和功能。
    什么是对象,类和对象之间是什么关系,怎样创建一个对象?
    1. 对象是类的一个个体,是具体的,实实在在存在的事物,它有自己的生命周期,由类可以创建出对象,对象也会消亡。
    2. 类一旦被建立后,就可以用这个类创建出任意个对象,然后去操作这些对象,类是抽象的,对象是具体的。
    3. 对象也叫实例,是一个真实的实体。
    关系: 1. 如果把对象比作是实实在在存在一辆汽车,那么类就是这辆汽车的设计图纸,当然通过设计图纸(类)还可以制造第二辆,第三辆这样的汽车(对象)。
    2. 如上,通过Person类可以创建出一个叫“小明”的对象,也可以创建出另一个叫“阿黄”的对象。
    语法
    class 类名称 {
    属性 (变量) ;
    行为 (方法) ;
    }
    (1)格式一:声明并实例化对象
    1.类名称 对象名称 = new 类名称 () ;

    (2)格式二:先声明对象,然后实例化对象:
    1.类名称 对象名称 = null ;
    2.对象名称 = new 类名称 () ;
    事例,比如如何定义一个Person的类
    在这里插入图片描述
    然后可以在定义一个对象,比如new 一个小明
    在这里插入图片描述
    或者这样
    在这里插入图片描述

    展开全文
  • Python中的类的定义和对象的创建

    万次阅读 多人点赞 2018-08-16 17:35:59
    面向对象中两个重要的概念: 1.类 :对一类事物的描述,是抽象的、概念上的定义。...1.创建类创建类对象 1.创建类,类主要由类名,属性,方法组成,当然创建一个类时,属性方法可以选择的。 cla...

    面向对象中两个重要的概念:

    1.类   :对一类事物的描述,是抽象的、概念上的定义。比如做石膏像的模型
    2.对象:实际存在的该类事物的每个个体,因而也称实例(instance)。比如石膏像

    二者的关系:对象是由类派生的、创建的。一个类可以创建无穷多个对象,每个对象都属于类。

     1.创建类和创建类对象

    1.创建类,类主要由类名,属性,方法组成,当然创建一个类时,属性和方法可以选择的。
    class Person:
        def cry(self):  #类方法:跟函数的定义类似,但是self参数自带的,这也是类的方法和普通方法的区别。
            print("I can cry")
        def speak(self):
            print("I can speak:%s"%(self.word))
    
    ---------创建对象-----------------------------------------------------------------------
    tom =Person()  #创建对象,直接类名(),不用像java中还要new,所以python更加简洁
    tom.cry()     #调用对象的方法
    tom.word="hahah"
    tom.speak()
    tom.age =18  #给对象添加属性 ,属性不用在类定义时声明,但这种方法给对象赋值麻烦,每个对象都要赋值。
    tom.age =19  #上面已经给tom添加过age属性,再次属于调用,重新赋值。
    
    ----------执行结果-------------------------------------------------------------------------
    '''
    I can cry
    I can speak:hahah
    '''
    
    2.给类初始化属性,在对象创建时就给对象设定了一些默认值。这样不用给每个对象都添加属性了,比如每个Person都是china,sex都是male.
     _init_(self)该类的方法有点类似java中类的构造器,可以给类的对象赋初始值。
    ------------------------------------------------------------------------------------------
    class Person1:
        def __init__(self):  #_init_(self),主要给类初始化一些属性,对象创建时自动调用该方法执行
            self.country ="china"
            self.sex = "male"
    
        def speak(self):
            print("I am  from %s  ,wuwuwuwuu"%self.country)
    -------------创建对象----------------------------------------------------------------------
    jack = Person1()
    jack.speak()
    print(jack.country,jack.sex)
    
    tom=Person1()
    tom.speak()
    print(tom.country,tom.sex)
    --------------执行结果如下:----------------------------------------------------------------
    '''
    I am  from china  ,wuwuwuwuu
    china male
    I am  from china  ,wuwuwuwuu
    china male
    '''
    
    3.属性虽然初始化了,但是固定死的,而实际每个对象的属性就不同。
      所以通过初始化时调用参数的形式,给每个对象赋不同的属性值
    
    class Person2:
        def __init__(self,name,age): 
            self.age =age   #这种用法类似java中的this.age=age.self意思可以理解为当前对象
            self.name = name #表示将当前对象传进来的参数name的值赋给当前对象的属性name
            self.country = "china" #还是可以给类的每个对象都赋一个默认值。
    
        def speak(self):
            print("name=%s,age=%d"%(self.name,self.age))
    -----------创建对象------------------------------------------------------------------------
    p1 = Person2("allen",19)
    p2 = Person2("sherry",22)
    p3 = p2  #让p3=p2.对象的赋值
    
    p1.speak()
    p2.speak()
    
    print("p1:",p1)  #直接打印对象 ,打印的是对象在内存中地址。
    print("p2:",p2)
    print("p3:",p3) #发现p3的地址跟p2的地址一样。
    
    '''执行结果如下:
    name=allen,age=19
    name=sherry,age=22
    p1: <__main__.Person2 object at 0x000001CBA3508BE0>
    p2: <__main__.Person2 object at 0x000001CBA3508CF8>
    p3: <__main__.Person2 object at 0x000001CBA3508CF8>
    '''
    

    总结:

    • __init__()方法,在创建一个对象时默认被调用,类似Java中构造器。不需要手动调用
    • __init__(self)中,默认有1个参数名字为self,必须写。如果在创建对象时传递了2个实参,那么__init__(self)中出了self作为第一个形参外还需要2个形参,例如__init__(self,age,name).第一个self不需要手动传参 
    • __init__(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递进去
    • python中一个类中只能有一个__init__方法,不支持该方法的重载(类似java中构造器的重载)
    • 每一个对象 都有自己 独立的内存空间保存各自不同的属性
    • 多个对象的方法在内存中只有一份,在调用方法时,需要把对象的引用 传递到方法内部

    2.新式类与旧式(经典)类

    object 是 Python 为所有对象提供的 基类,提供有一些内置的属性和方法,可以使用 dir 函数查看

    • 新式类:以 object 为基类的类,推荐使用
    • 经典类:不以 object 为基类的类,不推荐使用

    • 在 Python 3.x 中定义类时,如果没有指定父类,会 默认使用 object 作为该类的 基类 —— Python 3.x 中定义的类都是 新式类

    • 在 Python 2.x 中定义类时,如果没有指定父类,则不会以 object 作为 基类

    新式类 和 经典类 在多继承时 —— 会影响到方法的搜索顺序

    为了保证编写的代码能够同时在 Python 2.x 和 Python 3.x 运行!
    今后在定义类时,如果没有父类,建议统一继承自 object

    class 类名(object):    
        pass
    
    #尽量不要用下面这种老是写法,虽然不会报错,但是不推荐
    class 类名:    
        pass

    统一声明:关于原创博客内容,可能会有部分内容参考自互联网,如有原创链接会声明引用;如找不到原创链接,在此声明如有侵权请联系删除哈。关于转载博客,如有原创链接会声明;如找不到原创链接,在此声明如有侵权请联系删除哈。 

    展开全文
  • 和对象的区别

    万次阅读 2013-03-08 17:24:58
    笔试题之三:类和对象的区别 类是对象的抽象,对象是类的具体实例。 类是抽象的,不占用内存,而对象是具体的,占有内存空间。 例如:类就是水果,对象就是苹果。 继承与多态 多态性指用一个名字定义不同的...
  • 和对象的区别和联系

    千次阅读 2019-04-01 16:25:42
    类:类是封装对象的属性行为的载体,在Java语言中对象的属性以成员变量的形式存在,而对象的方法以成员方法的形式存在。 对象:Java是面向对象的程序设计语言,对象是由类抽象出来的,所有的问题都是通过对象来...
  • java在session存取值和对象的一种方法

    万次阅读 2019-05-14 09:40:44
    java在session存取值和对象的一种方法 在后台方法中存值的一种方式,将对象或者值用session的setAttribute(key,value);方法存值, //登录方法 public BaseResult user_login(String userNO,String password,...
  • Java中类和对象的概念

    千次阅读 多人点赞 2018-06-01 23:50:23
    Java是一门面向对象的编程语言(OOP),想要理解Java,首先要理解类(Class)和对象(Object)这两个概念。Java中的类可以看成C语言的结构体的升级版。结构体是一种构造数据类型,可以包含不同的成员(变量),每个成员...
  • MATLAB面向对象编程类和对象的创建

    万次阅读 2017-05-16 08:27:34
    在此之前对面向对象编程了解不多,更不用说MATLAB面向对象编程。... 今天简单做一个类的构建以及对象的创建。首先实现一个类的定义,代码如下: classdef Person  properties  name;  age;
  • java中类和对象的概念

    万次阅读 2019-02-15 10:59:29
    学习一门编程语言,就要理解里边的概念,java是一门面向对象的语言,什么是面向对象呢,一下用例子说明。  大家可能都对王者荣耀(下面简称“王者”)这个游戏有点了解,就算没玩过,也听身边的亲朋好友说过。  ...
  • 数组和对象的区别总结

    千次阅读 2018-06-27 15:04:21
    1、创建方法:2、对象没有长度3、调用方法不同4、因为没有长度。所以对象没有for 循环5、对象键值唯一,数组可以重复6、都可以用for in 循环
  • java类和对象的生命周期

    万次阅读 2018-07-09 06:55:00
    Java 对象生命周期在JVM运行空间中,对象的整个生命周期大致可以分为7个阶段:创建阶段(Creation)、应用阶段(Using)、不可视阶段(Invisible)、不可到达阶段(Unreachable)、可收集阶段(Collected)、终结...
  • javascript如何获取数组和对象的

    千次阅读 2018-12-21 17:55:30
    JavaScript只有一种数据类型可以包含多个值:...数组和对象都有一个key -&gt; value结构。但是数组中的键必须是数字,而任何字符串都可以用作对象中的键。键值对也称为“属性”。 可以使用点表示法访问对象属性...
  • 怎么来理解java类和对象的区别

    千次阅读 多人点赞 2018-05-08 11:29:19
    对象在需求中的使用在具体问题中如何使用面向对象去分析问题,如何使用面向对象。以把大象装冰箱为例进行分析:在针对具体的需求,可以使用名词提炼的办法进行分析,寻找具体的对象。需求:把大象装冰箱里对象:...
  • 使用jmap查看堆和对象的信息

    万次阅读 2017-10-05 11:22:16
    jmap概述jmap工具提供了一系列有用的选项来查看堆的使用情况新生代、老年代中对象的情况。 通过制定 -heap选项运行java应用的jvm进程的pid(获取java应用的pid,可以使用 jps工具。),就能输出响应进程的新生代...
  • 类加载和对象的初始化过程

    千次阅读 2015-08-30 08:34:38
    类的初始化和对象初始化是两个不同的概念。类的初始化是发生在类加载过程,是类加载过程的一个阶段,该阶段并不调用类的构造器。而对象的初始化是在类加载完成后为对象分配内存,实例变量的初始化,实例变量的赋值及...
  • 数组和对象的根本区别

    万次阅读 2013-12-24 18:19:00
    数组”(array)对象”(object)的根本区别 数组”(array)对象”(object)两者都可以用来表示数据的集合。  比如有一个数组a=[1,2,3,4],还有一个对象a={0:1,1:2,2:3,3:4},然后你运行alert(a[1]),两...
  • js----map和对象的区别

    千次阅读 2019-01-24 17:30:10
    js 中 map 和对象都是键值对的集合, 区别在于对象的 key值全部自动转成了字符串或者symbol值 而map 是完整的值-值  
  • js对象属性有两种访问方式,代码如下:   function Person() {}; var p1 = new Person(); p1.name = "拉拉"; window.alert(p1.name); var al = "na" + "me"; window.alert(p1[al]); 第二种方式...
  • 首先创建服务端返回的数据类型对象: package com.studio.pojo.util; import org.codehaus.jackson.map.ObjectMapper; public class PlanResult { //定义jackson对象 private static final ObjectMapper ...
  • 在程序RUN的一瞬间,什么类啊,静态的东西啊(静态块,静态方法...执行到new对象时,才会实例化对象,记住:类加载,只执行一次,即只有有一个类对象(注意不是实例对象),无论你以后怎么个new法,新new的都是实例对象
  • C++变量和对象的区别联系

    千次阅读 2012-03-21 13:15:34
    对象和变量这两个概念莫要搞乱,颈是颈,椎是椎,虽然两者都对应着一块内存,但是从不同的角度去理解内存就会产生不同的意义。 变量:所谓变量就是一种定义,通过定义编译器将会开辟一段空间,并将这段内存空间...
  • sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指定的时间,将执行机会(CPU)让给其他线程,但是对象的锁依然保持,因此休眠时间结束后会自动恢复(线程会回到就绪状态)。...
  • // 字符串和对象的转化 //JSON.parse(); js 方法 var jsonStr = '{"name":"李四"}'; console.log(angular.fromJson(jsonStr)); // 对象转字符串 //JSON.stringify() js方法 console.log...
  • sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指定的...wait()是Object类的方法,调用对象的wait()方法导致当前线程放弃对象的锁(线程暂停执行),进入对象的等待池(wait po
  • 对象和接口的理解

    千次阅读 2019-05-19 17:56:03
    1.类和对象的关系 首先,类是对象的类型。 然后,类是具有相同属性和方法的一组对象集合(一个类可对应多个对象)。 那怎么理解理解类和对象之间的关系呢。 我们举个简单的例子,你是个单身狗,没错,说的就是你...
  • Java的对象头和对象组成详解

    万次阅读 多人点赞 2018-07-20 10:46:47
    一,对象头 1,Mark Word 2,指向类的指针 3,数组长度 二,实例数据 三,对齐填充字节 Java对象保存在内存中时,由以下三部分组成: 1,对象头 2,实例数据 3,对齐填充字节 一,对象头 java的对象头...
  • Request对象和Response对象详解以及验证码的Java实现

    万次阅读 多人点赞 2017-12-26 21:36:54
    获取请求的urluri 2>获取url后面的请求参数部分的字符串 3>获取请求方式 4>获取主机名,IP地址 5>获取 Contexpath String url = request.getRequestURL().toString(); System.out.println(url...
  • javascript 数组以及对象的深拷贝(复制数组或复制对象)的方法前言在js中,数组和对象的复制如果使用=号来进行复制,那只是浅拷贝。如下图演示: 如上,arr的修改,会影响arr2的值,这显然在绝大多数情况下,并...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,044,041
精华内容 417,616
关键字:

和对象的