精华内容
下载资源
问答
  • 类对象概念: 所有的类,都存在一个类对象,这个类对象用于提供类本身的信息,比如有几种构造方法, 有多少属性,有哪些普通方法。步骤1:什么是类对象步骤2:获取类对象步骤3:获取类对象的时候,会导致类属性被初始化...

    类对象概念: 所有的类,都存在一个类对象,这个类对象用于提供类本身的信息,比如有几种构造方法, 有多少属性,有哪些普通方法。

    步骤1:什么是类对象步骤2:获取类对象步骤3:获取类对象的时候,会导致类属性被初始化


    步骤 1 : 什么是类对象
    在理解类对象之前,先说我们熟悉的对象之间的区别:
    garen和teemo都是Hero对象,他们的区别在于,各自有不同的名称,血量,伤害值
    然后说说类之间的区别
    Hero和Item都是类,他们的区别在于有不同的方法,不同的属性类对象,就是用于描述这种类,都有什么属性,什么方法的步骤 2 : 获取类对象
    获取类对象有3种方式
    1. Class.forName
    2. Hero.class
    3. new Hero().getClass()
    在一个JVM中,一种类,只会有一个类对象存在。所以以上三种方式取出来的类对象,都是一样的。注: 准确的讲是一个ClassLoader下,一种类,只会有一个类对象存在。通常一个JVM下,只会有一个ClassLoader。因为还没有引入ClassLoader概念, 所以暂时不展开了。package reflection;import charactor.Hero;public class TestReflection {public static void main(String[] args) {String className = "charactor.Hero";try {Class pClass1=Class.forName(className);Class pClass2=Hero.class;Class pClass3=new Hero().getClass();System.out.println(pClass1==pClass2);System.out.println(pClass1==pClass3);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}步骤 3 : 获取类对象的时候,会导致类属性被初始化
    为Hero增加一个静态属性,并且在静态初始化块里进行初始化,参考 类属性初始化。static String copyright;static {System.out.println("初始化 copyright");copyright = "版权由Riot Games公司所有";}
    无论什么途径获取类对象,都会导致静态属性被初始化,而且只会执行一次。(除了直接使用 Class c = Hero.class 这种方式,这种方式不会导致静态属性被初始化)

    0928457e14d9aca7a7cf6fe3f8e7f263.png
    • Hero.java
    • TestReflection.java

    package charactor;public class Hero {public String name;public float hp;public int damage;public int id;static String copyright;static {System.out.println("初始化 copyright");copyright = "版权由Riot Games公司所有";}}package reflection;import charactor.Hero;public class TestReflection {public static void main(String[] args) {String className = "charactor.Hero";try {Class pClass1=Class.forName(className);Class pClass2=Hero.class;Class pClass3=new Hero().getClass();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
    更多内容,点击了解: https://how2j.cn/k/reflection/reflection-class/108.html

    展开全文
  • 小编典典静态方法(实际上是所有方法)以及...如果你的静态变量是对对象的引用,则对象本身存储在堆的常规部分(青年/旧世代或幸存者空间)中。这些对象(除非它们是类之类的内部对象)不会存储在PermGen空间中。例:sta...

    小编典典

    静态方法(实际上是所有方法)以及静态变量都存储在PermGen堆的部分中,因为它们是反射数据(与类相关的数据,而不与实例相关的数据)的一部分。

    更新说明:

    请注意,只有变量及其技术值(原始或引用)存储在PermGen空间中。

    如果你的静态变量是对对象的引用,则对象本身存储在堆的常规部分(青年/旧世代或幸存者空间)中。这些对象(除非它们是类之类的内部对象)不会存储在PermGen空间中。

    例:

    static int i = 1; //the value 1 is stored in the PermGen section

    static Object o = new SomeObject(); //the reference(pointer/memory address) is stored in the PermGen section, the object itself is not.

    关于垃圾回收的一句话:

    不要不依赖finalize(),因为它不能保证运行。JVM完全可以决定何时运行垃圾收集器以及收集什么,即使对象符合垃圾收集的条件。

    当然,你可以将静态变量设置为null,从而删除对堆上对象的引用,但这并不意味着垃圾收集器将收集它(即使没有更多引用了)。

    另外,finalize()它仅运行一次,因此你必须确保它不会引发异常,否则会阻止对象被收集。如果你通过某些异常暂停完成,finalize()则不会再次在同一对象上调用。

    最后要注意的是:如何存储代码,运行时数据等取决于所使用的JVM,即HotSpot可能与JRockit不同,并且在同一JVM版本之间甚至可能有所不同。上面的内容基于Java 5和6的HotSpot(基本上是相同的),因为在回答之时,我会说大多数人都使用了这些JVM。由于Java 8的内存模型发生了重大变化,因此上述陈述可能不适用于Java 8 HotSpot,并且我没有检查Java 7 HotSpot的变化,所以我想以上对于该版本仍然适用,但我不确定在这里。

    2020-03-06

    展开全文
  • 步骤1:什么是类对象步骤2:获取类对象步骤3:获取类对象的时候,会导致类属性被初始化步骤4:练习-在静态方法上加synchronized,同步对象是什么?步骤5:答案-在静态方法上加synchronized,同步对象是什么?步骤 1 : ...

    类对象概念: 所有的类,都存在一个类对象,这个类对象用于提供类本身的信息,比如有几种构造方法, 有多少属性,有哪些普通方法。

    步骤1:什么是类对象步骤2:获取类对象步骤3:获取类对象的时候,会导致类属性被初始化步骤4:练习-在静态方法上加synchronized,同步对象是什么?步骤5:答案-在静态方法上加synchronized,同步对象是什么?

    步骤 1 : 什么是类对象
    在理解类对象之前,先说我们熟悉的对象之间的区别:
    garen和teemo都是Hero对象,他们的区别在于,各自有不同的名称,血量,伤害值
    然后说说类之间的区别
    Hero和Item都是类,他们的区别在于有不同的方法,不同的属性类对象,就是用于描述这种类,都有什么属性,什么方法的步骤 2 : 获取类对象
    获取类对象有3种方式
    1. Class.forName
    2. Hero.class
    3. new Hero().getClass()
    在一个JVM中,一种类,只会有一个类对象存在。所以以上三种方式取出来的类对象,都是一样的。注: 准确的讲是一个ClassLoader下,一种类,只会有一个类对象存在。通常一个JVM下,只会有一个ClassLoader。因为还没有引入ClassLoader概念, 所以暂时不展开了。package reflection;import charactor.Hero;public class TestReflection {public static void main(String[] args) {String className = "charactor.Hero";try {Class pClass1=Class.forName(className);Class pClass2=Hero.class;Class pClass3=new Hero().getClass();System.out.println(pClass1==pClass2);System.out.println(pClass1==pClass3);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}步骤 3 : 获取类对象的时候,会导致类属性被初始化
    为Hero增加一个静态属性,并且在静态初始化块里进行初始化,参考 类属性初始化。 static String copyright;static {System.out.println("初始化 copyright");copyright = "版权由Riot Games公司所有";}
    无论什么途径获取类对象,都会导致静态属性被初始化,而且只会执行一次。(除了直接使用 Class c = Hero.class 这种方式,这种方式不会导致静态属性被初始化)

    4034c7c9fb188cf69dbf8eb9ead0f8e7.png
    • Hero.java
    • TestReflection.java

    package charactor;public class Hero {public String name;public float hp;public int damage;public int id;static String copyright;static {System.out.println("初始化 copyright");copyright = "版权由Riot Games公司所有";}}package reflection;import charactor.Hero;public class TestReflection {public static void main(String[] args) {String className = "charactor.Hero";try {Class pClass1=Class.forName(className);Class pClass2=Hero.class;Class pClass3=new Hero().getClass();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
    更多内容,点击了解: https://how2j.cn/k/reflection/reflection-class/108.html

    展开全文
  • String pooling字符串池(有时也称为字符串规范化)是使用单个共享String对象替换具有相同值但不同标识的多个String对象的过程 . 您可以通过保留自己的Map(根据您的要求可能有软或弱引用)并使用map值作为规范化值来...

    String pooling

    字符串池(有时也称为字符串规范化)是使用单个共享String对象替换具有相同值但不同标识的多个String对象的过程 . 您可以通过保留自己的Map(根据您的要求可能有软或弱引用)并使用map值作为规范化值来实现此目标 . 或者您可以使用JDK提供给您的String.intern()方法 . 在Java 6时,使用String.intern()被许多标准禁止,因为如果池失控,很可能获得OutOfMemoryException . 字符串池的Oracle Java 7实现发生了很大变化 . 您可以在http://bugs.sun.com/view_bug.do?bug_id=6962931和http://bugs.sun.com/view_bug.do?bug_id=6962930中查找详细信息 .

    String.intern() in Java 6

    在那些美好的旧时代,所有实习字符串都存储在PermGen中 - 堆的固定大小部分主要用于存储加载的类和字符串池 . 除了显式实现的字符串之外,PermGen字符串池还包含程序中先前使用的所有文字字符串(这里使用的重要字 - 如果类或方法是永远不会加载/调用,其中定义的任何常量都不会被加载) . Java 6中这种字符串池的最大问题是它的位置 - PermGen . PermGen具有固定大小,无法在运行时扩展 . 您可以使用-XX:MaxPermSize = 96m选项进行设置 . 据我所知,默认的PermGen大小在32M到96M之间变化,具体取决于平台 . 您可以增加其大小,但其大小仍将固定 . 这种限制需要非常小心地使用String.intern - 你最好不要使用这种方法实现任何不受控制的用户输入 . 这就是为什么Java 6时的字符串池主要在手动管理的映射中实现的原因 .

    String.intern() in Java 7

    Oracle工程师对Java 7中的字符串池逻辑进行了非常重要的更改 - 字符串池已重新定位到堆中 . 这意味着您不再受限于单独的固定大小的内存区域 . 所有字符串现在都位于堆中,与大多数其他普通对象一样,它允许您在调整应用程序时仅管理堆大小 . 从技术上讲,仅此一点可能是重新考虑在Java 7程序中使用String.intern()的充分理由 . 但还有其他原因 .

    String pool values are garbage collected

    是的,如果程序根目录中没有对它们的引用,则JVM字符串池中的所有字符串都有资格进行垃圾回收 . 它适用于所有讨论过的Java版本 . 这意味着如果您的实习字符串超出范围并且没有其他引用 - 它将从JVM字符串池中进行垃圾收集 . 有资格进行垃圾收集并驻留在堆中,JVM字符串池似乎是所有字符串的正确位置,不是吗?理论上确实如此 - 未使用的字符串将从池中进行垃圾收集,使用的字符串将允许您节省内存,以防从输入中获得相等的字符串 . 似乎是一个完美的记忆保存策略?几乎如此 . 在做出任何决定之前,您必须知道如何实现字符串池 .

    展开全文
  • Synchronized与Java对象

    2020-03-06 12:47:53
    1 synchronized实现原理 synchronized实现同步基础是:Java每一个对象都可以作为锁。具体表现为以下3种形式: 对于普通同步方法,锁是当前实例对象。 对于静态同步方法,锁是...那么锁到底存在哪里呢?锁...
  • 我们对该副本的操作不能影响到原对象中的数据,这时候,我们就需要对该对象进行一个复制版本,也就是我要说的克隆Clone.clone方法原型介绍在讲对象的克隆之前,我们先来了解一下Clone方法存在哪里,Clone方法是Object类中...
  • Java字符串存储在哪里

    2020-09-18 13:29:29
    早上看群友们在讨论,出现了Java字符串究竟在哪里的话题,粗略目睹虚拟机的菜鸡本人...即使调用了常量创建的对象的方法,该对象也并不会发生什么变化:说明就是一个对象,而不是一组数组 public class TestString { .
  • 首先说个奇怪的经历,面试老师问我JAVA八大基本数据类型,我可是掰着手指算的8个,当时面试老师给我说你这样肯定落下一个...何为继承,表现形式:继承已存在的类就是复用类的方法和域,在此基础上,还可以添加一些新...
  • 1.java常量池介绍java常量池,通常指是运行时常量池,它是方法一部分,一个jvm实例只有一个运行常量池,各线程间共享该运行常量池。java常量池简介:java常量池中保存了一份在编译期间就已确定数据。...
  • 而面向对象不仅仅是简单的书上所学的对编程对象的处理方式,准确来说,面向对象是将现实世界中存在的主体与其之间的关系进行想象,将这种想象力融入到编程之中,程序中各段代码、各个主体与这种关系,例如面向对象...
  • 常量池其实也就是一个内存空间,常量池存在方法区中Java是一种动态链接语言,常量池作用非常重要,常量池中除了包含代码中所定义各种基本类型(如int、long等等)和对象型(如String及数组)常量值...
  • Java数组和对象数组

    2020-07-17 11:57:37
    楼是存在地球上,那么数组是存在哪里的呢?==>内存 (2)数组引用(使用) 数组名[下标],比如:你要使用a数组第三个数a[2]。 2.没事找事法 第一步:先声明数组 语法:数据类型 数组名[ ];也可以数据类型...
  • 对于静态同步方法,锁是当前对象的Class对象。对于同步方法块,锁是Synchonized括号里配置的对象。 当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。那么锁存在哪里呢?锁里面会...
  • 目录 工厂方法模式比简单工厂模式好在哪里 ...虽然简单工厂模式实现了对象的创建和使用分离,但是仍然存在如下两个问题: (1) 工厂类过于庞大,包含了大量的if…else…代码,导致维护和测试难度增大; ...
  • // TODO 自动生成的方法存根 if(down){ down=false; iv.setBackgroundResource(R.drawable.up_icon); leixingLayout.setVisibility(View.VISIBLE); }else{ down=true; ...
  • 1、首先我们来看一种创建对象的方式,这代码都见过。但是你知道他们都存在哪里吗? 2、再来看一张图你或许就明白了。 有用点赞,手留余香!
  • 设计模式-状态模式java 在本教程中... 这种模式有助于我们避免在该类的方法中对对象的状态进行长时间的条件检查。 有了它,让我们开始吧! 状态设计模式: 我们可以用下面的UML图表示状态设计模式: 哪里, ...
  • java设计模式之状态模式 ... 这种模式有助于我们避免在该类的方法中对对象的状态进行长时间的条件检查。 有了它,让我们开始吧! 状态设计模式: 我们可以用以下UML图表示状态设计模式: 哪里,...
  • 1. 第一个问题:我们知道JVM中对于静态变量的存储是在方法区中(permGen),那么当我们声明一个类的静态变量并且立即初始化为该变量为一个对象时,该对象是存在哪里的呢?PermGen中是只存了该对象的引用还是将该对象的...
  • java提纲_Java复习提纲

    2021-03-05 17:09:32
    Java复习提纲 Java 复习提纲1、请说明结构化编程与面向对象的主要区别。2、OOP 程序设计的出发点在哪里?应用程序中存在哪几种类?其中最关键的是哪一种类?实体类 过程类 事件类 实体类最关键3、何谓构造函数?构造...
  • Java状态设计模式

    2020-06-14 14:19:24
    这种模式有助于我们避免在该类的方法中对对象的状态进行长时间的条件检查。 有了它,让我们开始吧! 状态设计模式: 我们可以用以下UML图表示状态设计模式: 哪里, 状态–表示一个抽象...
  • 之后我就似乎有点明白了,C语言在编程过程中没有如同java一般有类和对象的存在。在java中我要实现某一个功能我就必须声明一个类(当然也可以在主类里面实现,这里是指不在主类里想要实现某一个功能),比如person类...
  • JVM进阶(二)——初识JAVA

    万次阅读 多人点赞 2017-01-08 14:29:31
    还讲到了他是保存对象的引用,那么对象存在哪里呢?我们来看看昨天的一张图:   对象就存在图中的内存区域,在JVM中,那片区域叫做堆!   由图中可以看到堆的存储结构和栈是不同的,堆在内存中并不是一块...
  • 我们知道JVM中对于静态变量的存储是在方法区中(permGen),那么当我们声明一个类的静态变量并且立即初始化为该变量为一个对象时,该对象是存在哪里的呢? PermGen中是只存了该对象的引用还是将该对象的实际占用空间也...
  • 秋招面试高频考点,敲黑板。 一 Java基础 Java和C语言有什么区别?Java好在哪里? 怎么理解Java的跨平台性,一次编译到处运行? 面向对象和面向过程区别?...终止方法存在的意义是什么? 二 Java集合 Has
  • JAVA常见基础面试问题汇集

    千次阅读 多人点赞 2020-03-12 17:57:01
    1.Java 的多态表现在哪里? 多态要有动态绑定,否则就不是多态,方法重载也不是多态(因为方法重载是编译期决定好的,没有后期也就是...(2)抽象类中可以存在非抽象方法,接口中的方法都是抽象方法 (3)抽象类可以有私...
  • (二)JAVA

    2018-05-25 11:51:25
    还讲到了他是保存对象的引用,那么对象存在哪里呢?我们来看看昨天的一张图:   对象就存在图中的内存区域,在JVM中,那片区域叫做堆!   由图中可以看到堆的存储结构和栈是不同的,堆在内存中并不是一块连续...
  • Java程序员面试宝典pdf

    热门讨论 2013-02-21 13:06:13
    面试题077 如何序列化和反序列化一个Java对象 131 7.4 小结 133 第8章 多线程编程( 教学视频:37分钟) 134 8.1 多线程编程基本概念 134 面试题078 什么是多线程 134 面试题079 解释进程和线程区别 135 8.2 ...

空空如也

空空如也

1 2 3 4 5
收藏数 91
精华内容 36
关键字:

java对象的方法存在哪里

java 订阅