精华内容
下载资源
问答
  • 题目:在创建对象时必须()

    千次阅读 2020-05-19 12:16:46
    题目:在创建对象时必须() A、先声明对象,然后采购使用对象 B、先声明对象,为对象分配内存空间,然后才能使用对象 C、先声明对象,为对象分配内存空间,对对象初始化,然后才能使用对象 D、以上说法都不对 答案...

    题目:在创建对象时必须()

    A、先声明对象,然后采购使用对象

    B、先声明对象,为对象分配内存空间,然后才能使用对象

    C、先声明对象,为对象分配内存空间,对对象初始化,然后才能使用对象

    D、以上说法都不对

    答案:C

    解释:

    Java就是这样规定的,没办法,你不这样做就会报错,例如下面的一道选择题就是最好的证明,如下所示:

    延伸:
    阅读以下代码:

    public class foo {
        public static void main(String[] args) {
            String s;
            System.out.println("s="+s);
        }
    }
    

    程序执行的结果应该是:()

    A、代码得到编译,并输出"s="

    B、代码得到编译,并输出"s=null"

    C、由于String s没有初始化,代码不能编译通过

    D、代码得到编译,但捕获到NullPointException异常

    结果:C

    解释:
    在这里插入图片描述

    展开全文
  • new创建对象和直接声明创建对象

    千次阅读 2012-11-09 11:08:45
    众所周知,C++里面可以new对象,也可以直接声明对象。 编译器把内存分为三个部分: 1.静态存储区域:主要保存全局变量和静态变量。 生存期:整个程序。 2.堆:存储动态生成的变量。生存期:自己来决定。 ...

    有时候书看多了,遇到了以前没注意到的小细节就会犯迷糊,查了些资料大致弄明白了点关于 new对象和直接引用对象的区别。

    众所周知,在C++里面可以new对象,也可以直接声明对象。

    编译器把内存分为三个部分:

    1.静态存储区域:主要保存全局变量和静态变量。 生存期:整个程序。

    2.堆:存储动态生成的变量。生存期:自己来决定。

    3.栈:存储调用函数相关的变量和地址等。生存期:所处的语句块(既{}的范围)


    假设定义一个类Myclass


    (1)声明创建对象

    我们要创建对象的时候就是直接  Myclass myclass;  这时在中已经为它分配了一个空间存放所有的成员变量,但是为了节约内存空间 成员函数 被存放在了一个公共区域,这个类的所有的对象都可以共同享有。

    调用这个对象的成员变量和成员函数时用“.”操作符。如:myclass.value,myclass.function()。



    (2)new 对象

    用这种方法创建对象时我们采取这样的方法  Myclass *myclass = new Myclass();   通过new创建的实例返回的是对象指针(myclass指向一个Myclass的对象),同时在上为它分配空间,并且需要显式的释放空间, delete 对象的时候才会调用对象的析构函数。

    因为是指针的操作,所以调用这个对象的成员变量和函数时要用“->” 例如 myclass.value ,myclss->function()。



    总结

    事实上两种方式效果相同,我们在选择用哪种方式的来创建的时候主要考虑的就是,你想让这个对象存活多久。

    展开全文
  • 避免循环体中声明创建对象

    千次阅读 2017-11-17 09:24:56
    这种情况我们的实际应用中经常遇到,而且我们很容易犯类似的错误,例如下面的代码:  Java代码  for (int i = 0; i  Object obj = new Object();  System.out.println("obj= " + obj);  }  上面的...
    这种情况在我们的实际应用中经常遇到,而且我们很容易犯类似的错误,例如下面的代码: 
    

      Java代码

      for (int i = 0; i < 10000; ++i) {

      Object obj = new Object();

      System.out.println("obj= " + obj);

      }

      上面的做法会浪费较大的内存空间。正确的做法如下所示:

      Java代码

      Object obj = null;

      for (int i = 0; i < 10000; ++i) {

      obj = new Object();

      System.out.println("obj= "+ obj);

      }

      采用上面的第二种编写方式,仅在内存中保存一份对该对象的引用,而不像上面的第一种编写方式中代码会在内存中产生大量的对象引用,浪费大量的内存空间,而且增大了垃圾回收的负荷。因此在循环体中声明创建对象的编写方式应该尽量避免。


    但是,也有人认为这2中效果一样的。

    参照讨论:https://www.zhihu.com/question/31751468

    展开全文
  • 声明对象创建对象的区别

    千次阅读 2018-03-14 14:47:07
    2、声明对象创建对象的区别Java把内存划分成两种:一种是栈内存,一种是堆内存。 函数中定义的一些基本类型的变量和对象的引用变量都函数的栈内存中分配。 当一段代码块定义一个变量,Java就栈中为这...

    1、Java 的Integer、int与new Integer到底怎么回事?

    2、声明对象和创建对象的区别

    Java把内存划分成两种:一种是栈内存,一种是堆内存。 
    在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 
    当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 
    堆内存用来存放由new创建的对象和数组。 
    在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。 
    在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。 

    引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。 

    详细说明:

    堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。 
    栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。 
    栈有一个很重要的特殊性,就是存在栈中的数据可以共享。假设我们同时定义: 
    int a = 3; 
    int b = 3; 

    编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存放进来,然后将a指向3。接着处理int b = 3;在创建完b的引用变量后,因为在栈中已经有3这个值,便将b直接指向3。这样,就出现了a与b同时均指向3的情况。这时,如果再令a=4;那么编译器会重新搜索栈中是否有4值,如果没有,则将4存放进来,并令a指向4;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。要注意这种数据的共享与两个对象的引用同时指向一个对象的这种共享是不同的,因为这种情况a的修改并不会影响到b, 它是由编译器完成的,它有利于节省空间。而一个对象引用变量修改了这个对象的内部状态,会影响到另一个对象引用变量。 

    3、String是一个特殊的包装类数据。

    可以用: 

    String str = new String("abc"); 
    String str = "abc"; 
    两种的形式来创建,第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。 
    而第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”。 
    比较类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==,下面用例子说明上面的理论。 
    String str1 = "abc"; 
    String str2 = "abc"; 
    System.out.println(str1==str2); //true 
    可以看出str1和str2是指向同一个对象的。 
    String str1 =new String ("abc"); 
    String str2 =new String ("abc"); 
    System.out.println(str1==str2); // false 
    用new的方式是生成不同的对象。每一次生成一个。 
    因此用第1种方式创建多个”abc”字符串,在内存中其实只存在一个对象而已. 这种写法有利与节省内存空间. 同时它可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String str = new String("abc");的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。 

    另一方面, 要注意: 我们在使用诸如String str = "abc";的格式定义类时,总是想当然地认为,创建了String类的对象str。担心陷阱!对象可能并没有被创建!而可能只是指向一个先前已经创建的对象。只有通过new()方法才能保证每次都创建一个新的对象。由于String类的immutable性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer类,以提高程序效率。

    4、Node newNode=null;与Node newNode = new Node();

    前者,是声明了一个对象(的引用),jvm并没有开辟内存放入一个对象;

    而后者,在声明了一个对象的引用后,又把新开辟的没有存储任何有效值的对象的地址赋给了他。

    如果类在创建后,要自己读写数据,那就必须初始化;如果是为了从其他地方接收引用,也可以省了new。
    展开全文
  • 浅论创建子类对象时是否创建了父类对象

    千次阅读 多人点赞 2018-09-08 11:51:57
    我们都知道创建子类对象,调用子类构造方法前,必须调用父类的构造方法。 那么调用构造方法就代表着创建对象了吗? 假设1: 如果创建子类对象没有创建父类对象,那么我们子类继承过来的属性和通过super调用的...
  • javaScript中创建对象和Java创建对象的区别

    千次阅读 多人点赞 2018-03-27 09:26:52
    Java和js创建对象的区别
  • 定义类 声明对象 创建对象 实例化对象 属性 对象调用属性或者方法 举例,下面定义类了一个类并声明属性,写了一个方法: class Person { public String name; //声明属性 public int age; //声明属性 ...
  • 答案是:创建子类对象时不会创建父类对象。我们创建子类对象时,只是说创建了父类空间,并进行了初始化。如果说创建子类的时候就会创建它的父类,那内存空间中不都是Object类的对象吗?(想想java的设计师也不会这么...
  • java对象数组 创建对象数组,初始化对象数组

    万次阅读 多人点赞 2019-07-30 16:34:15
    当需要一个类的多个对象时,应该用该类的对象数组来表示,通过改变下标值就可以访问到不同的对象对象数组的定义和使用: 对象数组的定义与一般数组的定义类似,但是需要为每一个元素实例化。 对象数组的声明形式...
  • 缘起:正在敲代码的我突然灵光一现,想起了我...3.避免循环体中创建对象,即使该对象占用内存空间不大。 (1) for (int i = 0; i < 10000; ++i) { Object obj = new Object(); System.out.println("obj= "+ obj
  • 【含答案】第二章 类与对象--2.2-1-类声明对象创建 (1)单选题 类与对象的关系是: A 类是对象的抽象 B 对象是类的抽象 C 对象是类的子类 D 类是对象的具体实例 (2)单选题 关于Java中类的声明,下面哪个...
  • 一 首先接口不能实例化对象这是毋庸置疑的 !!!! 原因:1.实际语义是实例化一个实现该接口的匿名内部类,接口本身...此处声明Student对象s,并且实例化一个Student对象,实则是堆中开辟出一块空间来存放Student对
  • 这样就产生了冲突,这个语句到底是在声明函数呢还是在创建对象呢?答案是它是在声明函数,而想要调用不带参数的构造函数来创建对象则需要使用如下形式: Student b; 另外,如果要声明带一个参数的函数,那么...
  • ECMA-262把对象定义为:”无需属性的集合,其属性可以包含基本值、对象或者函数。”严格来讲,这就相当于说明对象是一组没有特定顺序... 创建自定义对象最简单的方式就是创建一个Object的实例,然后再为他添加属性和方
  • C++ 创建对象,删除对象

    万次阅读 2019-04-24 15:52:19
    注意:为节省存储空间,C++创建对象时仅分配用于保存数据成员的空间,而类中定义的成员函数则被分配到存储空间中的一个公用区域,由该类的所有对象共享。 例如,我定义了一个这样的类: class Rec { ...
  • 创建对象数组

    千次阅读 2019-02-05 01:11:36
    对象数组的声明有两种方式 一,定义,再开辟空间 构造了一个类StudentOfSoftware; 声明数组如下: 类名称 对象数组名[] = null; 对象数组名 = new 类名称[长度]; StudentOfSoftware students[] = null; ...
  • Java对象在哪里创建

    千次阅读 2017-04-08 18:38:01
    对象在哪里创建?  Java数据存储哪里? 1,寄存器,存取速度最快,cpu里面 2,堆栈,地址引用放栈里,对象放堆里,Java中的引用可以理解为c中的指针 3,堆,方面灵活但是缺点是比较耗内存(何时清除?)...
  • 使用对象字面量创建对象

    千次阅读 2016-08-14 16:03:45
    今天学习《js高程》看到了使用对象字面量创建对象的表示法,了解到对象字面变量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程,举一个简单的例子var person = {name : "tom",age : 21};...
  • C++里,有两种方法创建对象: 方法一: ClassName object(param); 这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。 注意:为节省存储空间,C++创建
  • scala不使用new关键字创建对象实例

    千次阅读 2017-07-17 22:23:41
    scala中,scala不使用new关键字创建对象实例,一般有2中方法: 1. 为类创建伴生对象,并伴生对象内按照所需的构造函数签名定义一个apply方法; 2.将类定义为case类。 1)用apply方法创建一个伴生对象: ...
  • 动态创建对象,并给对象属性赋值

    千次阅读 2018-07-24 10:04:28
    开发过程中经常会遇到java对象的属性特征不确定的情况,比如属性的名称,属性的类型,属性的取值等不确定的情况,如何java运行获取这些信息?动态的设置java对象的属性值?借助java反射机制以及javassist能够...
  • Python中的类的定义和对象创建

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

    千次阅读 2018-08-08 16:23:23
    1.=null只是声明一个对象,并不实际占用空间。 如:HBPWDto hbpwDto = null; 相当于HBPWDto hbpwDto ; 2.new,把对象实例化了,这个对象会一直占用空间(虽然不一定使用),直到被回收。 如果只是做赋值操作,只...
  • 针对此问题,csdn上一般都有3种解释 1.非要较真的话,就是第一种循环结束所有创建对象就可以被回收。第二种最后一个创建的要等到方法结束才会被回收 2....将变量声明在...
  • 如何创建对象的数组

    千次阅读 2017-03-12 15:47:37
    创建对象我们都很熟悉,但是创建对象的数组(也就是相当于创建一个“int”类型的数组,而这个的元素是一个一个的对象)呢?可能看到我解释的那么多后,你觉得应该是一个道理,但是事实上真的是如此吗?  假如...
  • 声明对象和实例化对象的区别

    千次阅读 2019-05-31 20:40:45
    声明对象: 和声明基本引用类型是一样的, 类名 对象名(对象名也是标识符,和基本类型的变量声明规则是一样的) 声明一个变量,并不会分配一个完整的对象所需要的内存空间,只是将对象名所代表的变量看成是一个...
  • 首先要明白,java里对象传递的时候,传递的都是引用(也就是对象的地址),这比传递整个对象高效的多。而基础类型,int,double等传递的才是值。比如,(new ArrayList&lt;String&gt;).add(new String("...
  • java创建对象的几种方式

    千次阅读 2018-09-17 16:57:17
    1、通过java关键字NEW创建对象 最简单最常用的创建对象方式,包括无参的和有参的构造函数。 例如: 通过NEW关键字创建方式: Test test = new Test();//通过无参构造函数创建 Test test1 = new Test(this);//...
  • 概述Java中,不管是为了实现接口,或者是抽象类,我们总是习惯使用匿名内部类。最熟悉的例子,莫过于对单击事件的监听,也就是这样写:btn.setOnClickListener(new OnClickListener{ // 处理单击事件逻辑 *** }...
  • Spring不支持带泛型创建对象

    千次阅读 2016-11-21 10:17:45
    Spring不支持带泛型创建对象

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,051,811
精华内容 420,724
关键字:

在创建对象时必须先声明对象