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

问题描述

像下面这段代码,ThreadLocal在初始化的时候后面接了一个方法,我在自己的代码中也试了一下,可以再大括号中定义变量定义方法,但是外部是不能调用的,我想知道这样写除了初始化还有什么用途和意义呢?private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>(){ public Integer initialValue(){ return 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)想一个名字,代码量也少一点。
解决方案二:
类的装载需要消耗系统资源,当你在开发移动应用时,一个按钮的点击事件只在这个按钮所在的页面中这个按钮被点击时才会被调用,所以一般用在比较私有的、用来实现继承方法比如listener的时候,会使用匿名内部类。
解决方案三:
给你个实例来看下好处, 比如 我们处理业务请求的时候, 都是需要事物来控制提交和回滚的, 是不是每次都需要重复的写 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.
解决方案四:
你这个例子的public的确没有任何的意义,一般如果你定义了内部的全局变量只是提供给这个内部类能用,一般我们这么写是为了重写某个接口,或者重载某个方法。楼上的回答都没有搞清楚提问者到底想问什么。
解决方案五:
这样写最大的好处是简洁,难道让我重新建一个java文件叫ThreadLocal.java?JDK源码里一个普通的类有这样的类十个,那岂不是要建10个JAVA文件?
解决方案六:
这是一个匿名内部类,实现ThreadLocal这个接口,在你不想创建一个新的类或创建一个新的类通用性不是很高的时候,可以这么用。很方便
解决方案七:
private static 是私有 静态方法所以外部当然不能调用起到保护作用了

时间: 2024-10-27 00:26:19

java new一个新的类后面接{}有什么用途?的相关文章

导入个web项目,想在里面写入新的类扩展它的功能,部署到tomcat里运行,没有感应到新写的类,找不到java或class文件,以前的类就会在tomcat编译?

问题描述 今天遇到导入个web项目,想在里面写入新的类扩展它的功能,新建的类,写完了,部署到tomcat里,发现没有感应到新写的类,找不到java和对象的class文件,在work文件夹里和classes文件夹,都找不到新写的类,以前有的类就会在tomcat编译.够郁闷的,没法调.我的其他web项目是可以的.我的工具和环境应该没问题.别人写的,编译的运行都是1.6jdk的.tomca也是用6的,我的也是一样.我的myeclipse是10.6,实在想不出来是哪里错了.唉,郁闷.求解. 解决方案 解

java swing 一个窗口打开新创口 加上go()程序就死掉了

问题描述 java swing 一个窗口打开新创口 加上go()程序就死掉了 import javax.swing.*; import java.awt.Rectangle;import java.awt.event.*; public class Swing7 extends JFrame implements ActionListener { JButton jb = new JButton(); public Swing7() { this.setTitle(""Java--&q

新官上任,转贴一篇:Java做一个最简单的通话程序

程序 Java中的网络编程是一个很重要的部分,也是其编程优越性的地方之一.在Java中有一个专门的Java.net类库来管理网络编程的有关方法. 下面先介绍在Java中怎样用socket进行客户与服务器通信.最后再介绍一个一个最简单的通话程序. 一.怎样用socket进行客户与服务器通信 在Java中用socket进行客户/服务器之间的通信编程.Socket是两个实体之间进行通信的有效端点.通过socket可以获得源IP地址和源端口.终点IP地址和终点端口.用户可以将多个socket连入同一个端

java 接口 接口实现-Java中一个类如何实现多个接口中同名同参返回值不同的方法?

问题描述 Java中一个类如何实现多个接口中同名同参返回值不同的方法? 如:` class A implements Interface1,Interface2{ //这里该怎么写呢? } interface Interface1{ public void method(); } interface Interface2{ public int method(); } 解决方案 class A implements Interface1,Interface2{ //直接写啊 public voi

java中一个类的方法与方法之间可以有联系,也可以相互孤立吗

问题描述 java中一个类的方法与方法之间可以有联系,也可以相互孤立吗 java中一个类的方法与方法之间可以有联系,也可以相互孤立吗什么情况要孤立,什么情况要有联系呢 解决方案 看需求.比如说class A{ float get长度() { ... } float get宽度() { ... } float get面积() { return get长度()*get宽度(); }}这里就需要调用另外两个方法 解决方案二: 现在还有人有这玩意嘛 解决方案三: 类的方法主要是对属性的一些操作,方法作用

为什么java源文件中有两个类编译后只产生一个类文件

问题描述 classdemoA{publicstaticvoidmain(String[]args){demoad=newdemoa();d.getmoney();}voidgetmoney(){System.out.println("package123123123");}}classdemoa{voidgetmoney(){System.out.println("package1111");}}为什么java源文件中有两个类编译后只产生一个类文件demoA,且运

一个java的DES加解密类转换成C#

原文:一个java的DES加解密类转换成C# 一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //import java.util.regex.Pattern; //import java.util.Hashtable; import javax.crypto.*; import javax.crypto.spec.*; import sun.misc.*; /** * des加密解密 */ pu

class-为什么说java中一个类中定义两个构造函数。

问题描述 为什么说java中一个类中定义两个构造函数. 为什么说java中一个类中定义两个构造函数.是不是意思就是一个是无参构造函数,一个是有参数的构造函数, 解决方案 构造函数可以定义很多个,如同函数重载,只要参数个数类型不同就可以. 因此无参构造函数只能有一个.至于定义2个,可以是一个无参,一个有参,也可以是2个有参. 解决方案二: oh no, an object can have multiple constructors with different parameters. 解决方案三

java语法-一个╳╳╳.java文件可以包含几个类

问题描述 一个╳╳╳.java文件可以包含几个类 一个╳╳╳.java文件可以包含几个类,内嵌类不算, 什么情况下要一起写,什么情况下需要分开不同的java文件编写 解决方案 一个java文件只能包含一个共有外部类(和文件同名且没包含在另一个内里面的类),其它的类的个数没有限制 解决方案二: JAVA 读取文件的几个类 解决方案三: 新建类的时候,只能新建public修饰的类,或者无修饰符的类:一个public修饰的类可以包含几个无修饰符的类:至于private,protect可以查看一下它们权