首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

对基本类型包装常量补充

在前文JAVA-常量常量池中,对java中各种常量池进行分析。在具体细节中,并不完善。现在对数据类型包装常量池进行相应补充。有很多细节也是面试中容易遗漏地方。...JLS7 5.1.7) assert IntegerCache.high >= 127; } private IntegerCache() {} } 作为Integer内部类...这样在比较过程中,所有的Boolean实际上所有boxed对象最终都只有这两个。...总结 对于java中8种基本数据类型,存在Cache情况如下: 原始类型 缓存类型 范围 是否可调整 int IntegerCache -128-127 通过-XX:AutoBoxCacheMax...这样可以节省大量内存空间。需要注意是: GC对常量池cache缓存没有任何影响。除非类从jvm卸载。

47810
您找到你想要的搜索结果了吗?
是的
没有找到

关于静态常量类型 修饰 方法变量部分理解

分两个部分进行记录 目录 静态(static) 修饰/方法/变量 静态(static) 修饰 静态(static) 修饰方法/变量 常量(final) 修饰/方法/变量 常量(final) 修饰...常量(final) 修饰方法/变量 静态(static) 修饰/方法/变量 静态(static) 修饰 Java里面static一般用来修饰成员变量或函数。...重写功能是:"重写"后子类优先级要高于父优先级,但是“隐藏”是没有这个优先级之分常量(final) 修饰/方法/变量 常量(final) 修饰 final 修饰不能被继承。...常量(final) 修饰方法/变量 1.final修饰成员和成员变量,可以被继承。 2.final修饰方法可以被继承不能被重写(这个一定是不能重写,因为重写在初始化时候是会报错)。...3. final 修饰方法不能被子类重写。 final 修饰变量(成员变量或局部变量)即成为常量,只能赋值一次。

86520

消息中间件RabbitMQ系列,对直连模式总结,也就是优化代码,对冗余代码提取成为工具(五)

之前我们已经对直连模式进行了讲解,并且用代码实现了发送端和接收端,但是发送端和接收端代码有很多重复,我们就需要优化代码,提取冗余代码为工具。...,这个是依赖里面的,我们只需要拿过来创建对象就可以了 // 设置连接rabbitmqip connectionFactory.setHost("192.168.40.145..."); // 设置端口号 connectionFactory.setPort(5672); // 设置连接虚拟主机 connectionFactory.setVirtualHost...("123"); } // 定义提供连接对象方法 public static Connection getConnection() { try {...Exception e) { e.printStackTrace(); } return null; } //关闭通道和关闭连接方法

30610

效率编程 之「和接口」

如果一个包级私有的顶层(或者接口)只是在一个内部被用到,就应该考虑使成为唯一使用它那个私有嵌套。...第 2 条:在公有中使用访问方法而非公有域以及使可变性最小化 说到公有时候,毫无疑问,坚持面向对象程序设计思想看法是正确:如果类可以在它所在外部进行访问,就提供访问(getter)方法,...为了使成为不可变,要遵循下面五条规则: 不要提供任何会修改对象状态方法; 保证不会被扩展,一般做法是使这个成为fianl使所有的域都是fianl使所有的域都成为私有的; 确保对于任何可变组件互斥访问...这两种机制之间最明显区别在于,抽象允许包含某些方法实现,但是接口则不允许。一个更为重要区别在于,为了实现由抽象定义类型必须成为抽象一个子类。...如果声明成员不要求访问外围实例,就要始终把static修饰符放在声明中,使成为静态成员,而不是非静态成员

70130

Java面向对象

面向对象和面向过程 (1)面向过程 强调过程,执行者:它是一种更符合人们思考习惯思想; (2)面向对象 强调对象,指挥者:使复杂内容简单化; (3)面向对象思想特点:使我们从执行者变成了指挥;...使用时候,调用方法,this 就代表。 (2)什么时候使用 this 呢? A:当局部变量和成员变量重名时候,可以用 this 进行区分。...创建对象在内存中详细步骤: Person p = new Person(); 1.主方法进栈,给类型变量 p 分配空间 2.在堆内存中开辟空间,分配内存地址 3.在堆内存中建立对象特有属性,并进行默认初始化...方法区 方法区是各个线程所共享内存区域,它用于存储已被虚拟机加载信息,常量,静态变 量,即时编译器编译后代码等数据....final 修饰变量是一个常量, 只能被赋值一次。 17. final 和 private 区别 final 修饰可以访问。

28330

Java虚拟机是如何加载Java

上文中说过Java中有两种类型:基本类型和引用类型,而基本类型是由虚拟机预先定义好,引用类型泛型参数又会在编译过程中被擦除,所以加载对象就剩下、接口和数组。...在大型应用中,我们往往借助这一特性,来运行同一个不同版本。 2.链接 是指将创建成合并至 Java 虚拟机中,使之能够执行过程。它可分为验证、准备以及解析三个阶段。...解析阶段:将符号引用解析成为实际引用(Java 虚拟机规范并没有要求在链接过程中完成解析。仅规定了:如果某些字节码使用了符号引用,那么在执行这些字节码之前,需要完成对这些符号引用解析)。...3.初始化 初始化即给常量赋值以及执行 方法过程,完成之后,才正式成为可执行状态。...,初始化这个; 当初次调用 MethodHandle 实例时,初始化该 MethodHandle 指向方法所在

48320

Java虚拟机是如何加载Java?

应用加载器加载器则是扩展加载器。负责加载应用程序路径下。...举例来说,对于一个方法调用,编译器会生成一个包含目标方法所在名字、目标方法名字、接收参数类型以及返回值类型符号引用,来指代所要调用方法。 解析阶段目的,正是将这些符号引用解析成为实际引用。...如果直接赋值静态字段被 final 所修饰,并且类型是基本类型或字符串时,那么该字段便会被 Java 编译器标记成常量值(ConstantValue),其初始化直接由 Java 虚拟机完成。...只有当初始化完成之后,才正式成为可执行状态。这放在我们盖房子例子中就是,只有当房子装修过后,Tony 才能真正地住进去。 那么,初始化何时会被触发呢?...链接,是指将创建成合并至 Java 虚拟机中,使之能够执行过程。链接还分验证、准备和解析三个阶段。其中,解析阶段为非必须

70370

java编程基础(入门级)(超级完整版)「建议收藏」

_this关键字作用 【1】当局部变量和成员变量重名时,根据“就近原则”,优先使用局部变量 【2】如果需要访问本类当中成员变量,需要使用格式: this.成员变量名 【3】通过调用方法,就是...,通过调用方法,就是当前对象。...三个关键字进行修饰 【2】从效果上看,这其实就是接口常量 【3】格式 public static final 数据类型 常量名称 = 数据值; 【4】一旦使用final关键字修饰,代表不可改变...子类没覆盖重写就是子 子类覆盖重写就是父 【3】编译看左边,运行还看左边 4.多态中成员方法使用特点 【1】看new就优先用,没有则向上找 【2】编译看左边,运行看右边 编译看左边:...,把当作父来看待 TIPS: 向上转型一定是安全:从小范围转向大范围 7.对象向下转型 【1】向上转型弊端: 无法调用子类原本特有的方法 【2】解决方案:用对象向下转型【还原动作】

94240

深入理解Java加载机制

1.加载,就是查找字节流,并且据此生成一个代表这个java.lang.Class对象过程。...三:链接 链接,是指将创建成合并至Java虚拟机中,使之能够执行过程。分为验证,准备和解析三个阶段。 1.验证 该阶段目的在于确保被加载能够满足Java虚拟机约束条件。...如果直接赋值静态字段被 final 所修饰,并且类型是基本类型或字符串时,那么该字段便会被 Java 编译器标记成常量值(ConstantValue),其初始化直接由 Java 虚拟机完成。...只有当初始化完成之后,才正式成为可执行状态。...初始化该静态方法所在; d.当遇到访问静态字段指令时,初始化该静态字段所在; e.子类初始化会触发父初始化; f.如果一个接口定义了 default 方法,那么直接实现或者间接实现该接口初始化

34810

Effective-java-读书笔记之类和接口

(或接口)只是在某一个内部被用到, 就应该考虑使成为那个私有嵌套.对于成员(域, 方法, 嵌套和嵌套接口), 有四种可能访问级别(可访问性递增):私有的(private).包级私有的(package-private...使子类更易提供针对子列表快速clear方法.对于为了继承而设计, 唯一测试方法就是编写子类.在为了继承而设计有可能被广泛使用时, 必须要意识到, 对于文档中所说明自用模式, 以及对于其受保护方法和域中所隐含实现策略..., 依然必须实现这个接口; 所有子类命名空间也会被接口中常量污染.如果要导出常量, 可以有几种合理选择方案:如果这些常量与某个现有的或者接口紧密相关, 就应该把这些常量添加到这个或者接口中.如果这些常量最好被看作枚举类型成员..., 就应该用枚举类型来导出这些常量.使用不可实例化工具来导出这些常量.总结: 接口应该只被用来定义类型, 它们不应该被用来导出常量.第23条 层次优于标签有时候, 可能会遇到带有两种甚至更多种风格实例..., 就要始终把static修饰符放在声明中, 使成为静态成员.常见用法: 作为公有的辅助, 仅当与它外部类一起使用时才有意义.私有静态成员一种常见用法是用来代表外围所代表对象组件.

66571

技术转载——JVM里面Java生命周期,一篇搞定

解析阶段 上面说到“在运行阶段,这个符号引用一般都能够无歧义地定位到具体目标上”,就是在解析阶段进行符号解析。 这个阶段目的正是将常量池中符号引用转换解析成为实际引用。...除了 final static 修饰常量,直接赋值操作以及所有静态代码块中代码,则会被 Java 编译器置于同一方法中,并把命名为 。...; 当初次调用 MethodHandle 实例时,初始化该 MethodHandle 指向方法所在。...卸载 那么多,什么 时候 卸载 呢?...关于卸载,满足如下条件: 该类所有的实例都已经被回收,也就是java堆中不存在该类任何实例; 加载该类ClassLoader已经被回收; 该类对应java.lang.Class对象没有任何地方被引用

44920

Java 学习笔记(7)——接口与多态

上一篇说了Java面向对象中继承关系,在继承中说到:调用对象中成员变量时,根据引用类型来决定调用,而调用成员方法时由于多态存在,具体调用方法需要根据new出来对象决定,这篇主要描述是Java...Parent obj = new Parent(); obj.sayHello(); 这个例子也不满足多态,使用父引用指向了父,这里就是一个正常方法调用,它会调用父方法 Child obj...类型转化 上面的println 函数,需要传入是Object引用,但是在调用该方法时,从来都没有进行过类型转化,都是直接传,这里是需要进行类型转化,在由子类转到父时候,Java进行了隐式类型转化...在代码中接口就是多个公共规范。 Java中接口也是一个引用类型。接口与抽象非常相似,同样不能创建对象,必须创建实现方法。但是接口与抽象还是有一些不同。...除了有抽象方法,接口中也可以有常量。 接口中抽象方法是没有方法体需要实现来实现,所以实现与接口中发生重写现象时会调用实现,那么常量呢?

75640

第4章 和接口

不可变五条规则: 不要提供任何会修改对象状态方法。 保证不会被扩展。 一般用final修饰 使所有的域都是final使所有的域都成为私有的。...,可能你会跟我一样奇怪,接口不就是用来定义类型吗,还能用来干嘛?...有一种接口被称为 常量接口 ,就是没有方法,只有常量接口,这常量接口模式是对接口不良使用,因为没什么卵用还会污染实现 Java中有几个常量接口,如java.io.ObjectStreamConstants...~ 建议常量用工具或者枚举或者@IntDef注解来实现 第20条 层次优于标签 标签,书中对定义说得很拗口。...所以通常情况更推荐静态成员,书中有一句话:如果声明成员不要求访问外围实例,就要始终把static修饰符放在声明中,使成为静态成员,而不是非静态成员 匿名 & 局部类 匿名,没有名字,

52330

【JVM故事】了解JVM结构,好在面试时吹牛

element类型就是数组里面存储最小数据类型必须是一个基本类型类型,或接口类型。 对于一维数组的话,component类型和element类型是相同。...运行时常量池 运行时常量就是或接口字节码文件里常量运行时表示形式,包含几种常量。...帧分配在创建帧线程jvm栈上,每一个帧都有自己本地变量数组,自己操作数据栈,和一个对当前方法所在运行时常量引用。...方法调用 一个方法调用正常完成(即没有抛异常)时,会根据所返回类型执行一个适合return指令,当前帧会去恢复调用者状态,包括本地变量和操作数栈,使调用者程序计数器适合递增来跳过刚刚那个方法调用指令...一些库中如果没有jvm协助是无法实现。 反射,就是在运行时获取某个类型相关信息,如字段信息,方法信息,构造函数信息,父信息,实现接口信息。

45910

重构-改善既有代码设计:重新组织数据16种方法(六)

去除不必要关联。 双向关联很有用,但你必须为付出代价,那就是维护双向连接、确保对象被正确创建和删除而增加复杂度。而且,由于很多程序员并不习惯使用双向关联,往往成为错误之源。...任何接受类型码作为参数函数,所期望实际上是一个数值,无法强制使用符号名。这会大大降低代码可读性,从而成为bug之源。 如果把那样数值换成一个,编译器就可以对这个进行类型检验。...只有当类型码是纯粹数据时(也就是类型码不会在switch语句中引起行为变化时),你才能以来取代。...但如果类型码会影响宿主行为,那么最后办法就是借助多态来处理变化行为。 一般来说,这种情况标志就是像switch这样条件表达式。...修改这些函数,使它们返回超某个(新增)只读,然后销毁子类。 建立子类目的,是为了增加新特性或变化其行为。有一种变化行为被称为“常量函数”,它们会返回一个硬编码值。

54020

效率编程 之「枚举和注解」

在 Java 1.5 发行版之前,表示枚举常用模式是声明一组具名int常量,每个类型成员一个常量: public class IntEnum { public static final int...枚举类型本质上是int值,其背后基本思想非常简单:它们就是通过公有的静态final域为每个枚举常量导出实例。...如果一个枚举具有普遍适用性,它就应该成为一个顶层;如果只是被用在一个特定顶层中,它就应该成为该顶层一个成员。...通过策略枚举,使我们代码更加安全和简洁。总之,如果多个枚举常量同时共享相同行为,就应该考虑使用策略枚举。...Test { } Test注解类型声明就是自身通过Retention和Target注解进行了注解。

46220

全面分析Java垃圾回收机制

1,static修饰属性(变量),那么这个属性就可以用 名.属性名 来访问,也就是使这个属性成为本类变量,为本类对象所共有。这个属性就是公有。(共有的变量与对象无关,只和有关)。...java中main方法必须写成static因为,在加载时无法创建对象,因为静态方法可以不通过对象调用 所以在main方法。所在加载时就可以通过main方法入口来运行程序。...在什么时候会被加载,构造(创建)对象时会加载,调用中静态方法或访问静态属性也是会加载这个静态方法真正所在。...注意:final,不能用来修饰构造方法,在父中如果有常量属性,在子类中使用常量属性时是不会进行父加载。静态常量如果其值可以确定,就不会加载该类,如果不能确定则会加载该常量所在。...abstract(抽象)修饰符,可以修饰和方法 1,abstract修饰,会使这个成为一个抽象,这个将不能生成对象实例,但可以做为对象变量声明类型,也就是编译时类型,抽象就像当于一半成品

56710
领券