精华内容
下载资源
问答
  • 构造方法用于给对象的数据进行初始化,,究竟是如何进行初始化的,对象的数据的是什么?感觉书里这样讲很抽象,能否写代码举个例子
  • 什么是面向对象,以及什么是类和对象

    千次阅读 多人点赞 2019-08-11 19:04:04
    什么是面向对象,以及什么是类和对象 ​ 1.1面向过程与面向对象的区别 ​ 面向对象是一种现在最为流行的程序设计方法 。将面向过程与面向对象进行比较。 ​ 首先这两个种都是一种编程思维, 在一些简单的动作...

    1.1面向过程与面向对象的区别

    ​ 面向对象是一种现在最为流行的程序设计方法 。将面向过程与面向对象进行比较。

    ​ 首先这两个种都是一种编程思维, 在一些简单的动作看来面向过程可能更加容易实现,它不用创建对象来进行实现,执行几步或一步完成。但是面对复杂动作面向对象来实现可能更加简单。二者之间做项目谁最简单不是绝对的

    ​ 面向过程(pop):以需要做的事为目标为进行,侧重点为目的。

    ​ 举个例子(洗衣服):1.拿起脏衣服

    ​ 2.丢进洗衣机

    ​ 3.倒入洗衣液

    ​ 4.开启洗衣机

    ​ 面向对象(oop):将需要做的事,分为多个模块(对象),侧重点在于受影响的对象。

    ​ 将洗衣服这个过程,进行封装,

    ​ 1.创建人的对象,然后人拿起脏衣服衣服丢进洗衣机

    ​ 2.创建洗衣服的对象,判断是否有脏衣服进入洗衣机,然后开启洗衣服模式。

    ​ 在这个例子中,不难看出,二者的侧重点完全不一样。前者为一步一步实现,然而后者是针对这个过程从产生出执行这些动作的事物来,从而达到目的。在java中这些事物我们称为对象。

    1.2 什么是类

    我们在生活中将狮子,豹子,狼归类为一类,我们称为动物类。它是一个客观事物,没有一个具体的提现,一个抽象的存在,却综合和大部分动物的特征,当我们听到动物时,往往会联想到前面提到的这些,然后会想到它们是肉食动物,群居动物(这些都是他们的属性)它们共有着捕食猎物的行为(看做成一个方法),这些都被动物所概括。
    那当我们联想到人呢。我们会联想到名字,头发,以及肤色。在java中我们把class标识作为一个类,下面是我的person类,它有着名字,头发,皮肤的特征,并且有一个行为eat()

    在这里插入图片描述

    1.3什么是对象?

    ​ 那么,我们该怎么执行这些代码呢,在生活中我们不会说人类去吃饭了,而是会说xx去吃饭了,这个xx是具体的某个人,在java中我们把这个xx定义为对象,它是一种客观事物的具体表现形式,在java编程思想(Thinking In java )中,指出,万物皆对象,所有事物都可能看做为一个对象,一类事物的分类,一类事物的具体表现形式,它有着自己类中具体的属性,以及行为。对象是类的实例

    ​ 这些属性和行为都来自于我定义的类的代码,但是却没有写明名字叫什么,头发什么颜色。现在我需要从这个person类中创建一个具体的表现对象

    请看下面的代码

    ​ 从person中创建了这个对象,并且执行了eat()方法,在控制台进行了输出
    在这里插入图片描述
    接下来对zhangsan的属性进行初始化

    在这里插入图片描述

    总结:
    通过代码可以看出, 我在person的类中创建了一个叫zhangsan的对象,他是person类的实例,并且根据它所在的类进行了属性的初始化赋值,执行了这个类都的方法。那么这个类有一个对象(实例)名字叫张三,有着黄色的皮肤,和黑色的头发,并且会吃饭。
    :是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该 类事物。 现实中,描述一类事物:
    属性:就是该事物的状态信息。 行为:就是该事物能够做什么。 举例:人。 属性:名字、体重、年龄、颜色。 行为:走、跑、叫。
    对象:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性 和行为。 现实中,一类事物的一个实例:一只小猫。 举例:一个人。
    属性:名字,头发,皮肤
    行为:吃饭。
    类与对象的关系 类是对一类事物的描述,是抽象的。 对象是一类事物的实例,是具体的。
    类是对象的模板,对象是类的实体。

    展开全文
  • 检查对象是否相等关系运算符==和!=也适用于所有对象,但它们的含义通常会使初涉Java领域的人找不到北。下面是一个例子://: Equivalence.javapublic class Equivalence { public static void main(String[] args) {...

    检查对象是否相等
    关系运算符==和!=也适用于所有对象,但它们的含义通常会使初涉Java领域的人找不到北。下面是一个例子:

    //: Equivalence.java

    public class Equivalence {
      public static void main(String[] args) {
        Integer n1 = new Integer(47);
        Integer n2 = new Integer(47);
        System.out.println(n1 == n2);
        System.out.println(n1 != n2);
      }
    } ///:~

    其中,表达式System.out.println(n1 == n2)可打印出内部的布尔比较结果。一般人都会认为输出结果肯定先是true,再是false,因为两个Integer对象都是相同的。但尽管对象的内容相同,句柄(可以理解为两个对象在内存中的地址)却是不同的,而==和!=比较的正好就是对象句柄。所以输出结果实际上先是false,再是true。这自然会使第一次接触的人感到惊奇。
    若想对比两个对象的实际内容是否相同,又该如何操作呢?此时,必须使用所有对象都适用的特殊方法equals()。但这个方法不适用于“主类型”,那些类型直接使用==和!=即可。下面举例说明如何使用:


    //: EqualsMethod.java

    public class EqualsMethod {
      public static void main(String[] args) {
        Integer n1 = new Integer(47);
        Integer n2 = new Integer(47);
        System.out.println(n1.equals(n2));
      }
    } ///:~

    正如我们预计的那样,此时得到的结果是true。但事情并未到此结束!假设您创建了自己的类,就象下面这样:

    //: EqualsMethod2.java

    class Value {
      int i;
    }

    public class EqualsMethod2 {
      public static void main(String[] args) {
        Value v1 = new Value();
        Value v2 = new Value();
        v1.i = v2.i = 100;
        System.out.println(v1.equals(v2));
      }
    } ///:~

    此时的结果又变回了false!这是由于equals()的默认行为是比较句柄。所以除非在自己的新类中改变了equals(),否则不可能表现出我们希望的行为。但要注意equals()的这种行为方式同时或许能够避免一些“灾难”性的事件。

    对于Object类,它提供了一个最最严密的实现,那就是只有是同一对象是,equals方法才返回true,也就是人们常说的引用比较而不是值比较。这个实现严密得已经没有什么实际的意义,所以在具体子类(相对于Object来说)中,如果我们要进行对象的值比较,就必须实现自己的equals方法。
    大多数Java类库都实现了equals(),所以它实际比较的是对象的内容,而非它们的句柄。

    展开全文
  • JAVA面向对象什么

    千次阅读 2019-05-12 13:13:09
    什么是对象(Object)?什么是面向对象?面向对象有什么特征? 面向对象?What??? 众所周知 Java是一种面向对象的语言,那么什么是面向对象什么是对象(Object)? 对象就是具有某些的特殊属性(成员变量)和...

    面向对象?What???

    • 众所周知 Java是一种面向对象的语言,那么什么是面向对象?

    什么是对象(Object)?

    • 对象就是具有某些的特殊属性(成员变量)和行为方式(方法)的实体。
    • 现实生活中的任何事物都可以看作是对象,无论是具体或抽象的事物,Java中就有了一种思想叫做“万物皆对象”。

    扩展:
    属性是先人根据可描述实物抽象出来的。
    行为是这个抽线实物可以具体实现的功能。
    举例说明:
    我是一个人,我可以找对象。
    人(属性,Property) 找对象(具体行为,Behavior)

    什么是面向对象?

    • 在了解面向对象之前要知道什么是面向过程,解释如下。

    面向过程:面向过程是以函数为基础,完成各种操作,强调过程;就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

    • 面向对象是已对象为基础,完成各种操作主要强调对象、结果。是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
    • 面向对象的编程语言,是将功能封装进对象,强调具备某些功能的对象,其实面向对象的语言是基于面向过程的,因为即使是调用某个对象,被调用的对象的方法也是通过面向过程的方式编写的。但面向对象的编程思想更加符合人们的日常思维,将复杂的问题分解为不同领域的简单问题,更便于逻辑分析与分工合作。

    面向对象的编程语言有Java、c++、c#等。

    面向对象有什么特征?

    • 在面向对象的程序设计中,对象与消息传递分别表现事物及事物之间的相互关系
    • 通过封装(Encapsulation)将对象的定义和对象的实现分开
    • 通过继承(Inheritance)体现类与类之间的相互关系
    • 由此带来的实体的多态(Polymorphism)性(多态指的是Java程序在编译与执行时表现出来的不同状态)
    • 构成了面向对象的基本特征。

    下一节细说面向对象的特征。

    展开全文
  • 本章会给大家介绍构造函数创造对象,原型继承,原型链,原型对象怎么扩展方法,还有constructor,create,keys,difinePropertyu方法 1.构造函数创造对象 function Example(name,age){ this.name=name; this.age=age;...

    JS对象进阶

    本章会给大家介绍构造函数创造对象,原型继承,原型链,原型对象怎么扩展方法,还有constructor,create,keys,difinePropertyu方法

    1.构造函数创造对象

    function Example(name,age){
                this.name=name;
                this.age=age;
                this.methods=function(){
                    console.log('this is methods');
                }
            };
            var tx=new Example('tx',20);
            console.log(tx);
            console.log(tx.age);
            console.log(tx.name);
            tx.methods();
    

    在这里插入图片描述

    先创造一个构造函数,然后创造实例化对象。这里可以看到输出结果。

    • 在这个构造函数中,实例成员就是构造函数内部通过this添加的成员 name age methods就是实例成员。
    • 在构造函数本身上添加的成员就为静态成员 例如Example.sex='男'
    • 实例成员只能通过实例化对象访问
    • 静态成员只能通过构造函数访问
      例如:
            Example.sex='男'//这是静态成员
            console.log(tx.sex);//undefined /实例对象访问静态成员
            console.log(Example.sex);//男 /构造函数访问静态成员
            console.log(Example.age);//undefined /构造函数范文实例成员
            Example.methods();//报错 /构造函数范文实例成员
    
    

    2.prototype和__proto__的详细介绍

    • 首先需要知道JS是面向对象的语言,拥有继承和原型。
    • 简单得来说:对象除了可以保持自有的属性,还可以从一个称为原型的对象继承属性。
    • 大家可以观察下面的图片,清晰认识什么是原型

    在这里插入图片描述

            console.log(Example.prototype);
            //这是构造函数原型
            console.log(tx.__proto__);
            //这是实例化对象原型
            console.log(Example.prototype.__proto__);
            //这是构造函数原型的原型(以及到达顶层原型)
            console.log(Object.prototype);
            //这是对象的原型(这是顶层原型)
            console.log(Example.prototype.__proto__.__proto__);
            //这是构造函数原型的原型的原型为null  超过了顶层原型
            console.log(Object.prototype.__proto__);
            //超过了顶层原型
    

    在这里插入图片描述
    相信大家对原型有了一点认识 关于prototype和__proto__的不同在于:
    prototype是用在构造函数或者Object后面,__proto__是用在实例对象后面。 他们的意思都一样,返回原型对象!

    对象可以利用原型的属性和方法:

            tx.__proto__.sex='男';
            Example.prototype.birthday='2000-02-18';
            console.log(tx.sex);//男
            console.log(tx.birthday);//2000-02-18
    

    如果实例对象里存在的属性名和他的原型里的属性名相同时,调用属性名会遵从就近原则,简单说就是:

    • 首先查看对象本身有无这个属性
    • 再找它的构造函数的原型 若没构造函数就找Object原型
    • 最后找Object原型
      就是这样寻找!

    3.constructor指回
    constructor 记录该对象引用于那个构造函数,很多情况下,我们需要手动利用constructor这个属性指回原来的构造函数。

    首先要知道,我们刚才给构造函数的原型加了2个属性,输出一下构造函数的原型大家可以看看:

    console.log(tx.__proto__);
    console.log(Example.prototype);
    

    在这里插入图片描述

    console.log(tx.__proto__.constructor);
    console.log(Example.prototype.constructor);
    

    在这里插入图片描述
    这就是 constructor的一个用法!

    constructor还有一个用法就是:如果我们修改了原来的原型对象,给原型赋值是一个对象,必须手动利用constructor这个属性指回原来的构造函数

    4.create()继承
    create()继承可以直接继承顶部原型,也可以继承原型,还可以继承对象
    例如:

     var obj1=Object.create({x:1,y:2}); 
     //继承一个原型 再继承顶部原型 间接继承Object.prototype
     console.log(obj1);
    console.log(obj1.__proto__);
    console.log(obj1.__proto__.__proto__);
    

    在这里插入图片描述

    会得到一个空对象,但是这个obj1.__proto__为刚才的{x:1,y:2}对象,然后再往上面继承就是Object.prototype,顶层原型了。

    同样也可以继承空对象和直接继承顶层原型

    let obj2=Object.create(null); //obj2不继承任何属性和方法
    let obj3=Object.create(Object.prototype);//直接继承顶部原型
    

    5.Object.keys() 获取对象本事所有的属性 返回一个数组。

    var obj={
                id:1,
                pname:'iphone',
                price:5000,
                num:1
            };
            var arr =Object.keys(obj);
            //获取对象本事所有的属性
            console.log(arr);
            arr.forEach(function(value){
                console.log(value);
            })
    

    在这里插入图片描述
    6.defineProperty详细用法介绍 :

    语法:Object.defineProperty(obj.prop,descriptor)
    用法: 定义新属性或者修改原有的属性
    obj 必须存在,表示目标对象
    prop 必须存在,表示需定义或修改的属性的名字
    descriptor 必须存在,表示目标属性所拥有的特性
    前面2个参数都很好理解,就是要修改的目标对象和属性名

    descriptor以对象{}书写,里面4个用法如下:

    • value:设置属性的值 默认为undefined
    • writable:值是否可以重写 ture||false 默认false
    • enumerable:目标属性是否可以被枚举 ture||false 默认false
    • configurable:目标属性是否可以被删除或是否可以再次修改特性 ture||false 默认false

    我给大家演示各个属性的用法:

    1. value,设置值
    var obj={
                id:1,
                pname:'iphone',
                price:4999
            };
            Object.defineProperty(obj,'num',{
                value:1000
            });//增加一个属性
            Object.defineProperty(obj,'price',{
                value:'100'
            });//修改一个属性
            console.log(obj);
    

    在这里插入图片描述
    2. writable,值是否可以重写

    Object.defineProperty(obj,'id',{
                writable:false, //不允许修改id这个属性值
            });
            
            obj.id=2;//尝试修改id值
            console.log(obj);//id不能被修改 依旧为1
    

    在这里插入图片描述

    1. enumerable:目标属性是否可以被枚举
      这个方法用在 比如:目标的属性比较有隐私特征的时候(地址,身份证),
      可以用enumerable让这个属性不能被枚举出来。
      给一个address保存地址,让地址不被枚举出来
    Object.defineProperty(obj,'address',{
                value:'中国四川省',//隐私 不能枚举出来
                enumerable:false, //不会遍历出来
            });
            console.log(Object.keys(obj));
    

    在这里插入图片描述
    并没有吧address这个属性枚举出来!

    4.configurable:目标属性是否可以被删除或是否可以再次修改特性
    一般来说,有的商品的标价不能被删除,商品的编号不能被再次修改它的特性(让编号不能修改等特性)
    首先请看如何让标价不能被删除:

    Object.defineProperty(obj,'price',{
                configurable:false,//不能删除或修改特性
            });
            delete obj.price
            console.log(obj);
    

    在这里插入图片描述

    价格依旧存在并未删除

    请看不能修改特性:

     Object.defineProperty(obj,'address',{
                value:'中国四川',//隐私 不能枚举出来
                enumerable:false, //不会遍历出来
                configurable:false,
            });
    
            Object.defineProperty(obj,'address',{
                enumerable:true,
                configurable:true
            });
    

    在这里插入图片描述
    我们在上面已经设置了address这个属性不能修改并且不能修改这个属性的特征,我们下面又来设置它的特征,会直接报错,不能修改它的特征!

    要介绍的内容就到这里了,希望大家能指出我的不足和错误,希望可以多私聊我和我沟通交流,希望大家多点赞支持,谢谢大家!!!

    展开全文
  • 什么是类?什么是对象?类和对象有什么关系?

    万次阅读 多人点赞 2016-05-13 15:26:11
    起初,“面向对象”是在程序设计中采用封装、继承、多态等设计方法。现在,面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析(OOA,ObjectOriented Analysis),面向对象的设计(OOD,Object ...
  • 在计算机科学中,对象(英语:object),台湾译作物件,是一个存储器地址,其中拥有值,这个地址可能有标识符指向此处。对象可以是一个变量,一个数据结构,或是一个函数。是面向对象(Object Oriented)中的术语,...
  • Python中可迭代对象什么

    万次阅读 多人点赞 2019-06-30 22:59:56
    Python中可迭代对象(Iterable)并不是某种具体的数据类型,它是存储了元素的一个容器对象,且容器中的元素可以通过__iter__( )方法或__getitem__( )方法访问。 __iter__方法的作用是让对象可以用for … in循环...
  • 并不理解什么是网页对象(-_-).只看到对象(Object),对象是类的实例,是用类来声明的数据结构,如果将类比作数据类型,对象就是相应数据类型的变量,在内存中分配特定的空间,存储数据。 Window对象封装了窗口...
  • NET 地图( 对象地图中,它是由所谓的setter和 getter,换句话说,方法来设置或者获取这些 properies 。 另一方面,业务逻辑是使用该属性的部分或者程序( 那个图层),这本书如何销售。 业务逻辑层使用业务对象来...
  • 什么是面向对象程序设计

    万次阅读 多人点赞 2019-08-22 11:10:04
    什么是对象→3.什么是消息→4.什么是封装→5.什么是多态→6.面向对象的优点: 本文介绍 C++基础概念和知识。如果您想看其他语言(如 java)的语法,本文不涉及。 1.面向对象和面向过程区别 面向过程程序设计:...
  • 什么是面向对象思想

    万次阅读 多人点赞 2016-12-13 15:02:08
    面向对象是一种思想,是基于面向过程而...面向对象有三大特征:封装性、继承性、多态性,其中封装性的是隐藏了对象的属性和实现细节,仅对外提供公共的访问方式,这样就隔离了具体的变化,便于使用,提高了复用性和安
  • 什么是面向对象(面向对象的三大特性) 简介 学java的都知道,java语言有三个特性,也可以说是三个优点,就是 1.简单性: java语言相对于C语言,C++来说比较简单。 2.跨平台:java语言编写的代码可以在不同的操作...
  • 类是抽象的,对象是具体的的,它是类的一个实例,对象继承类的方法和属性,举个例子:人是一个类,它是抽象,那什么是对象呢?那就是具体的哪个人,比如小红、小明,这就是对象,人有特征和行为,比如鼻子、耳朵、...
  • 什么是对象 对象为什么要被实例化

    千次阅读 2011-11-12 00:28:30
    什么是对象 对象为什么要被实例化 ”一个类的实例” 和 ”一个类的对象" 是说的一个意思  类好比一个模具,对象就是用这个模具造出来的具有相同属性和方法的具体事物,俗话说:“他俩真像,好像...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,191,973
精华内容 476,789
关键字:

对象的方法是指什么