精华内容
下载资源
问答
  • C++中创建对象两种方法及其区别

    千次阅读 2013-11-28 14:01:33
    在C++里,有两种方法创建对象方法一: ClassName object(param); 这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。 注意:为节省存储空间,C++创建对象时仅分配用于...

    在C++里,有两种方法创建对象:

    方法一:(不用new)

    ClassName object(param);

    这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。

    如:A    a;

    这个是在栈上创建一个类对象 程序退出其作用域后自动调用类的析构函数.

    注意:为节省存储空间,C++创建对象时仅分配用于保存数据成员的空间,而类中定义的成员函数则被分配到存储空间中的一个公用区域,由该类的所有对象共享。

    例如,我定义了一个这样的类:

    class Rec
    {
       public:
       Rec(int width,int height);
       ~Rec();
       int getArea();

       private:
       int Rwidth;
       int Rheight;
    };

    当你Rec myRec(5,5);这样创建一个myRec对象,然后打印出sizeof(myRec);的时候,会得到 8 这个结果。

    因为myRec中有2个int类型的数据成员,一个int成员占4个字节,所以myRec对象占8个字节。

    这种方法创建的对象,内存分配是分配到栈中的,由C++缺省创建和撤销,自动调用构造函数和析构函数

    注意:该方法创建的对象调用类方法时,必须用“.”,而不能用“->”.如myRec.getArea();

    =============================================================================================

    方法二:(用new)

    ClassName *object=new ClassName(param);//如:A   a  =  new    A();

    delete object;

    这个是在堆上创建一个类对象, 必须手动delete释放对象 否则会造成内存泄露的.

           这种方法跟java有点类似,相同的是,它们都是在堆上分配内存来创建对象的(与方法一不同);不同的是,C++用new创建对象时返回的是一个对象指针,object指向一个ClassName的对象,C++分配给object的仅仅是存放指针值的空间。而且,用new 动态创建的对象必须用delete来撤销该对象。只有delete对象才会调用其析构函数。

    注意:new创建的对象不是用“*”或“.”来访问该对象的成员函数的,而是用运算符“->”;

    例如:Rec *rec=new Rec(3,4);

          rec->getArea();

          delete rec;

    顺便提一下:

    一般来说,编译器将内存分为三部分:静态存储区域、栈、堆。静态存储区主要保存全局变量和静态变量,栈存储调用函数相关的变量、地址等,堆存储动态生成的变量。在c中是指由malloc,free运算产生释放的存储空间,在c++中就是指new和delete运算符作用的存储区域。

    -------------------------------------------------------------------------------------------------------------------------------------------------------------

    下面是总结的一些关于new创建类对象特点:

    • new创建类对象需要指针接收,一处初始化,多处使用
    • new创建类对象使用完需delete销毁
    • new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间
    • new对象指针用途广泛,比如作为函数返回值、函数参数等
    • 频繁调用场合并不适合new,就像new申请和释放内存一样

    展开全文
  • JavaScript 创建对象两种方法区别

    千次阅读 2018-12-01 14:03:55
    1. var obj = Object.defineProperty({}, 'a', { value:'a' }); //configurable: false<不可增删> ...//enumerable: false<不可遍历> ...而且两种方法不能一起用,应该都相当于创建一个新对象,后者会把前者覆盖

    1.

    var obj = Object.defineProperty({}, 'a', {
    	value:'a'
    });
    //configurable: false<不可增删>
    ​
    //enumerable: false<不可遍历>
    ​
    //value: "a"
    ​
    //writable: false<不可修改值>

    2.

    var obj = {a:'a'}
    
    //configurable: true<可增删>
    ​
    //enumerable: true<可遍历>
    ​
    //value: "a"
    ​
    //writable: true<可修改值>

    可见两种方法默认的元属性是相反的。

    而且两种方法不能一起用,应该都相当于创建一个新对象,后者会把前者覆盖

    展开全文
  • String类对象两种创建方法区别

    千次阅读 2018-03-12 22:14:30
    创建String字符串的方法两种。无论哪种方法创建的字符串都是不可以改变的。先来看方法一:String a="hello";这种方法创建字符串后会有一个字符串池来保存内容,而栈空间存的是这个字符串的地址。这种方法...

      java将内存分为四种:堆、栈、方法体、程序计数器。一般基本数据类型存放在栈中,对象类型存放在堆中。

    创建String字符串的方法两种。无论哪种方法创建的字符串都是不可以改变的。先来看方法一:

    String a="hello";



    这种方法创建字符串后会有一个字符串池来保存内容,而栈空间存的是这个字符串的地址。这种方法创建的字符串在作为函数参数时是值传递。


    第二种方法:

    String b=new String("java");

    这种方法在创建字符串对像的同时,还会在String pool中创建一个对象。因此执行了上面语句后实际上创建了两个对象。


    但是这种方法创建的字符串在传递时是引用传递。本应传递引用,但String 是不可变对象,所以在其值创建后,无法对其值做修改,所以跟值传递一个效果。


    顺便记录下以前的一个疑惑:

    String a="hello";
    a="java";

    执行完上述语句后,输出a结果是:java。这是否说明String的字符串创建后是可以改变的呢?答案是否定的。

    其实,a从hello变为java不是hello被改成了java,而是系统又创建了一个对象,内容为java,a只是从指向hello变为指向java而已。

    下节:String类中判断对象关系时“==”和equals()的区别。




    展开全文
  • Java 对象的生命周期包括创建、使用和清除,本文详细介绍对象的创建,在 Java 语言中创建对象分显式创建与隐含创建两种情况。 显式创建对象 对象的显式创建方式有 4 种。 1. 使用 new 关键字创建对象 这是常用的创建...

    对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。Java 对象的生命周期包括创建、使用和清除,本文详细介绍对象的创建,在 Java 语言中创建对象分显式创建隐含创建两种情况。
    显式创建对象
    对象的显式创建方式有 4 种。
    1. 使用 new 关键字创建对象
    这是常用的创建对象的方法,语法格式如下:
    类名 对象名=new 类名();
    2. 调用 java.lang.Class 或者 java.lang.reflect.Constuctor 类的 newlnstance() 实例方法
    在 Java 中,可以使用 java.lang.Class 或者 java.lang.reflect.Constuctor 类的 newlnstance() 实例方法来创建对象,代码格式如下:
    java.lang.Class Class 类对象名称=java.lang.Class.forName(要实例化的类全称);
    类名 对象名=(类名)Class类对象名称.newInstance();

    调用 java.lang.Class 类中的 forName() 方法时,需要将要实例化的类的全称(比如 com.mxl.package.Student)作为参数传递过去,然后再调用 java.lang.Class 类对象的 newInstance() 方法创建对象。
    3. 调用对象的 clone() 方法
    该方法不常用,使用该方法创建对象时,要实例化的类必须继承 java.lang.Cloneable 接口。 调用对象的 clone() 方法创建对象的语法格式如下:
    类名对象名=(类名)已创建好的类对象名.clone();

    4. 调用 java.io.ObjectlnputStream 对象的 readObject() 方法
    例 1
    下面创建一个示例演示常用的前三种对象创建方法。示例代码如下:

    public class Student implements Cloneable
    {   
        //实现 Cloneable 接口
        private String Name;    //学生名字
        private int age;    //学生年龄
        public Student(String name,int age)
        {    //构造方法
            this.Name=name;
            this.age=age;
        }
        public Student()
        {
            this.Name="name";
            this.age=0;
        }
        public String toString()
        {
            return"学生名字:"+Name+",年龄:"+age;
        }
        public static void main(String[] args)throws Exception
        {
            System.out.println("---------使用 new 关键字创建对象---------");
           
            //使用new关键字创建对象
            Student student1=new Student("小刘",22);
            System.out.println(student1);
            System.out.println("-----------调用 java.lang.Class 的 newInstance() 方法创建对象-----------");
           
            //调用 java.lang.Class 的 newInstance() 方法创建对象
            Class cl=Class.forName("Student");
            Student student2=(Student)cl.newInstance();
            System.out.println(student2);
            System.out.println("-------------------调用对象的 clone() 方法创建对象----------");
            //调用对象的 clone() 方法创建对象
            Student student3=(Student)student2.clone();
            System.out.println(student3);
        }
    }
    
    

    对上述示例的说明如下:
    使用 new 关键字或 Class 对象的 newInstance() 方法创建对象时,都会调用类的掏造方法。
    使用 Class 类的 newInstance() 方法创建对象时,会调用类的默认构造方法,即无参构造方法。
    使用 Object 类的 clone() 方法创建对象时,不会调用类的构造方法,它会创建一个复制的对象,这个对象和原来的对象具有不同的内存地址,但它们的属性值相同。
    如果类没有实现 Cloneable 接口,则 clone。方法会抛出 java.lang.CloneNotSupportedException 异常,所以应该让类实现 Cloneable 接口。

    程序执行结果如下:

    ---------使用 new 关键字创建对象---------
    学生名字:小刘,年龄:22
    -----------调用 java.lang.Class 的 newInstance() 方法创建对象-----------
    学生名字:name,年龄:0
    -------------------调用对象的done()方法创建对象----------
    学生名字:name,年龄:0
    

    隐含创建对象
    除了显式创建对象以外,在 Java 程序中还可以隐含地创建对象,例如下面几种情况。
    ①String strName=“strValue”,其中的“strValue”就是一个 String 对象,由 Java 虚拟机隐含地创建。
    ②字符串的“+”运算符运算的结果为一个新的 String 对象,示例如下:
    String str1=“Hello”;
    String str2=“Java”;
    String str3=str1+str2; //str3引用一个新的String对象
    ③当 Java 虚拟机加载一个类时,会隐含地创建描述这个类的 Class 实例。

    **提示:**类的加载是指把类的 .class 文件中的二进制数据读入内存中,把它存放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class 对象,用来封装类在方法区内的数据结构。

    无论釆用哪种方式创建对象Java 虚拟机在创建一个对象时都包含以下步骤:

    1. 给对象分配内存。
    2. 将对象的实例变量自动初始化为其变量类型的默认值。
    3. 初始化对象,给实例变量赋予正确的初始值。

    **注意:**每个对象都是相互独立的,在内存中占有独立的内存地址,并且每个对象都具有自己的生命周期,当一个对象的生命周期结束时,对象就变成了垃圾,由 Java 虚拟机自带的垃圾回收机制处理。

    展开全文
  • 在C++里,有两种方法创建对象方法一: ClassName object(param); 这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。 注意:为节省存储空间,C++创建
  • Javascript 创建对象两种方法

    千次阅读 2006-07-13 14:29:00
    Javascript object总结(创建对象) Javascript 语言本身也可以进行面向对象的编程,如下是最近几天对javascript面向对象编程的总结。对象的创建javascript对象有两种创建方式1.使用对象初始器:objName = { prop1:...
  • Java创建对象的四种方法

    千次阅读 2019-05-22 16:33:56
    Java创建对象的四种方法 使用New关键字 使用Class类的newInstance方法,newInstance方法调用无参构造器创建对象(反射),Class.forName.newInstance(); 使用clone方法 反序列化 使用构造器的两种:New关键字...
  • C++创建类的对象两种方法

    千次阅读 2019-12-24 10:59:19
    创建类 现有一个学生类Student,它的定义如下: class Student{ ...常见的C++创建类的对象两种方法如下: 第一种: Student stu; stu.name = “xiaoming”; stu.age = 20; stu.score = 9...
  • JavaScript创建对象的4种方法

    千次阅读 2018-11-28 15:02:24
    JavaScript 创建对象的4种方法 所谓对象就是用来帮助你完成一些事情是,对象是有特征和行为的,是具体特指的某一个事物。使用对象可以使程序更加整洁 通过Object()方法来创建 Object()是JavaScript内部的对象...
  • JavaScript中的正则表达式用RegExp对象表示,可以使用RegExp()构造函数来创建RegExp对象,不过RegExp对象更多的是通过一特殊的直接量语法来创建。就像通过引号包裹字符的方式来定义字符串直接量一样,正则表达式...
  • C++创建对象两种方法(Qt)

    千次阅读 2020-06-09 10:35:18
    1.直接创建对象 类名+对象名; 对象名.方法(); 注意:如果需要在一个类中使用另一个类的函数;在类的头文件中 加上 "class 待引用类名 "。 2.如果需要在类之间传递一些指针,函数之类的。 头文件: cpp文件: ...
  • 搞清楚之后才知道C++提供这两种方式,是为了更灵活地创建对象。好吧,方法多了也不是什么好事,学就完了。 方法一: 语法:ClassName object(param); 这样就声明了一个ClassName类型的object对象,C++会为它分配...
  • js中创建多个对象两种方法

    千次阅读 2019-08-07 19:38:05
    1.工厂模式创建对象 function createPerson(name, age, hobby) { var obj = new Object(); obj.name = name; obj.age = age; obj.hobby = hobby obj.say= function () { console.l...
  • JS创建对象的几种方法

    千次阅读 2018-07-29 17:41:16
    自己认为目前能较好理解的创建对象方法,可能在某些方面不是最优的方法 // 1. 创建使用函数创建(工厂模式) function Person(age,name){ this.age = age || void 0; //void 0 相当于 undefined ,,自己设置好...
  • Java中创建对象的5种方法

    千次阅读 多人点赞 2019-09-23 08:35:23
    将会列举5种方法去创建 Java 对象,以及他们如何与构造函数交互,并且会有介绍如何去使用这些方法的示例。 作为一个 Java 开发人员,...这里列举在 Java 中创建对象的五方式,下面将介绍它们的示例,以及创建对象...
  • C/C++创建对象两种方式

    千次阅读 2016-12-24 15:58:49
    刚学C++肯定被其创建对象搞的糊里糊涂,其不像Java那样直接通过new就可以创建对象了,而且还不需要人为的去回收,但C++却不行其有两种方式创建对象:1、通过new创建类对象CTest* pTest = new CTest();delete pTest;...
  • JAVA中创建线程对象两种方法

    千次阅读 2010-06-17 21:20:00
    创建这样一个派生类的新对象后,使用start()方法,即可启动该线程。public class testThread { public static void main(String[] args) { Thread t = new MyThread(); t.start(); } } class MyThread...
  • Java创建对象的几种方法及扩展

    千次阅读 2018-04-28 23:02:24
    Java创建对象的几种方法及扩展标签(空格分隔): 面试创建对象的方式还是有很多的,不单单有new方式创建对象,还有使用反射机制创建对象,使用clone方法创建对象,通过序列化和反序列化的方式去创建对象。...
  • C++三种创建对象方法区别

    千次阅读 2016-07-29 18:08:40
    我们都知道C++中有三种创建对象方法,如下: 复制代码代码如下: #include using namespace std; class A { private:  int n; public:  A(int m):n(m)  {  }  ~A(){} }; int main() {  A ...
  • 创建对象方法  如果要创建一个空的对象,可以使用如下的三种方法 1 2 3 var obj1 = {}; var obj2 = Object.create(null); var obj3 = new Object(); 创建空对象的...
  • java通过反射创建对象两种方式

    千次阅读 2019-03-07 15:44:05
    在java中,通过反射创建对象两种方式 使用Class对象的newInstance()方法创建对象; 具体步骤是 1、获取类的Class对象(有三种方式可以获取,可以自行百度一下) 2、通过调用所获取到的Class对象的newInstance...
  • C++两种创建对象的方式

    千次阅读 2017-09-07 11:25:39
    本文将讲解两种创建对象的方式:一种是在栈上创建,形式和定义普通变量类似;另外一种是在堆上创建,必须要用一个指针指向它,读者要记得 delete 掉不再使用的对象。  通过对象名字访问成员使用点号.,通过对象...
  • python之创建类的两种方法

    千次阅读 2018-08-22 19:33:21
    #第一种方法创建类 class A(object): def __init__(self, name): self.name = name f = A("lkk") 这样就简单完成了一个A类的创建,我们尝试打印一下f的类型: print(type(f)) #打印f的...
  • c++中创建对象的几种方法

    千次阅读 2013-10-14 15:27:31
    首先,只有创建了类的对象,才能调用类中的动态的成员(包括成员变量和成员函数),其创建对象方法两种:一种直接用类名创建对象,如有一个类为: class CAT {public:  a();  b(); ... }; void main ...
  • c++创建对象两种方式

    万次阅读 2011-06-25 12:19:00
    c++的代码真的好难看。...被逼看看c++,学学怎么创建对象啊,ORZfrom:http://blog.sina.com.cn/s/blog_586b6c050100dhjg.html 在C++里,有两种方法创建对象方法一:ClassNameobject(param);这样就声明了一个Clas
  • JS创建对象不同方法详解

    千次阅读 2016-07-04 09:31:38
    原文地址:... 1、工厂模式 ...弊端:没有解决对象的识别问题,即怎么知道一个对象的类型。...1、没有显式的创建对象  2、直接将属性和方法赋给了this对象  3、没有return语句  要创建pe
  • Spring创建对象有三种方法,分别是: 1、构造函数创建 2、静态工厂方法 3、实例工厂方法 这里说下第一种方法,采用构造函数来创建,我这里直接给源码,凑合着看看,能用就可以了,如果想要更深入的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,946,389
精华内容 778,555
关键字:

创建对象的两种方法以及区别