草庐IT

final_msg

全部标签

Java:final 关键字的内存使用情况?

当你在类中声明一个final变量(常量)时,例如:privatestaticfinalintMyVar=255;如果我有100,000个声明此类的实例,这需要多少内存?它将变量链接到类并因此使用1*MyVar内存(忽略内部指针),还是链接到该变量的实例并创建该变量的100,000*MyVar副本?令人难以置信的快速响应!共识似乎是,如果一个变量既是静态变量又是最终变量,那么它将需要1*MyVar。谢谢大家! 最佳答案 final关键字与使用的内存量无关,因为它只表示您不能更改变量的值。但是,由于变量被声明为static,因此只有一个

java - 为什么不将数组声明为 final 使其在 Java 中不可变?

为什么在Java中声明数组final不能使其不可变?声明某些东西不是意味着它不能改变吗?来自questionrelatedtoimmutablearray很明显,将数组声明为final并不会使它不可更改。以下是可能的。finalint[]array=newint[]{0,1,2,3};array[0]=42;我的问题是:那么这里声明final的作用是什么? 最佳答案 final只是关于它标记的reference;Java中没有不可变数组这样的东西。当你说privatefinalint[]xs=newint[20];你不能说xs=ne

java - Try-catch-finally 的执行顺序似乎是随机的

这个问题在这里已经有了答案:WhydoestheexecutionorderbetweentheprintStackTrace()andtheothermethodsappeartobenondeterministic?(1个回答)关闭7年前。我正在尝试了解try-catch-finally执行流程的工作原理。StackOverflow用户针对他们的执行流程提供了一些解决方案。一个这样的例子是:try{//...somecode:A}catch(...){//...exceptioncode:B}finally{//finallycode:C}CodeAisgoingtobeexecu

java - 如果没有在代码中修改,我应该声明一个 java 字段 'final' 吗?

我的问题主要是关于性能的。编译器更清楚,例如,某些变量在对象实例化后未被修改。那么,为什么要打扰final?我想这里可能会出现许多结构/逻辑原因,但从性能的角度来看呢?重要吗?谢谢, 最佳答案 在现代JVM中,final不应影响性能。对于私有(private)字段尤其如此,但即使对于非私有(private)字段,JIT也可以优化非最终字段,认为它们是最终字段,然后deoptimize如果它加载了一些实际上确实修改了该字段的代码。也就是说,使用final的主要原因不是性能,而是让您的代码更易于维护。通过将字段设置为最终字段,您可以减少

JAVA笔试基础知识-final/static+abstract/interface+wait/sleep+tcp/udp

1、final关键字和static关键字的区别/***final修饰类:*使用final修饰类的目的简单明确,表明这个类不能被继承。*当程序中有永远不会被继承的类时,可以使用final关键字修饰。*被final修饰的类所有成员方法都将被隐式修饰为final方法。**final修饰方法:*首要作用是锁定方法,不让任何继承类对其进行修改。*另外一个作用是在编译器对方法进行内联,提升效率。**final修饰变量:*当final修饰的是一个基本数据类型数据时,这个数据的值在初始化后将不能被改变。(变为常量)*当final修饰的是一个引用类型数据时,也就是修饰一个对象时,引用在初始化后将永远指向一个内存

java - 中断的 Java 线程真的可以跳过 finally 子句吗?

当我从theOracleJavatutorial读到这篇文章时,我正在调查一个经常重复的谣言,即JVM上的守护线程以某种特殊方式处理finallyblock(他们不这样做,好吗?):Note:IftheJVMexitswhilethetryorcatchcodeisbeingexecuted,thenthefinallyblockmaynotexecute.Likewise,ifthethreadexecutingthetryorcatchcodeisinterruptedorkilled,thefinallyblockmaynotexecuteeventhoughtheapplica

java - 如果运行该函数的线程被中断,finally block 是否会执行?

如果我有一个带有try/finally部分的函数,并且运行它的线程在tryblock中被中断,finallyblock是否会在中断实际发生之前执行? 最佳答案 AccordingtotheJavaTutorials,"如果执行try或catch代码的线程被中断或杀死,则finallyblock可能不会执行,即使整个应用程序也是如此继续。”全文如下:Thefinallyblockalwaysexecuteswhenthetryblockexits.Thisensuresthatthefinallyblockisexecutedeven

java - finally block 没有 try and catch 是否有效?

我试图在不使用try/catchblock的情况下使用finallyblock,但在Eclipse中出现错误。我可以在不使用try/catchblock的情况下使用finallyblock吗? 最佳答案 finally应该至少有一个tryblock,catch是可选的。finallyblock的目的是确保无论是否抛出异常,都可以清除内容。根据JLSAfinallyclauseensuresthatthefinallyblockisexecutedafterthetryblockandanycatchblockthatmightbee

Java并手动执行finalize

如果我在我的程序代码中对一个对象调用finalize(),当垃圾收集器处理该对象时,JVM是否仍会再次运行该方法?这将是一个近似的例子:MyObjectm=newMyObject();m.finalize();m=null;System.gc()显式调用finalize()是否会使JVM的垃圾收集器不在对象上运行finalize()方法m? 最佳答案 根据这个简单的测试程序,JVM仍然会调用finalize(),即使您显式调用了它:privatestaticclassBlah{publicvoidfinalize(){System.

java - 如何删除警告 The serializable class ClASSNAME does not declare a static final serialVersionUID field of type long

这个问题在这里已经有了答案:WhatisaserialVersionUIDandwhyshouldIuseit?(25个答案)关闭4年前。我创建了一个扩展Exception类的类,我在Eclipse上收到了这个警告TheserializableclassPhoneAlreadyExistsdoesnotdeclareastaticfinalserialVersionUIDfieldoftypelong请问如何删除它?publicclassPhoneAlreadyExistsextendsException{publicPhoneAlreadyExists(){//TODOAuto-ge