0 0

java new一个新的类后面接{}有什么用途?5

像下面这段代码,ThreadLocal在初始化的时候后面接了一个方法,我在自己的代码中也试了一下,可以再大括号中定义变量定义方法,但是外部是不能调用的,我想知道这样写除了初始化还有什么用途和意义呢?
private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>(){  
        public Integer initialValue(){  
            return 0;  
        }  
    };  
 
2013年1月04日 10:56

7个答案 按时间排序 按投票排序

0 0

采纳的答案

匿名内部类。你通过这种写法从ThreadLocal继承了一个匿名的子类,在这个子类中覆盖了ThreadLocal的initialValue方法,同时创建了这个子类的一个实例(因为这个子类是匿名的,你无法在后续的代码里引用,所以必须在定义时同时创建实例)。

它的作用跟

class OutterClass {

    private static class MyThreadLocal extends ThreadLocal<Integer> {
        public Integer initialValue(){    
            return 0;    
        }   
    }

    private static MyThreadLocal seqNum = new MyThreadLocal();
}


等价,好处是你不用专门为这个子类(MyThreadLocal)想一个名字,代码量也少一点。

2013年1月04日 14:25
0 0

类的装载需要消耗系统资源,当你在开发移动应用时,一个按钮的点击事件只在这个按钮所在的页面中这个按钮被点击时才会被调用,所以一般用在比较私有的、用来实现继承方法比如listener的时候,会使用匿名内部类。

2013年1月08日 14:07
0 0

给你个实例来看下好处, 比如 我们处理业务请求的时候, 都是需要事物来控制提交和回滚的, 是不是每次都需要重复的写 try catch 来begin和commit 或者rollback呢

定义一个你需要的接口来规范行为: 无需对它做实现类.

public interface TransactionAction {
  void execute(ActionEvent event) throws Exception;
}


定义这个规范, 也就是成功提交 失败回滚
public void transactionProcess(TransactionAction action, ActionEvent event)
      throws Exception {
    UserTransaction ut = null;
    try {
      ut = Trans.getUserTransaction();
      ut.begin();
      action.execute(event);
      ut.commit();
    } catch (Exception ex) {
      StringWriter aWriter = new StringWriter();
      ex.printStackTrace(new PrintWriter(aWriter));
      Log.error(this.getClass(), aWriter.toString());
      try {
        ut.rollback();
      } catch (Exception e) {
        throw new SysException(DAOErrorType.DAO_ROLLBACK_ERROR, e);
      }

      if (ex instanceof NoMessageAppException) {
        return;
      }

      if (ex instanceof PopupAppException || ex instanceof AppException) {
        throw ex;
      }
      AppException appException = new AppException(-1, ex);
      if (null != ex.getMessage()) {
        appException.setLocalizedErrorMessage(ex.getMessage());
      } else {
        appException.setLocalizedErrorMessage(StringResource.getStringData(
            "MSG_GS_SP_02143", JSFHelper.getRequest()));
      }
      throw appException;
    }
  }



业务中使用:
 public void next(ActionEvent event) throws Exception {
    helper.transactionProcess(new TransactionAction() {
      public void execute(ActionEvent event) throws Exception {
          //这时候你只需要关注你的业务了, 不需要管事物了.
    }
  }
}



ActionEvent: 这个参数就是你业务对象了, 如一般BaseFormBean.

2013年1月04日 14:24
0 0

你这个例子的public的确没有任何的意义,一般如果你定义了内部的全局变量只是提供给这个内部类能用,一般我们这么写是为了重写某个接口,或者重载某个方法。

楼上的回答都没有搞清楚提问者到底想问什么。

2013年1月04日 14:11
0 0

这样写最大的好处是简洁,难道让我重新建一个java文件叫ThreadLocal.java?
JDK源码里一个普通的类有这样的类十个,那岂不是要建10个JAVA文件?

2013年1月04日 13:45
0 0

这是一个匿名内部类,实现ThreadLocal这个接口,在你不想创建一个新的类或创建一个新的类通用性不是很高的时候,可以这么用。很方便

2013年1月04日 13:00
0 0

private static   是私有  静态方法
所以外部当然不能调用

起到保护作用了

2013年1月04日 11:08

相关推荐

    java的类和对象

    在Java中,如果一个类包含至少一个抽象方法(没有具体实现的方法),那么这个类必须声明为抽象类,使用abstract关键字。抽象类不能被实例化,但可以被其他类继承,以便子类可以提供缺失的实现。这是Java实现多态性的...

    java 面试题 总结

    Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,...

    Java中new的用法[参考].pdf

    new 关键字是使用类加载机制,而 newInstance() 方法是创建一个新类。newInstance() 方法经常用于工厂模式,例如: ```java class c = Class.forName("Example"); factory = (ExampleInterface)c.newInstance(); ```...

    java中接口的使用

    1. **多态**:通过接口实现多态,即一个接口可以有多个不同的实现类,这使得代码更加灵活和可扩展。 2. **设计模式**:许多设计模式依赖于接口,如策略模式、观察者模式等。 3. **解耦**:接口使得开发过程中类之间...

    java面向对象、类与对象的定义笔记

    在Java中,创建对象通常使用new关键字,后面跟着类的名称和括号。例如,要创建一个名为Person的类的对象,可以使用如下代码: ```java Person person = new Person(); ``` 这里,person是对象的引用,指向新创建的...

    java笔记 java笔记

    - **继承特点**:Java支持单一继承,但一个类可以通过实现多个接口来模拟多重继承。 - **父类与子类的关系**:子类继承父类的属性和方法,并可添加新的方法或覆盖已有的方法。 - **构造对象的顺序**:首先构造父类...

    Java面试宝典2012版.pdf

    在一个`.java`源文件中,确实可以包含多个类,但有一个重要的限制:该文件只能有一个公共类(public class),并且该类的名字必须与文件名相同。例如,如果文件名为`Main.java`,那么文件内必须包含一个名为`Main`的...

    JAVA面试题目

    可以包含多个公共类,但是每个文件只能有一个公共类,并且文件名必须与公共类的名称完全相同。 7. 排序都有哪几种方法?请列举。 排序方法有快速排序、冒泡排序、插入排序、选择排序、归并排序、堆排序等。 8. ...

    华为Java笔试题华为Java笔试题

    - **解析**: 在Java中,每个类至少会有一个构造器,如果程序员没有显式定义构造器,系统会默认提供一个无参数的构造器。构造器的主要作用是在创建对象时初始化该对象的状态。此外,一个类可以有多个构造器,只要它们...

    java名词速查表 java名词速查表

    - 子类是从另一个类(父类)继承而来的新类,可以复用父类的功能并添加自己的特性和行为。 - **特点**:可以通过扩展来覆盖或增加父类的方法和属性。 #### Class (类) - 类是对象的蓝图,定义了一组属性和方法。 -...

    超级有影响力霸气的Java面试题大全文档

     Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,...

    最新Java面试题

    - **基本数据类型和包装类**:Java为每种基本数据类型提供了一个对应的包装类,例如`Integer`对应`int`。 - **`Integer`与`int`的区别**:`Integer`是对象类型,支持更多方法;`int`是基本数据类型。 - **`String`类...

    java面试题

    在一个`.java`源文件中可以定义多个类,但这些类中只能有一个公共(public)类,并且该公共类的名字必须与文件名相同。其余的类必须声明为私有的(private)或者默认访问级别(即不加任何访问修饰符)。例如,如果...

    一个基于接口和注解的Java HTTP客户端.docx

    要实现这一功能,需要编写一个实现了`Encoder`接口的类,例如: ```java public class CustomEncoder implements Encoder { @Override public Map, String&gt; encodeMap(Object object) { // 实现将对象转换为Map,...

    Java中new的用法[文].pdf

    `new`关键字的使用有一些限制,比如它后面必须跟一个类名,并且需要提供一组匹配的构造函数参数。例如,`new Float(0.15)`表示创建一个`Float`类型的实例,并传入浮点数`0.15`作为参数。 在某些场景下,我们可能...

    IT java 面试题库

    - **继承**: 继承是一种通过扩展一个已存在的类从而获得新功能的机制。子类可以继承父类的方法和属性。 - **多态**: 多态是指允许不同类的对象对同一消息做出响应。在Java中,多态可以通过方法重载(overloading)和...

    CoreJava学习笔记

    ### CoreJava学习笔记 #### 一、JAVA特点与运行原理 **JAVA特点:** 1. **简单性**:Java的设计者们将C++...Java 5.0引入的这些新特性极大地提高了Java的灵活性和开发效率,使得Java成为了一个更为强大的开发平台。

    java基础知识测试题

    **题目:** 假设有两个类 A 和 B,其中 A 在 packageA 包中,B 在 packageB 包中,B 类有一个 public 成员变量 x,A 类想要访问 B 类的成员变量 x,以下说法正确的是? - A. A 类可以直接访问 B 类的成员变量 x - B...

    匿名内部类核心重点知识讲解和经典例子讲解

    匿名内部类是Java编程语言中一个独特且强大的特性,它允许我们在定义类的同时不为它提供名字。这种类主要用于创建一次性使用的对象,特别是在需要实现某个接口或者继承某个类的场合,而无需创建独立的文件来定义这个...

Global site tag (gtag.js) - Google Analytics