Java中的Enum枚举类型却有着许多你意想不到的用法,下面让我们一起来看看。
先来看一段代码示例:
从上面的代码中我们可以看到,定义完枚举值,然后在其后面加上分号,接着就可以定义其他的变量、方法了。另外需要特别说明的是,enum中的构造方法不可以用public标识,这样做是为了防止用户实例化enum。
先来回顾一下Java中如何定义常量吧,看下面一段代码:
public static final int normalState = 1; private static final int updateState = 2;
下面我们还可以用enum枚举来代替上面的常量定义,代码如下:
在Java中用enum来定义常量在语法上没有什么优势,但是enum枚举类型可以提供更多的操作功能。
先来看下面一段代码:
和一般的类中使用接口一样,enum枚举中同样可以继承接口,并实现接口中的所有方法,这样做的好处在于可以更方便地对枚举中的值进行排序、比较等操作,封装性更好。
说白了,enum枚举类型是一个不可以被继承的final类,就以上面的State枚举为例,如果你查看enum类型的字节码,其实是State类型的类静态常量。
/**
* @Description:
*
* @Title: CookieUtil.java
* @Package com.hupu.nac.util
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-1-15 上午10:17:51
* @version V2.0
*/
package com.hupu.nac.util;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @Description: Cookie读写
*
* @ClassName: CookieUtil
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-1-15 上午10:17:51
* @version V2.0
*/
public class CookieUtil {
/**
* @Description: 添加cookie
*
* @param response
* @param name
* @param value
* @param maxAge
* @return
*
* @Title: CookieUtil.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-1-15 上午10:29:29
* @version V2.0
*/
public static Cookie addCookie(HttpServletResponse response,String name,String value,int maxAge){
Cookie cookie = new Cookie(name,value);
cookie.setPath("/");
if(maxAge > 0){
cookie.setMaxAge(maxAge);
}
response.addCookie(cookie);
return cookie;
}
/**
* @Description: 根据key获取Cookie对象
*
* @param request
* @param key
* @return
*
* @Title: CookieUtil.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-1-15 上午10:29:44
* @version V2.0
*/
public static Cookie getCookieByName(HttpServletRequest request,String key){
Map cookieMap = readCookieMap(request);
if(cookieMap.containsKey(key)){
Cookie cookie = (Cookie)cookieMap.get(key);
return cookie;
}else{
return null;
}
}
/**
* @Description: 封装Cookie读取方法
*
* @param request
* @return
*
* @Title: CookieUtil.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-1-15 上午10:30:05
* @version V2.0
*/
private static Map readCookieMap(HttpServletRequest request){
Map cookieMap = new HashMap();
Cookie[] cookies = request.getCookies();
if(null != cookies){
for(Cookie cookie : cookies){
cookieMap.put(cookie.getName(), cookie);
}
}
return cookieMap;
}
}
package com.advanced.JAXB完成XML与Java对象的互转;
import java.io.ByteArrayOutputStream;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
/**
* @Description:JAXB对象和XML转换util
*
* @ClassName: JAXBUtil
* @Copyright: Copyright (c) 2014
*
* @author He
*
*/
public class JAXBUtil {
/**
* 将对象转换为XML
*
* @param ojb
* @param beanClass
* @return
* @throws Exception
*/
public String objectToXmlStr(Object obj, Class beanClass) throws Exception{
JAXBContext context = JAXBContext.newInstance(beanClass);
//根据上下文获取marshaller对象
Marshaller marshaller = context.createMarshaller();
//设置编码集
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
//格式化XML输出,有分行和缩进
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
//打印到控制台
// marshaller.marshal(obj, System.out);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
marshaller.marshal(obj, baos);
String xmlObj = new String(baos.toByteArray());
return xmlObj.replace(" standalone=\"yes\"", "");
}
/**
* @Description: 将对象转换为XML并且写入文件
*
* @param obj
* @param beanClass
* @param file
* @throws Exception
*
* @Title: JAXBUtil.java
* @Copyright: Copyright (c) 2014
*/
@SuppressWarnings("unchecked")
public void objectToXmlStr(Object obj, Class beanClass, File file) throws Exception {
JAXBContext context = JAXBContext.newInstance(beanClass);
// 根据上下文获取marshaller对象
Marshaller marshaller = context.createMarshaller();
// 设置编码字符集
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
// 格式化XML输出,有分行和缩进
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// 打印到控制台
marshaller.marshal(obj, System.out);
marshaller.marshal(obj, file);
}
/**
* 解析XML文件并转换为对象
*
* @param file
* @param beanClass
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public T xmlStrToObject(File file, Class beanClass) throws Exception{
T bean = beanClass.newInstance();
JAXBContext context = JAXBContext.newInstance(beanClass);
Unmarshaller unmarshaller = context.createUnmarshaller();
bean = (T) unmarshaller.unmarshal(file);
return bean;
}
}
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz框架包含了调度器监听、作业和触发器监听。你可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听。Quartz 允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz 的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。并且还能和Spring配置整合使用。Quartz在功能上远远超越了JDK自带的Timer,很好很强大!好啦,直接上代码:
至于定时的配置的话,有兴趣的各位可以去看看Quartz的cron表达式
/**
* @Description:
*
* @Title: FileGuava.java
* @Package com.joyce.guava.main
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 下午01:18:18
* @version V2.0
*/
package com.joyce.guava.main;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.google.common.base.Charsets;
import com.google.common.io.Files;
/**
* @Description:Guava的文件
*
* @ClassName: FileGuava
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 下午01:18:18
* @version V2.0
*/
public class FileGuava {
public static void main(String[] args) {
try {
File readFile = new File(System.getProperty("user.dir") + "/src/resources/showarp.txt");
StringBuilder content = new StringBuilder();
if (readFile.exists()) {
List lines = readFile(readFile);
for (String string : lines) {
System.out.println(string);
content.append(string + "\n");
}
}
File writeFile = new File(System.getProperty("user.dir") + "/src/resources/showarp" + new SimpleDateFormat("yyyyMMdd").format(new Date())+ ".txt");
writeFile(content.toString(), writeFile);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @Description: Guava文件读取
*
* @param file
* @return
*
* @Title: FileGuava.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 下午01:20:50
* @version V2.0
*/
private static List readFile(File file) throws Exception {
if (!file.exists()) {
return null;
}
return Files.readLines(file, Charsets.UTF_8);
}
/**
* @Description: 从文件中获取有规则的数据
*
* @param file
* @return
*
* @Title: FileGuava.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 下午01:56:42
* @version V2.0
*/
public List readFileData(File file) throws Exception {
List list = new ArrayList();
for (String rLine : readFile(file)) {
list.add(rLine.split("\\s+"));
}
return list;
}
/**
* @Description: Guava写文件
*
* @param content
* @param file
*
* @Title: FileGuava.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 下午01:32:06
* @version V2.0
*/
private static void writeFile(String content, File file) throws Exception {
if (!file.exists()) {
file.createNewFile();
}
Files.write(content, file, Charsets.UTF_8);
}
}
Guava 中文是石榴的意思,该项目是 Google 的一个开源项目,包含许多 Google 核心的 Java 常用库。
1. 基本工具 [Basic utilities]
让使用Java语言变得更舒适
1.1 使用和避免null:null是模棱两可的,会引起令人困惑的错误,有些时候它让人很不舒服。很多Guava工具类用快速失败拒绝null值,而不是盲目地接受
1.2 前置条件: 让方法中的条件检查更简单
1.3 常见Object方法: 简化Object方法实现,如hashCode()和toString()
1.4 排序: Guava强大的”流畅风格比较器”
1.5 Throwables:简化了异常和错误的传播与检查
2. 集合[Collections]
Guava对JDK集合的扩展,这是Guava最成熟和为人所知的部分
2.1 不可变集合: 用不变的集合进行防御性编程和性能提升。
2.2 新集合类型: multisets, multimaps, tables, bidirectional maps等
2.3 强大的集合工具类: 提供java.util.Collections中没有的集合工具
2.4 扩展工具类:让实现和扩展集合类变得更容易,比如创建Collection的装饰器,或实现迭代器
3. 缓存[Caches]
Guava Cache:本地缓存实现,支持多种缓存过期策略
4. 函数式风格[Functional idioms]
Guava的函数式支持可以显著简化代码,但请谨慎使用它
5. 并发[Concurrency]
强大而简单的抽象,让编写正确的并发代码更简单
5.1 ListenableFuture:完成后触发回调的Future
5.2 Service框架:抽象可开启和关闭的服务,帮助你维护服务的状态逻辑
6. 字符串处理[Strings]
非常有用的字符串工具,包括分割、连接、填充等操作
7. 原生类型[Primitives]
扩展 JDK 未提供的原生类型(如int、char)操作, 包括某些类型的无符号形式
8. 区间[Ranges]
可比较类型的区间API,包括连续和离散类型
9. I/O
简化I/O尤其是I/O流和文件的操作,针对Java5和6版本
10. 散列[Hash]
提供比Object.hashCode()更复杂的散列实现,并提供布鲁姆过滤器的实现
11. 事件总线[EventBus]
发布-订阅模式的组件通信,但组件不需要显式地注册到其他组件中
12. 数学运算[Math]
优化的、充分测试的数学工具类
13. 反射[Reflection]
Guava 的 Java 反射机制工具类
实体类有了,主要是为了在集合中使用提供方便!关键在于:
相信大家伙对上面的代码如果理解深入了的话,会明白了的!!!其实Guava在集合上面还提供了其他方法,这里
/*
* 通过递归得到某一路径下所有的目录及其文件
*/
static void getFiles(String filePath){
File root = new File(filePath);
File[] files = root.listFiles();
for(File file:files){
if(file.isDirectory()){
/*
* 递归调用
*/
getFiles(file.getAbsolutePath());
filelist.add(file.getAbsolutePath());
System.out.println("显示"+filePath+"下所有子目录及其文件"+file.getAbsolutePath());
}else{
System.out.println("显示"+filePath+"下所有子目录"+file.getAbsolutePath());
}
}
}