标签: final

Java 7 - 精确重新抛出最终异常

在以前的java版本中,重新抛出异常被视为抛出catch参数的类型.

例如:

public static void test() throws Exception{
    DateFormat df = new SimpleDateFormat("yyyyMMdd");
    try {
        df.parse("x20110731");
        new FileReader("file.txt").read();
    } catch (Exception e) {
        System.out.println("Caught exception: " + e.getMessage());
        throw e;
    }
}
Run Code Online (Sandbox Code Playgroud)

在Java 7中,如果声明异常,则可以更精确地了解抛出的异常final:

//(doesn't compile in Java<7)
public static void test2() throws ParseException, IOException{
    DateFormat df = new SimpleDateFormat("yyyyMMdd");
    try {
        df.parse("x20110731");
        new FileReader("file.txt").read();
    } catch (final Exception e) {
        System.out.println("Caught exception: " + e.getMessage());
        throw e;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题:文档说我需要声明异常final.但如果我不这样做,上面的代码仍然编译和工作.我错过了什么吗?

参考文献:

项目硬币:多次捕获和最终重新抛出为重新抛出的
异常添加更灵活的检查

java final exception java-7

22
推荐指数
1
解决办法
6232
查看次数

为什么Java enum不能是最终的?

public interface Proposal  {  
    public static final enum STATUS { 
        NEW ,
        START ,
        CONTINUE ,
        SENTTOCLIENT
    }; 
}
Run Code Online (Sandbox Code Playgroud)

Java不允许枚举final在接口内部,但默认情况下,接口内的每个数据成员都是public static final.任何人都可以澄清一下吗?

java enums final

22
推荐指数
3
解决办法
2万
查看次数

错过优化: std::vector&lt;T&gt;::pop_back() 不符合析构函数调用条件?

在向量中,std::vector<T>向量拥有分配的存储空间,它构造Ts 并析构Ts。无论 的T类层次结构如何,std::vector<T>都知道它只创建了 a T,因此在.pop_back()调用时它只需要销毁 a T(而不是 的某些派生类T)。采取以下代码:

#include <vector>

struct Bar {
    virtual ~Bar() noexcept = default;
};

struct FooOpen : Bar {
    int a;
};

struct FooFinal final : Bar {
    int a;
};

void popEm(std::vector<FooOpen>& v) {
    v.pop_back();
}

void popEm(std::vector<FooFinal>& v) {
    v.pop_back();
}
Run Code Online (Sandbox Code Playgroud)

https://godbolt.org/z/G5ceGe6rq

for只是将向量的大小减少 1(元素)PopEmFooFinal这是有道理的。但是PopEmforFooOpen调用该类通过扩展而获得的虚拟析构函数Bar。鉴于这FooOpen不是最终的,如果在指针delete …

c++ destructor final vector

22
推荐指数
2
解决办法
576
查看次数

Java中const(C++)的等价物

我想知道在Java中是否有相当于c ++的const.我理解final关键字,但遗憾的是我无法使用它来声明函数返回值final.相反,它始终确保功能不能被覆盖,正确吗?

基本上,我想确保给定的返回类不能被修改并且是只读的.这可能在Java中吗?

c++ java final

21
推荐指数
2
解决办法
5961
查看次数

在捕获异常时是否有理由不使用final关键字?

我在一些示例BlackBerry Java类中看到了以下一些代码:

try
{
    // stuff that will throw an exception
}
catch(final Exception e)
{
    // deal with it
}
Run Code Online (Sandbox Code Playgroud)

我认为这final是为了表现.根据标题,因为很少(永远?)任何理由来修改Exception已经抛出的东西,它们应该永远存在final吗?

如果是这样,这不是编译器可以完成的事情吗?或者由编译器完成并final手动添加没有任何影响?

java performance final exception

21
推荐指数
1
解决办法
2553
查看次数

为什么我们不能通过类名在静态块中设置静态最终变量的值

例如,考虑下面的代码捕捉:

public static final int a;
public static final int b;

static {
    a = 8;       // it's working
    Test.b = 10; // compilation error Test.b cannot be assigned. 
}
Run Code Online (Sandbox Code Playgroud)

为什么我们不能Test.b = 10;Test类本身的静态块中使用?没有班级名称,它工作正常.

这背后有什么理由吗?

java static final static-block

21
推荐指数
1
解决办法
2287
查看次数

不可变类应该是最终的?

它在本文中说:

让一个类成为最终因为它是不可变的是这样做的一个很好的理由.

我对此感到有点困惑......我理解不变性是线程安全性和简单性的POV中的好东西,但似乎这些问题与可扩展性有些正交.那么,为什么不变性成为最终上课的一个很好的理由呢?

java oop final

20
推荐指数
4
解决办法
7962
查看次数

在Java中初始化最终变量的问题

我一直在努力解决Java中的一个问题并且它已经开始找到我了,我真的想不出一个正确的解决方法.

我有一个最终的对象属性,但是动态的.也就是说,我希望值在指定后保持不变,但每个运行时的值可以不同.所以我在类的开头声明了类级变量 - 比如说private final FILE_NAME;.然后,在构造函数中,我为它赋值 - 比方说FILE_NAME = buildFileName();

当我在buildFileName()抛出异常的方法中有代码时,问题就开始了.所以我在构造函数中尝试这样的东西:

try{
   FILE_NAME = buildFileName();
}
catch(Exception e){
   ...
   System.exit(1);
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个错误 - "空白的最终字段FILE_NAME可能尚未初始化." 这是我开始对Java的严格编译器感到有些恼火的地方.我知道这不会是一个问题,因为如果它到达catch,程序将退出...但编译器不知道,因此不允许此代码.如果我尝试在catch中添加一个虚拟赋值,我会得到 - "可能已经分配了最终字段FILE_NAME." 我显然不能在try-catch之前分配一个默认值,因为我只能分配一次.

有任何想法吗...?

java final exception constants

20
推荐指数
3
解决办法
1万
查看次数

为什么最终关键字对于不可变类是必要的?

您能否澄清一下,为什么 在课堂上我们将最终关键字作为不可变关键字时需要它.我的意思是,如果我们将所有属性声明为private和final,那么它也是一个不可变类,不是吗?

对不起,如果问题看起来很容易,但我真的很困惑.帮帮我.

Editted:我知道一个声明final的类不能被子类化.但是如果每个属性都是私有的,那么最终会有什么区别呢?

java final immutability

20
推荐指数
1
解决办法
7112
查看次数

如何设置IntelliJ IDEA 14以尽可能添加"final"关键字?

我想设置我的IntelliJ IDEA 14,final以便在现有Java类的所有可能位置(参数,字段等)中自动添加关键字.我找到了一些带有宏和快捷方式的解决方案,但我想设置IntelliJ final在保存文件时添加关键字.有谁知道这个很好的解决方案?也许你可以推荐一些插件或插件的组合?

java final intellij-idea intellij-14

20
推荐指数
3
解决办法
6234
查看次数