java时间日期使用与查询代码详解

只要格式正确,直接比较字符串就可以了呀,精确到秒的也一样

String  s1  =  "2003-12-12  11:30:24";
 String  s2  =  "2004-04-01  13:31:40";
 int  res  =  s1.compareTo(s2);  

求日期差

SimpleDateFormat  df  =  new  SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");
 Date  begin=df.parse("2004-01-02  11:30:24");
 Date  end  =  df.parse("2004-03-26  13:31:40");
 long  between=(end.getTime()-begin.getTime())/1000;//除以1000是为了转换成秒
 int  day=between/(24*3600);
 int  hour=between%(24*3600)/3600;
 int  minute=between%3600/60;
 int  second=between%60; 

经常用到时间日期类,所以就将常用的日期方法和属性都归纳总结如下,方便大家查找

1.计算某一月份的最大天数

Calendar time=Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR,year);
time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0
int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数 

注:在使用set方法之前,最好先clear一下,否则很多信息会继承自系统当前时间

2.Calendar和Date的转化

(1) Calendar转化为Date

Calendar cal=Calendar.getInstance();
Date date=cal.getTime(); 

(2) Date转化为Calendar

Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date); 

3.格式化输出日期时间

Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println(df.format(date)); 

4.计算一年中的第几星期

(1)计算某一天是一年中的第几星期

Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 9);
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 

5.add()和roll()的用法
(1)add()方法

SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 9);
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.add(Calendar.DATE, -4);
Date date=cal.getTime();
System.out.println(df.format(date));
cal.add(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date)); 

输出:
2006-08-30
2006-10-03

(2)roll方法

cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 9);
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.roll(Calendar.DATE, -4);
date=cal.getTime();
System.out.println(df.format(date));
cal.roll(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date)); 

输出:

2006-10-29

2006-10-03

可见,roll()方法在本月内循环,一般使用add()方法;

6.计算两个任意时间中间的间隔天数

(1)传进Calendar对象

/** */
/**计算两个时间之间相隔天数
* @param startday 开始时间
* @param endday 结束时间
* @return
*/
public int getIntervalDays(Calendar startday,Calendar endday)...{
	//确保startday在endday之前
	if(startday.after(endday))...{
		Calendar cal=startday;
		startday=endday;
		endday=cal;
	}
	//分别得到两个时间的毫秒数
	long sl=startday.getTimeInMillis();
	long el=endday.getTimeInMillis();
	long ei=el-sl;
	//根据毫秒数计算间隔天数
	return (int)(ei/(1000*60*60*24));
}

(2)传进Date对象

/** */
/**计算两个时间之间相隔天数
* @param startday 开始时间
* @param endday 结束时间
* @return
*/
public int getIntervalDays(Date startday,Date endday)...{
	//确保startday在endday之前
	if(startday.after(endday))...{
		Date cal=startday;
		startday=endday;
		endday=cal;
	}
	//分别得到两个时间的毫秒数
	long sl=startday.getTime();
	long el=endday.getTime();
	long ei=el-sl;
	//根据毫秒数计算间隔天数
	return (int)(ei/(1000*60*60*24));
}

同理,可以用相同的方法计算出任意两个时间相隔的小时数,分钟数,秒钟数等
注:以上方法是完全按时间计算,有时并不能令人满意,如:

startday="2006-10-11 20:00:00"
endday="2006-10-12 8:00:00" 

计算结果为0,但是我们也许相让计算结果变为1,此时可以用如下方法实现:
在传参之前,先设定endday的时间,如:

endday.set(Calendar.HOUR_OF_DAY, 23);
endday.set(Calendar.MINUTE, 59);
endday.set(Calendar.SECOND, 59);
endday.set(Calendar.MILLISECOND, 59); 

这样再传进去startday,endday,则结果就如我们所愿了。不过,如果嫌以上方法麻烦,可以参考以下方法:
(3)改进精确计算相隔天数的方法

public int getDaysBetween (Calendar d1, Calendar d2) ...{
	if (d1.after(d2)) ...{
		// swap dates so that d1 is start and d2 is end
		java.util.Calendar swap = d1;
		d1 = d2;
		d2 = swap;
	}
	int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
	int y2 = d2.get(Calendar.YEAR);
	if (d1.get(Calendar.YEAR) != y2) ...{
		d1 = (Calendar) d1.clone();
		do ...{
			days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);
			//得到当年的实际天数
			d1.add(Calendar.YEAR, 1);
		}
		while (d1.get(Calendar.YEAR) != y2);
	}
	return days;
}

获取系统当前时间:

public static String getSystemTime(){
	Date date=new Date();
	SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	return df.format(date);
}
//字符串转化成时间类型(字符串可以是任意类型,只要和SimpleDateFormat中的格式一致即可)
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US);
java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String mDateTime1=formatter.format(d);
//当前时间
Calendar cal = Calendar.getInstance();
// SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss G E D F w W a E F");
String mDateTime=formatter.format(cal.getTime());
//1年前日期
java.util.Date myDate=new java.util.Date();
long myTime=(myDate.getTime()/1000)-60*60*24*365;
myDate.setTime(myTime*1000);
String mDate=formatter.format(myDate);
//明天日期
myDate=new java.util.Date();
myTime=(myDate.getTime()/1000)+60*60*24;
myDate.setTime(myTime*1000);
mDate=formatter.format(myDate);
//两个时间之间的天数
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date= myFormatter.parse("2003-05-1");
java.util.Date mydate= myFormatter.parse("1899-12-30");
long day=(date.getTime()-mydate.getTime())/(24*60*60*1000);
//加半小时
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
java.util.Date date1 = format.parse("2002-02-28 23:16:00");
long Time=(date1.getTime()/1000)+60*30;
date1.setTime(Time*1000);
String mydate1=formatter.format(date1);
//年月周求日期
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");
java.util.Date date2= formatter2.parse("2003-05 5 星期五");
SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");
String mydate2=formatter3.format(date2);
//求是星期几
mydate= myFormatter.parse("2001-1-1");
SimpleDateFormat formatter4 = new SimpleDateFormat("E");
String mydate3=formatter4.format(mydate);

在开发web应用中,针对不同的数据库日期类型,我们需要在我们的程序中对日期类型做各种不同的转换。若对应数据库数据是oracle的Date类型,即只需要年月日的,可以选择使用java.sql.Date类型,若对应的是MSsqlserver数据库的DateTime类型,即需要年月日时分秒的,选择java.sql.Timestamp类型

你可以使用dateFormat定义时间日期的格式,转一个字符串即可

package personal.jessica;
import java.util.Date;
import java.util.Calendar;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Locale;
class Datetest{
	/**
*method 将字符串类型的日期转换为一个timestamp(时间戳记java.sql.Timestamp)
*@param dateString 需要转换为timestamp的字符串
*@return dataTime timestamp
*/
	public final static java.sql.Timestamp string2Time(String dateString)
	throws java.text.ParseException {
		DateFormat dateFormat;
		dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);
		//设定格式
		//dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH);
		dateFormat.setLenient(false);
		java.util.Date timeDate = dateFormat.parse(dateString);
		//util类型
		java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());
		//Timestamp类型,timeDate.getTime()返回一个long型
		return dateTime;
	}
	/**
*method 将字符串类型的日期转换为一个Date(java.sql.Date)
*@param dateString 需要转换为Date的字符串
*@return dataTime Date
*/
	public final static java.sql.Date string2Date(String dateString)
	throws java.lang.Exception {
		DateFormat dateFormat;
		dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
		dateFormat.setLenient(false);
		java.util.Date timeDate = dateFormat.parse(dateString);
		//util类型
		java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());
		//sql类型
		return dateTime;
	}
	public static void main(String[] args){
		Date da = new Date();
		//注意:这个地方da.getTime()得到的是一个long型的值
		System.out.println(da.getTime());
		//由日期date转换为timestamp
		//第一种方法:使用new Timestamp(long)
		Timestamp t = new Timestamp(new Date().getTime());
		System.out.println(t);
		//第二种方法:使用Timestamp(int year,int month,int date,int hour,int minute,int second,int nano)
		Timestamp tt = new Timestamp(Calendar.getInstance().get(
		Calendar.YEAR) - 1900, Calendar.getInstance().get(
		Calendar.MONTH), Calendar.getInstance().get(
		Calendar.DATE), Calendar.getInstance().get(
		Calendar.HOUR), Calendar.getInstance().get(
		Calendar.MINUTE), Calendar.getInstance().get(
		Calendar.SECOND), 0);
		System.out.println(tt);
		try {
			String sToDate = "2005-8-18";
			//用于转换成java.sql.Date的字符串
			String sToTimestamp = "2005-8-18 14:21:12.123";
			//用于转换成java.sql.Timestamp的字符串
			Date date1 = string2Date(sToDate);
			Timestamp date2 = string2Time(sToTimestamp);
			System.out.println("Date:"+date1.toString());
			//结果显示
			System.out.println("Timestamp:"+date2.toString());
			//结果显示
		}
		catch(Exception e) {
			e.printStackTrace();
		}
	}
}

下面是例子:

Java代码

package test;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Hashtable;
import javax.swing.JOptionPane;
public class Test2{
	public static Boolean isdate(String s){
		String a[]=s.split("-");
		Boolean flg=true;
		if(!(Integer.parseint(a[0])>=1950 && Integer.parseint(a[0])<=2050)){
			flg=false;
		}
		return flg;
	}
	public static Boolean checkDate(String s){
		Boolean ret = true;
		try{
			DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
			ret = df.format(df.parse(s)).equals(s);
		}
		catch(ParseException e){
			ret = false;
		}
		return ret;
	}
	public Object dateinfo(String s){
		String a[]=s.split("-",2);
		Hashtable fest =new Hashtable();
		fest.put("01-01","元旦节");
		fest.put("02-14","情人节");
		fest.put("03-12","植树节");
		fest.put("03-15","消费者节");
		fest.put("04-01","愚人节");
		fest.put("04-05","清明节");
		fest.put("05-01","劳动节");
		fest.put("06-01","儿童节");
		fest.put("07-01","建党节");
		fest.put("08-01","建军节");
		fest.put("09-10","教师节");
		fest.put("10-01","国庆节");
		fest.put("12-25","圣诞节");
		if(fest.containsKey(a[1])){
			return fest.get(a[1]);
		} else{
			return "无节日";
		}
	}
	public String xingzuo(Date s){
		Calendar cal = Calendar.getInstance();
		cal.setTime(s);
		String xingzuo="无";
		int day=cal.get(Calendar.DAY_OF_YEAR);
		if((cal.get(Calendar.YEAR)%4==0)&&(cal.get(Calendar.YEAR)%100!=0)||(cal.get(Calendar.YEAR)%400==0)){
			if((day>=1 &&day<=19)||(day>=357&&day<=366)){
				xingzuo= "魔蝎座";
			} else if(day>=20 &&day<=49){
				xingzuo= "水瓶座";
			} else if(day>=50 &&day<=80){
				xingzuo= "双鱼座";
			} else if(day>=81 &&day<=110){
				xingzuo= "白羊座";
			} else if(day>=111 &&day<=141){
				xingzuo= "金牛座";
			} else if(day>=142 &&day<=173){
				xingzuo= "双子座";
			} else if(day>=174 &&day<=203){
				xingzuo= "巨蟹座";
			} else if(day>=204 &&day<=235){
				xingzuo= "狮子座";
			} else if(day>=236 &&day<=266){
				xingzuo= "处女座";
			} else if(day>=267 &&day<=296){
				xingzuo= "天秤座";
			} else if(day>=297 &&day<=326){
				xingzuo= "天蝎座";
			} else if(day>=327 &&day<=356){
				xingzuo= "射手座";
			}
		} else{
			if((day>=1 &&day<=19)||(day>=357&&day<=366)){
				xingzuo= "魔蝎座";
			} else if(day>=20 &&day<=48){
				xingzuo= "水瓶座";
			} else if(day>=49 &&day<=79){
				xingzuo= "双鱼座";
			} else if(day>=80 &&day<=109){
				xingzuo= "白羊座";
			} else if(day>=110 &&day<=140){
				xingzuo= "金牛座";
			} else if(day>=141 &&day<=172){
				xingzuo= "双子座";
			} else if(day>=173 &&day<=202){
				xingzuo= "巨蟹座";
			} else if(day>=203 &&day<=234){
				xingzuo= "狮子座";
			} else if(day>=235 &&day<=265){
				xingzuo= "处女座";
			} else if(day>=266 &&day<=295){
				xingzuo= "天秤座";
			} else if(day>=296 &&day<=325){
				xingzuo= "天蝎座";
			} else if(day>=326 &&day<=355){
				xingzuo= "射手座";
			}
		}
		return xingzuo;
	}
	public Date parseDate(String s){
		SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-MM-dd");
		try {
			Date date3 = bartDateFormat.parse(s);
			date3=bartDateFormat.parse(s);
			return date3;
		}
		catch (Exception ex) {
			return null;
		}
	}
	public static void main(String[] args) {
		Calendar cal = Calendar.getInstance();
		Test2 test2=new Test2();
		String date1=JOptionPane.showInputDialog("请你输入日期,格式如2000-10-15");
		while(!(Test2.checkDate(date1)&&Test2.isdate(date1))){
			date1=JOptionPane.showInputDialog("请你输入日期,格式如2000-10-15");
		}
		SimpleDateFormat bartDateFormat1 = new SimpleDateFormat("yyyy,MM,dd,EEEE");
		SimpleDateFormat bartDateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
		Date date2=test2.parseDate(date1);
		String festinfo=(String)test2.dateinfo(date1);
		System.out.println(bartDateFormat1.format(date2) +","+ festinfo+","+ test2.xingzuo(date2));
		String day=JOptionPane.showInputDialog("请你输入要查询N天后的日期信息");
		cal.setTime(date2);
		cal.add(Calendar.DATE, Integer.parseint(day));
		String date5=bartDateFormat2.format(cal.getTime());
		festinfo=(String)test2.dateinfo(date5);
		System.out.println(bartDateFormat1.format(cal.getTime())+","+ festinfo+","+ test2.xingzuo(cal.getTime()));
	}
}

总结

以上就是本文关于java时间日期使用与查询代码详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

(0)

相关推荐

  • Java日期时间格式化操作DateUtils 的整理

    Java日期时间格式化操作DateUtils 的整理 直接上代码,总结了开发过程中经常用到的日期时间格式化操作! import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.concurrent.TimeUnit; /** * ClassName: DateUtils <br/> * D

  • java基于正则表达式实现时间日期的常用判断操作实例

    本文实例讲述了java基于正则表达式实现时间日期的常用判断操作.分享给大家供大家参考,具体如下: 最近需要完成一个判断用户输入时间日期类型来进行相应操作的业务.实现这个功能自然少不了用到正则表达式,提高正则表达式的话,其实它的用法很简单,只需把这个表格记住并且会灵活运行就可以了. 元字符 描述 \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个向后引用.或一个八进制转义符.例如,"\n"匹配字符"n"."\\n"匹配一个换行符.序列&qu

  • Java常用的时间工具类实例

    本文实例讲述了Java常用的时间工具类.分享给大家供大家参考,具体如下: package org.zhy.date; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /** * 时间类型工具类 * * @author zhengyi * */ pu

  • Java计算程序代码执行时间的方法小结

    本文实例总结了Java计算程序代码执行时间的方法.分享给大家供大家参考,具体如下: 有时候为了排查性能问题,需要记录完成某个操作需要的时间,我们可以使用System类的currentTimeMillis()方法来返回当前的毫秒数,并保存到一个变量中,在方法执行完毕后再次调用 System的currentTimeMillis()方法,并计算两次调用之间的差值,就是方法执行所消耗的毫秒数. 如方法一: long startTime = System.currentTimeMillis(); //获取

  • Java获得当前时间前指定几个小时具体时间的方法示例

    本文实例讲述了Java获得当前时间前指定几个小时具体时间的方法.分享给大家供大家参考,具体如下: package getBeforeHourDemo; import java.text.SimpleDateFormat; import java.util.Calendar; //获取当前时间,指定前面多少小时的时间 //返回格式YYYYMMDDHHMMSS public class getBeforeHourTime { public static String getBeforeByHourT

  • Java编程实现时间和时间戳相互转换实例

    时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经存在的. 完整的. 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间.使用数字签名技术产生的数据, 签名的对象包括了原始文件信息. 签名参数. 签名时间等信息.广泛的运用在知识产权保护. 合同签字. 金融帐务. 电子报价投标. 股票交易等方面. 时间转换为时间戳: /* * 将时间转换为时间戳 */ public static String dateToStamp(String s) throws ParseExcep

  • java中如何获取时间戳的方法实例

    前言 数字时间戳技术是数字签名技术一种变种的应用.是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数(引用自百度百科) 在java开发过程中经常会遇到统计某一天或是某一个月的数据,因此常常需要获取截取数据的两个时间戳(比如统计今天的数据,则需要获取一个开始时间为今天零点以及一个结束时间为明天零点),然后根据数据相关的时间是否在该时间区间内来判断是否将其计入统计数据中. 一.java获取时间戳 话不多说,首先我们先拿上面的例

  • java如何利用FastJSON、Gson、Jackson三种Json格式工具自定义时间序列化

    Java处理JSON数据有三个比较流行的类库FastJSON.Gson和Jackson. Jackson Jackson是由其社区进行维护,简单易用并且性能也相对高些.但是对于复杂的bean转换Json,转换的格式鄙视标准的Json格式.PS:Jackson为Spring MVC内置Json解析工具 Gson Gson是由谷歌公司研发的产品,目前是最全的Json解析工具.完全可以将复杂的类型的Json解析成Bean或者Bean到Json的转换 FastJson Fastjson是一个Java语言

  • java时间日期使用与查询代码详解

    只要格式正确,直接比较字符串就可以了呀,精确到秒的也一样 String s1 = "2003-12-12 11:30:24"; String s2 = "2004-04-01 13:31:40"; int res = s1.compareTo(s2); 求日期差 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date begin=df.parse("

  • java获取登录者IP和登录时间的两种实现代码详解

    第一种直接用java自带的InetAddress类: import java.net.InetAddress; import java.text.SimpleDateFormat; import java.util.Date; public class test{ public static void main(String[] args) throws Exception{ InetAddress addr = InetAddress.getLocalHost(); String ip=add

  • SpringMVC开发restful API之用户查询代码详解

    一,什么是restful风格? 首先,我们来看几组例子. 传统的url: 查询 /user/query?name=tom GET 详情 /user/query?id=1 GET 创建 /user/create?name=tom POST 修改 /user/update?id=1&name=jerry POST 删除 /user/delete?id=1 GET restful风格的url: 查询 /user?name=tom GET 详情 /user/1 GET 创建 /user POST 修改

  • Java动态代理(设计模式)代码详解

    基础:需要具备面向对象设计思想,多态的思想,反射的思想: Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架.通过阅读本文,读者将会对Java动态代理机制有更加深入的理解.本文首先从Java动态代理的运行机制和特点出发,对其代码进行了分析,推演了动态生成类的内部实现. 代理模

  • 在Java中操作Zookeeper的示例代码详解

    依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.6.0</version> </dependency> 连接到zkServer //连接字符串,zkServer的ip.port,如果是集群逗号分隔 String connectStr = "192.

  • Oracle回滚段使用查询代码详解

    大批量执行DML语句造成回滚段大量占用,又回退操作,如何直观查询数据回滚情况? 单机环境 查询回滚执行进度 select /*+ rule */s.sid, r.name rr, nvl(s.username,'no transaction') us, s.osuser os, s.terminal te, t.used_urec rec, t.used_ublk blk from v$lock l, v$session s, v$rollname r,v$transaction t where

  • Java语言中的内存泄露代码详解

    Java的一个重要特性就是通过垃圾收集器(GC)自动管理内存的回收,而不需要程序员自己来释放内存.理论上Java中所有不会再被利用的对象所占用的内存,都可以被GC回收,但是Java也存在内存泄露,但它的表现与C++不同. JAVA中的内存管理 要了解Java中的内存泄露,首先就得知道Java中的内存是如何管理的. 在Java程序中,我们通常使用new为对象分配内存,而这些内存空间都在堆(Heap)上. 下面看一个示例: public class Simple { public static vo

  • Java编程实现快速排序及优化代码详解

    普通快速排序 找一个基准值base,然后一趟排序后让base左边的数都小于base,base右边的数都大于等于base.再分为两个子数组的排序.如此递归下去. public class QuickSort { public static <T extends Comparable<? super T>> void sort(T[] arr) { sort(arr, 0, arr.length - 1); } public static <T extends Comparabl

  • java多线程Thread的实现方法代码详解

    之前有简单介绍过java多线程的使用,已经Thread类和Runnable类,为了更好地理解多线程,本文就Thread进行详细的分析. start() 我们先来看看API中对于该方法的介绍: 使该线程开始执行:Java 虚拟机调用该线程的 run 方法. 结果是两个线程并发地运行:当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法). 多次启动一个线程是非法的.特别是当线程已经结束执行后,不能再重新启动. 用start方法来启动线程,真正实现了多线程运行,这时无需等待r

  • Java的静态类型检查示例代码详解

    关于静态类型检查和动态类型检查的解释: 静态类型检查:基于程序的源代码来验证类型安全的过程: 动态类型检查:在程序运行期间验证类型安全的过程: Java使用静态类型检查在编译期间分析程序,确保没有类型错误.基本的思想是不要让类型错误在运行期间发生. 在各色各样的编程语言中,总共存在着两个类型检查机制:静态类型检查和动态类型检查. 静态类型检查是指通过对应用程序的源码进行分析,在编译期间就保证程序的类型安全. 动态类型检查是在程序的运行过程中,验证程序的类型安全.在Java中,编译期间使用静态类型

随机推荐