1.保留2位小数:
- DecimalFormat df=new DecimalFormat("0.00");
- Double x = 83.3333333333;
- x=Double.parseDouble(df.format(x));
2.日期(获取当前时间):
- 1.
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd" + " " + "hh:mm:ss");
- String datetime = dateFormat.format(java.util.Calendar.getInstance().getTime()); //推荐使用这种方法获取当前时间,不推荐使用new Date() );
- 2.
- Calendar now=Calendar.getInstance();
- String time=now.get(Calendar.YEAR)+"-"+(now.get(Calendar.MONTH)+1)+"-"+now.get(Calendar.DAY_OF_MONTH)+" "+now.get(Calendar.HOUR_OF_DAY)+":"+now.get(Calendar.MINUTE)+":"+now.get(Calendar.SECOND);
- 3.Date curDate= new Date(System.currentTimeMillis());
- SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); //24小时制
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//12小时制
c.计算一年中的第几星期
(1)计算某一天是一年中的第几星期
- Calendar cal=Calendar.getInstance();
- cal.set(Calendar.YEAR, 2006);
- cal.set(Calendar.MONTH,1);
- cal.set(Calendar.DAY_OF_MONTH, 3);
- int weekno=cal.get(Calendar.WEEK_OF_YEAR);
(2)计算一年中的第几星期是几号
- SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
- Calendar cal=Calendar.getInstance();
- cal.set(Calendar.YEAR, 2006);
- cal.set(Calendar.WEEK_OF_YEAR, 1);
- cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
- System.out.println(df.format(cal.getTime()));
- 输出:
- 2006-01-02
1天内(注意为add ):
- Calendar c=Calendar.getInstance();
- c.add(Calendar.DAY_OF_MONTH, -1); //得到前一天的时间
- startDateStr=sf.format(c.getTime());
- endDateStr=sf.format(java.util.Calendar.getInstance().getTime()); 推荐使用这种方法获取当前时间,不推荐使用new Date()
3天内:
- Calendar c=Calendar.getInstance();
- c.add(Calendar.DAY_OF_MONTH, -3); //得到前3天的时间
- startDateStr=sf.format(c.getTime());
近1月:
- Calendar c=Calendar.getInstance();
- c.add(Calendar.MONTH, -1);
- startDateStr=sf.format(c.getTime());
- /**是否闰年
- */
- public boolean isLeapYear(int year) {
- return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); }
3.数组转为list
- List stooges = Arrays.asList("Larry", "Moe", "Curly");
此时stooges中有有三个元素。注意:此时的list不能进行add操作,否则会报 “java.lang.UnsupportedOperationException”,Arrays.asList()返回的是List,而且是一个定长的List,所以不能转换为ArrayList,只能转换为AbstractList
原因在于asList()方法返回的是某个数组的列表形式,返回的列表只是数组的另一个视图,而数组本身并没有消失,对列表的任何操作最终都反映在数组上. 所以不支持remove,add方法的
4、 Java 内存模型
2.1 Java 内存模型的基本原理
Java 内存模型,由于 Java 被设计为跨平台的语言,在内存管理上,显然也要有一个统一的 模型。系统存在一个主内存 (Main Memory) , Java 中所有变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存 (Working Memory) ,工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。
因为当线程处于不同的cpu中时,它各自的变量保存在各自cpu的寄存器或者高速缓存中,这样回事的变量对于其它线程暂时不可见。
2.2 Volatile 的内存工作原理
Volatile 是保证多个线程之间变量可见性的,也就是说一个线程对变量进行了写操作,另外一个线程能够获取它最新的值。
它的工作原理是,它对写和读都是直接操作工作主存的。(这个可以通过操作字节码看到)
2.3 Synchronized 的内存操作模型 :
Synchronized, 有两层语义,一个是互斥,一个是可见性。在可见性上面,它的工作原理有点不同:当线程进入同步块时,会从主存里面获取最新值,然后当线程离开同步块时,再把变量的值更新到主存。
5.删除一个文件夹内的所有文件和文件夹
- File file = new File(imgPath);
- if (!file.exists()) return;
- deleteDirectory(file);
- public void deleteDirectory(File path) {
- if( path.exists() ) {
- File[] files = path.listFiles();
- for(int i=0; i<files.length; i++) {
- if(files[i].isDirectory()) {
- deleteDirectory(files[i]);
- }
- else {
- files[i].delete();
- }
- }
- }
- }