精华内容
下载资源
问答
  • 对象在哪里呀对象在哪里
    千次阅读
    2020-06-19 12:04:22

    根据上下文来确定。
    根据上下文来确定。
    根据上下文来确定。
    比如

    void func()
    {
        Object obj = new Object();//这个obj在函数的栈里。
    }
    
    class Test
    {
       private Object obj = new Object();//这个obj随对应的Test对象分配在堆里
    }
    

    对于方法中的局部变量的引用时存放在java运行时数据区的栈中,对于实例变量则是存放在java运行时数据区的堆中。

    更多相关内容
  • 我的同事问了一个非常有趣的问题,我无法给他答案。假设我们有以下课程:public class Person {String name;public Person(String name) {this.name = name;...}}现在,我们正在创建对象:Person p1 = new Person("a"...

    我的同事问了一个非常有趣的问题,我无法给他答案。

    假设我们有以下课程:

    public class Person {

    String name;

    public Person(String name) {

    this.name = name;

    }

    public void print() {

    System.out.println("xxx");

    }

    }

    现在,我们正在创建对象:

    Person p1 = new Person("a");

    Person p2 = new Person("b");

    Person p3 = new Person("c");

    Person p4 = new Person("d");

    Person p5 = new Person("e");

    Person p6 = new Person("f");

    Person p7 = new Person("g");

    Person p8 = new Person("h");

    问题是:

    我们是否在每个对象中保留有关可用方法的信息?如果我们创建一个新的对象p9,那么JVM将仅使用有关字段的信息来创建该对象,还是将有关方法的信息添加到该对象中?

    另一个问题:

    如果我调用p1.print()会怎样? p1是否必须要求Person类提供此方法,还是已经保存在p1对象中?

    参考方案

    方法的代码并非在所有实例中都重复,这是完全不必要的。该代码位于内存中的特殊区域,并且由所有实例共享。另一方面,实例变量所需的内存自然归每个实例所有。

    至于方法的调用方式,对象实际上不需要在每次调用方法时都询问类,它具有指向该方法代码的指针,并且可以立即对其进行调用。

    有关JVM内部工作的更多信息,请参见:http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html

    Java:静态字段在内存中的哪个位置? - java

    如果我们将对象存储在对象的静态字段中,那么JVM如何为它分配内存?它是否存在于“隐式”(不确定我是否使用正确的单词)类对象中?静态字段与对象字段有何不同? 参考方案 静态字段是类变量,并且在该类的所有实例之间共享。实例变量(或我认为您引用它们的对象字段)属于类的各个实例,并且不共享。至于它们存储在内存中的位置将根据JVM的实现而定,因此没有理由需要两个不同的…Java-搜索字符串数组中的字符串 - java

    在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…Java Scanner读取文件的奇怪行为 - java

    因此,在使用Scanner类从文件读取内容时,我遇到了一个有趣的问题。基本上,我试图从目录中读取解析应用程序生成的多个输出文件,以计算一些准确性指标。基本上,我的代码只是遍历目录中的每个文件,并使用扫描仪将其打开以处理内容。无论出于何种原因,扫描程序都不会读取其中的一些文件(所有UTF-8编码)。即使文件不是空的,scanner.hasNextLine()在…Java:正则表达式模式匹配器是否有大小限制? - java

    我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)Java-非泛型类扩展了泛型类 - java

    我想知道如何(如果可能)创建一个类,它是泛型类的特定类型。具体来说,我有一个实现所有必需方法的abstract class Stack,我想有一个class StackInteger,而StackInteger的实例也是Stack的实例。我看到我可以做这样的事情:class StackInteger { …

    展开全文
  • class对象存在于哪里?要怎么获取?

    千次阅读 2021-03-13 22:15:35
    你们知道class对象创建后是存放在哪里的吗?下面就来跟小编一起了解一下吧。什么是class对象?一个Class类,它被创建后的对象就叫做Class对象。Class对象表示的是自己手动编写类的类型信息,如创建一个Person 类,那么...

    对于class对象不知道小伙伴们了解多少呢?你们知道class对象创建后是存放在哪里的吗?下面就来跟小编一起了解一下吧。

    什么是class对象?

    一个Class类,它被创建后的对象就叫做Class对象。

    Class对象表示的是自己手动编写类的类型信息,如创建一个Person 类,那么,JVM就会创建一个Person

    来对应相应Class类的Class对象,这个Class对象会保存Person

    类相关的所有类型信息。事实上在Java中可以说每个类都是有一个Class对象的,每当我们编写并且编译一个新创建的类就会产生一个对应Class对象且这个Class对象会被保存在同名的.class文件里。在运行时,当需要生成这个类的对象时,JVM就会检查此类是否已经装载内存中。

    若是没有装载,则把.class文件装入到内存中。若是装载,则根据class文件生成实例对象。

    那我们为什么需要这样一个Class对象呢?是因为这样,当我们再new一个新对象或者引用静态成员变量时,JVM中的类加载器子系统会把对应Class对象加载到JVM中,再然后根据JVM这个类型信息相关的Class对象创建我们需要实例对象或者提供静态变量的引用值。特别需要注意的是,手动编写的每个class类,无论创建多少个实例对象,在JVM中都只有一个Class对象,即在内存中每个类有且只有一个相对应的Class对象,我们可以通过下图理解一下:

    8103812ee0759eef735eaa012100e50e.png

    怎么获取class对象?

    总共有三种获取Class对象的方式:

    1)、Class.forName(“类的全限定名”)

    2)、实例对象.getClass()

    3)、类名.class (类字面常量)

    例:Person person = new Person();

    Class clazz1 = person.getClass(); //1、通过Object类的getClass()方法:(需要先实例化一个对象)

    Class clazz2 = person.class; //2、通过对象实例方法获取对象:(需要先实例化一个对象)

    Class clazz3 = Class.forName("com.cn.Person"); //3、类的全路径:(不许呀实例对象)

    以上就是关于class对象的全部内容了,你理解了吗?还需要了解更多java常见问题的话,一定请记得关注奇Q工具网了解详情。

    推荐阅读:

    展开全文
  • Class对象存储Java堆中

    千次阅读 2021-11-15 16:50:15
    JDK1.8完全废除永久代之前的... 众所周知, java中new处的对象存放java堆中,而对象的引用存放虚拟机栈中。 Java中的Class也是一个类,所以Class对象也存放堆当中,存放方法区当中的是Class对象的引用 ...

            在JDK1.8完全废除永久代之前的JDK版本中,方法区是一个逻辑分区,实际是java堆的一部分,但是有Non-heap的标记,以便区分。

           众所周知, java中new处的对象存放在java堆中,而对象的引用存放在虚拟机栈中。

            Java中的Class也是一个类,所以Class对象也存放在堆当中存放在方法区当中的是类的元数据,即类加载器从class文件中提取出来的类型信息、方法信息、字段信息等。

            Java的对象(包括class对象)中保存着指向相应类的元数据的引用,元数据中又保存着指向class对象的引用。

    OOP-KLASS内存模型Class实例在堆中还是方法区中? - 小菜变大鸟 - 博客园

            在JVM中,使用了OOP-KLASS模型来表示java对象

            JVM加载一个类的时候会创建一个instanceKlass,用来表示这个类的元数据,包括常量池、字段、方法等。存放在方法区

            在new一个对象时,jvm创建instanceOopDesc,来表示这个对象,存放在区,其引用,存放在栈区;平时说的Java Object Layout就是instanceOopDesc,它用来表示对象的实例信息;instanceOopDesc对应java中的对象实例。

            HotSpot并没有把instanceKlass直接暴露给Java,而会另外创建对应的instanceOopDesc来表示java.lang.Class对象,并将后者称为前者的“Java镜像”,instanceKlass持有指向instanceOopDesc的引用。(_java_mirror便是该instanceKlass对Class对象的引用);

    instanceOopDesc包含三部分:
    1. 对象头,也叫Mark Word,主要存储对象运行时记录信息,如hashcode, GC分代年龄,锁状态标志,线程ID,时间戳等;
    2. 元数据指针,即指向方法区的instanceKlass实例
    3. 实例数据;
    4. 另外,如果是数组对象,还多了一个数组长度

    总结:

    • instanceKlass保存类的元数据,存储在方法区,只有一份(同一个类加载器)。
    • instanceOopDesc保存类实例对象包括class对象),存储在堆中。一个类的实例对象可以有多个,但class对象只有一个(同一个类加载器),一个类的class对象与其类的元数据一一对应。
    • instanceOopDesc中包含指向相应的instanceKlass(类的元数据)的指针,而instanceKlass又保存着相应class对象(instanceOopDesc)的引用。
    • HotSpot通过InstanceOopDesc将类的元数据通过class对象间接暴露给java,class对象是java访问类的元数据的入口(因为class对象(InstanceOopDesc)中保存着指向元数据的指针)。
    • Person类的实例(Oop)-->Person类的元数据()-->Person类的class对象:解读(前提:同一个类加载器)
      • 每一个类的实例可以有多个,每个实例对象对应的Oop中对klass的引用都是同一个
      • 每一个类的元数据instanceKlass只有一个
      • 每一个类的class对象(Oop)也只有一个
      • 唯一的Klass与唯一的class对象一一对应,互相保存着对彼此的引用。
    •  不同类加载器产生的class对象不同,分布在堆中的不同地址中。
    • 这些引用关系支持着获取class对象三种方式的实现
      •  Class.forName("ClassName"):通过类的元数据中的class对象引用获得class对象
      •  object.getClass():通过实例对象中保存的对类的元数据的引用获取类的元数据(instanceKlass),通过instanceKlass中对class对象的引用获取class对象(instanceOopDesc)
      •  ClassName.class:通过类的元数据中的class对象引用获得class对象
    • Oop中对klass的引用支持【通过class对象创建类的实例对象】这一功能的实现

     

    展开全文
  • java对象在jvm中的存储情况 jvm
  • 数组对象里删除某个特定的对象

    千次阅读 2019-08-08 10:59:07
    如 list = [ { China:{name:‘张三’,age:‘10’}, English:{name:‘Tony’,age:‘20’}, ...数组中删除某个对象里的某个属性值 list.map(item=>{ delete item.English }) console.log(list) 结果 // lis...
  • navicat premium 12的对象信息在哪里

    千次阅读 2020-08-21 10:32:08
    之前使用的工具是 navicat mysql ,最近换成 navicat premium 12版本的后 ,点击对象信息找不到在哪里了,我习惯看ddl的全部信息,之前点击对象信息中间框框的下面,可是 navicat premium 12版本点击后 一直找不到...
  • 第一种方法:系统的开始–所有程序找到WPS–WPS office工具–配置工具–高级–兼容设置,这里勾选兼容第三方系统和软件。 第二种方法: xp/win7系统:拷贝packager.exe到系统目录如C:\windows\system32 第三种...
  • 对象引用与对象存放的地址和区别

    千次阅读 2020-04-17 00:15:08
    java的学习当中,很多时候并没有能很好分清把对象对象的引用。如果没能很好认识分清这两者的关系,就可能会很难理解一些指针的移动的代码。 JAVA中基本类型变量存储栈中,引用类型的对象存储栈中,对象的...
  • 我们可以通过Object.assign为对象添加属性,如果需要为某些对象添加不同属性,判断即可。
  • C++一个类中引用另一个类的对象

    万次阅读 2019-03-05 20:29:21
    #include<iostream> using namespace std; class point { private: int x; int y; public: int getx()//如何引用私有类的成员 { return x; } void setx(int xx) ... ...
  • mybatis传入对象时查询得对象属性值为空 当我们将一个对象(这里我使用的是User对象),将对象成功的传入到xml映射文件中并成功的返回了一个User对象,但是我发现对象的成功返回并没有将对象的属性值成功的返回,...
  • java 一个类中去调用另一个类中的对象数组

    万次阅读 多人点赞 2019-08-12 17:07:32
    比如说,我A类中创建了一个对象数组。想B类中去使用这个A类中的数组。那么有两种方式 1 继承 直接让B类去继承这个A类,那么B类中就可以对这个数组进行操作 如下图 这是Child类,有个数组childs。长度是40; ...
  • 如何实现面向对象

    千次阅读 2022-05-05 15:48:09
    面向对象程序设计中,对象指的是计算机系统中的某一个成分。 面向对象程序设计中,对象包含两个含义,其中一个是数据,另一个是动作。对象是数据和动作的结构体。 面向对象在对象这一层次。 面向对象的三大...
  • JAVA对象在JVM中内存分配

    千次阅读 2017-04-22 13:50:07
    如果你还不了解JVM内存模型的建议您先看下JVM内存模型以一下代码为例,来分析下,java对象在内存中的空间分配。public class Student { private String name; private static Birthday birthday = new Birthday(); ...
  • 使用:es6中的“对象扩展运算符 ”,如下 // 对象深拷贝 obejctCopy() { // 源对象小李 const source = { name: '小李', age: 18, gender: '男', school: '清华大学' } // 拷贝小李 const copy1 = { ......
  • js对象中调用对象属性

    千次阅读 2019-03-12 09:11:30
    有一个功能,需要js对象中获取对象属性来进行计算 a={ b:1, c:function(){ return this.b } } 不能使用箭头函数 aaaa={ bbbb:1, cccc: ()=> this.bbbb } 因为箭头函数不会绑定this,或者说箭头...
  • new创建对象对象保存堆还是栈? –>堆内存是用来存放由new创建的对象和数组,即动态申请的内存都存放堆内存 –>栈内存是用来存放函数中定义的一些基本类型的变量和对象的引用变量 例子:局部变量存放...
  • 以前都是SQLyog,转到Navicat之后发现没有创建表的sql语句,有网友说右键有个对象信息,然后就能看到,那是以前的版本,现在的版本不一样了,今天记录一下: 点开后有个DDL可以看到sql语句了,不得不说,新版本这个...
  • 个人比较喜欢的方法 var obj = {} var key = 'id' var value = 12345 obj[key] = value 加入成功! 其他方法可以参考https://blog.csdn.net/Feast_aw/article/details/80847936
  • CorelDRAW 中的默认对象属性可控制活动文档中文本和图形对象的外观。例如,当您第一次安装 CorelDRAW 时,图形对象的默认属性将确定每个新图形...如果您想要创建的后续文档中使用自定义设置,可以将其设置为新文档...
  • 如何在对象中存放数组

    千次阅读 2020-12-03 17:21:54
    public class ClassArrayDemo { int age; String name; ClassArrayDemo(int age, String name) { this.age = age; this.name = name; } @Override public String toString() { return "[" + name + ",... }
  • Java中有一句比较流行的话,叫做“万物皆对象”,这是Java语言设计之初的理念之一。要理解什么是对象,需要跟类一起结合起来理解。下面这段话引自《Java编程思想》中的一段原话: “按照通俗的说法,每个对象都是...
  • 避免循环体中声明创建对象

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

    千次阅读 2021-03-04 02:33:51
    有时候奇怪的发现往list添加数据的时候,一直被最后一个元素覆盖,首先 ,我们得明白原理:new 一个对象的时候,对象的ID是唯一确定的;将对象add入list中时,放入list中的其实是对象的引用 ;而每次循环只是简单 ...
  • Json中对象嵌套对象

    万次阅读 2018-06-22 17:20:45
    //json-lib 将对象转为json System.out.println(fromObject); String str = JSON.toJSONString(result);//fastjson 将对象转为json字符串 {"customer":{"email":"wangpeng@huapay.com","nick_name":"王鹏"}}...
  • 【java】对象赋值给另一个对象

    千次阅读 2021-03-05 19:56:29
    基本类型存储了实际的数值,而并非指向一个对象的引用,所以赋值的时候,是直接将一个地方的内容复制到另一个地方。对于a=b,修改b后并不会影响到a,这正是我们大多数情况下所期望的。但是对象“赋值”的时候...
  • 面向对象的基本概念

    千次阅读 2021-08-02 05:19:12
    面向对象的基本概念来源:信管网2018年07月20日 【所有评论】面向对象的基本概念包括对象、类、抽象、封装、继承、多态、接口、消息、组件、复用和模式等。(1)对象:由数据及其操作所构成的封装体,是系统中用来描述...
  • 最近通过对对象相关知识的深入学习,我发现对对象的遍历主要分为两种情况,一种是页面中遍历,另外一种是方法中遍历对象,现在我们就从这两种情况分别来遍历对象获取对象的key和value。 情况一:页面中遍历...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,767,338
精华内容 3,906,935
热门标签
关键字:

对象在哪里呀对象在哪里