草庐IT

final-class

全部标签

java - 为一个类生成多个 .class 文件?

好奇,为什么有时候一个类编译后会生成多个Java.class文件?例如,我的应用程序有六个类。对于一个类(class),总共生成了10个.class文件,从MyClass#1到MyClass#10。 最佳答案 这些用于innerclasses和staticnestedclasses.带数字的是匿名内部类。例如:classFoo{classBar{}staticclassBaz{}voidrun(){Helpert=newHelper(){inthelpMethod(){return2;}};}}这将生成类文件Foo.class、Fo

Java使用非final变量设置final变量

这可能是个愚蠢的问题,但我还是会冒险问这个问题。我经常需要创建一个final变量以在其他地方使用,并且需要根据某些条件设置该变量的值。这是我通常的做法:StringnotFinalVersion=null;if(someThing==1){notFinalVersion="Thevaluewas1.";}else{notFinalVersion="Thevalueisnot1.";}finalStringfinalVersion=notFinalVersion;然后我可以在需要的地方使用变量finalVersion。但是,这似乎有点不对劲。有更好的方法吗?编辑:我所说的“更好”是指我正

java - 使用 final 关键字声明一个列表字段

如果我在Synapse是抽象类型的类中有以下语句:privatefinalListsynapses;final是否允许我仍然能够更改List中的Synapse对象的状态,但阻止我添加新的Synapse对象到列表?如果我错了,你能解释一下final是做什么的,以及我什么时候应该使用关键字final吗? 最佳答案 不,final关键字不会使列表或其内容不可变。如果你想要一个不可变的列表,你应该使用:ListunmodifiableList=Collections.unmodifiableList(synapses);final关键字的作

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

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

java - SEVERE : A message body writer for Java class java. 未找到 util.ArrayList 和 MIME 媒体类型 application/json

我正在测试RESTful服务,当我执行时出现异常,尽管我的类路径(WEB-INF/lib)中有以下jar,我没有使用Maven,我的JDK版本是1.5。有关此问题的其他问题无助于解决问题。代码片段@GET@Produces("application/json")//@Produces({MediaType.APPLICATION_JSON})triedthis,didn'tworkeitherpublicListgetEmployees(){ListempList=myDAO.getAllEmployees();log.info("size"+empList.size());retur

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.lang.Class 对象获取源文件名/行号

是否有可能,给定一个java.lang.Class对象,获取源文件名和声明该类的行号?数据应该在.class文件的调试信息中可用。我所知道的唯一一个JDK返回此类调试信息的地方是java.lang.StackTraceElement,但我不确定是否可以强制Java创建java.lang。StackTraceElement任意类的实例,因为我们没有在类中执行方法。我的确切用例是一个匿名内部类,它有一个编译器生成的名称。我想知道类声明的文件名和行号。我不喜欢使用字节码操作框架,但如果必须的话,我可以回退到它。 最佳答案 这个问题的答案归