当前位置: 编程技术>移动开发
本页文章导读:
▪内部类运用总结(参考白度文献上的文章) 内部类使用总结(参考白度文献上的文章)
我是一个java基础不太好的人,现在绝大多数人都是利用自己的java知识涉足android,而我发觉我自己是在利用android学习java:所以在下班待在家的.........
▪ 一个简单的SimpleAdapter工具类-SimpleAdapterUtil 1个简单的SimpleAdapter工具类-SimpleAdapterUtil
1个简单的SimpleAdapter工具类-SimpleAdapterUtil
根据android.widget.SimpleAdapter来生成对应需要装备的适配器。
代码:
版本一:数据格式为List<Obje.........
▪ [转]Java字符串变换为日期和时间比较大小 [转]Java字符串转换为日期和时间比较大小
方法一: DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); String dateBegin=fmt.format(carrierCommand.getDateBegin()); String dateEnd=fmt.format(carrierCommand.getDateEnd()); //如果.........
[1]内部类运用总结(参考白度文献上的文章)
来源: 互联网 发布时间: 2014-02-18
内部类使用总结(参考白度文献上的文章)
我是一个java基础不太好的人,现在绝大多数人都是利用自己的java知识涉足android,而我发觉我自己是在利用android学习java:
所以在下班待在家的时候进一步棍固自己惨兮兮的java:
下面要写的是对java内部类学习的部分,希望写在这里跟大家一起分享:
1.定义:放在一个类的内部的类我们就叫内部类
2.作用:
1.内部类可以很好的实现隐藏
一般的非内部类,是不允许有 private 与protected权限的,但内部类可以
2.内部类拥有外围类的所有元素的访问权限
3.可是间接实现多重继承
4.可以避免修改接口而实现同一个类中两种同名方法的调用。
3.实现隐藏
平时我们对类的访问权限,都是通过类前面的访问修饰符来限制的,一般的非内部类,是不允许有 private 与protected权限的,但内部类可以,所以我们能通过内部类来隐藏我们的信息。可以看下面的例子
接口
具体类:
上面InsideClass是内部类,访问修饰符是private
客户端程序
从这段代码里面我只知道Example的getIn()方法能返回一个InterfaceTest 实例但我并不知道这个实例是这么实现的。而且由于InsideClass 是private的,所以我们如果不看代码的话根本看不到这个具体类的名字,所以说它可以很好的实现隐藏。
2.可以无条件地访问外围类的所有元素
从上面类中name这个变量是在TagBean里面定义的私有变量。这个变量在内部类中可以无条件地访问System.out.println(name);
3.可以实现多重继承
个人认为它是内部类存在的最大理由之一。正是由于他的存在使得Java的继承机制更加完善。大家都知道Java只能继承一个类,它的多重继承在我们没有学习内部类之前是用接口来实现的。但使用接口有时候有很多不方便的地方。比如我们实现一个接口就必须实现它里面的所有方法。而有了内部类就不一样了。它可以使我们的类继承多个具体类或抽象类。大家看下面的例子。
类一
类二
类三
注意看类三,里面分别实现了两个内部类 test1,和test2 ,test1类又继承了Example1,test2继承了Example2,这样我们的类三MainExample就拥有了Example1和Example2的方法和属性,也就间接地实现了多继承。
四、 避免修改接口而实现同一个类中两种同名方法的调用。
大家假想一下如果,你的类要继承一个类,还要实现一个接口,可是你发觉你继承的类和接口里面有两个同名的方法怎么办?你怎么区分它们??这就需要我们的内部类了。看下面的代码
接口
类 MyIncrement
两个方法都是一样的。在看下面这个类要继承这两个类
如果不用内部类
increment()这个方法是属于覆盖MyIncrement这里的方法呢?还是Incrementable这里的方法。我怎么能调到MyIncrement这里的方法?显然这是不好区分的。而我们如果用内部类就很好解决这一问题了。看下面代码:
我们可以用内部类来实现接口,这样就不会与外围类的方法冲突了
我是一个java基础不太好的人,现在绝大多数人都是利用自己的java知识涉足android,而我发觉我自己是在利用android学习java:
所以在下班待在家的时候进一步棍固自己惨兮兮的java:
下面要写的是对java内部类学习的部分,希望写在这里跟大家一起分享:
1.定义:放在一个类的内部的类我们就叫内部类
2.作用:
1.内部类可以很好的实现隐藏
一般的非内部类,是不允许有 private 与protected权限的,但内部类可以
2.内部类拥有外围类的所有元素的访问权限
3.可是间接实现多重继承
4.可以避免修改接口而实现同一个类中两种同名方法的调用。
3.实现隐藏
平时我们对类的访问权限,都是通过类前面的访问修饰符来限制的,一般的非内部类,是不允许有 private 与protected权限的,但内部类可以,所以我们能通过内部类来隐藏我们的信息。可以看下面的例子
接口
package com.edison; public interface Incrementable { void increment(); }
具体类:
package com.edison; public class Example { private class InsideClass implements InterfaceTest { public void test() { System.out.println("这是一个测试"); } } public InterfaceTest getIn() { return new InsideClass(); } }
上面InsideClass是内部类,访问修饰符是private
客户端程序
package com.edison; public class TestExample { public static void main(String args[]) { Example a=new Example(); InterfaceTest a1=a.getIn(); a1.test(); } }
从这段代码里面我只知道Example的getIn()方法能返回一个InterfaceTest 实例但我并不知道这个实例是这么实现的。而且由于InsideClass 是private的,所以我们如果不看代码的话根本看不到这个具体类的名字,所以说它可以很好的实现隐藏。
2.可以无条件地访问外围类的所有元素
package com.edison; public class TagBean { private String name="edison"; private class InTest { public InTest() { System.out.println(name); } } public void test() { new InTest(); } public static void main(String args[]) { TagBean bb=new TagBean(); bb.test(); } }
从上面类中name这个变量是在TagBean里面定义的私有变量。这个变量在内部类中可以无条件地访问System.out.println(name);
3.可以实现多重继承
个人认为它是内部类存在的最大理由之一。正是由于他的存在使得Java的继承机制更加完善。大家都知道Java只能继承一个类,它的多重继承在我们没有学习内部类之前是用接口来实现的。但使用接口有时候有很多不方便的地方。比如我们实现一个接口就必须实现它里面的所有方法。而有了内部类就不一样了。它可以使我们的类继承多个具体类或抽象类。大家看下面的例子。
类一
package com.edison; public class Example1 { public String name() { return "liutao"; } }
类二
package com.edison; public class Example2 { public int age() { return 25; } }
类三
package com.edison; public class MainExample { private class test1 extends Example1 { public String name() { return super.name(); } } private class test2 extends Example2 { public int age() { return super.age(); } } public String name() { return new test1().name(); } public int age() { return new test2().age(); } public static void main(String args[]) { MainExample mi=new MainExample(); System.out.println("姓名:"+mi.name()); System.out.println("年龄:"+mi.age()); } }
注意看类三,里面分别实现了两个内部类 test1,和test2 ,test1类又继承了Example1,test2继承了Example2,这样我们的类三MainExample就拥有了Example1和Example2的方法和属性,也就间接地实现了多继承。
四、 避免修改接口而实现同一个类中两种同名方法的调用。
大家假想一下如果,你的类要继承一个类,还要实现一个接口,可是你发觉你继承的类和接口里面有两个同名的方法怎么办?你怎么区分它们??这就需要我们的内部类了。看下面的代码
接口
package com.edison; public interface Incrementable { void increment(); }
类 MyIncrement
package com.edison; public class MyIncrement { public void increment() { System.out.println("Other increment()"); } static void f(MyIncrement f) { f.increment(); } }
两个方法都是一样的。在看下面这个类要继承这两个类
如果不用内部类
package com.edison; public class Callee2 extends MyIncrement implements Incrementable { public void increment() { //代码 } }
increment()这个方法是属于覆盖MyIncrement这里的方法呢?还是Incrementable这里的方法。我怎么能调到MyIncrement这里的方法?显然这是不好区分的。而我们如果用内部类就很好解决这一问题了。看下面代码:
package com.edison; public class Callee2 extends MyIncrement { private int i=0; private void incr() { i++; System.out.println(i); } private class Closure implements Incrementable { public void increment() { incr(); } } Incrementable getCallbackReference() { return new Closure(); } }
我们可以用内部类来实现接口,这样就不会与外围类的方法冲突了
[2] 一个简单的SimpleAdapter工具类-SimpleAdapterUtil
来源: 互联网 发布时间: 2014-02-18
1个简单的SimpleAdapter工具类-SimpleAdapterUtil
1个简单的SimpleAdapter工具类-SimpleAdapterUtil
根据android.widget.SimpleAdapter来生成对应需要装备的适配器。
代码:
版本一:数据格式为List<Object[]>
package com.zhouzijing.android.util; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.content.Context; import android.widget.SimpleAdapter; public class SimpleAdapterUtil{ /** * 创建适配器并配置数据. * @param context The context where the View associated with this SimpleAdapter is running * @param item 需要绑定的数据 * @param resource resource Resource identifier of a view layout that defines the views for this list * item. The layout file should include at least those named views defined in "to" * @param to The views that should display column in the "from" parameter. These should all be * TextViews. The first N views in this list are given the values of the first N columns * in the from parameter. * @return */ public static SimpleAdapter create(Context context,List<Object[]> item, int resource,int[] to) { //定义适配器内容数据 List<Map<String,?>> data = new ArrayList<Map<String,?>>(); //获取要显示内容数量 int itemLength = item.get(0).length; //获取要显示内容内部长度 int itemCount = item.size(); //定义适配器from参数 String[] adapterFroms = new String[itemCount]; for(int i=0;i<itemCount;i++){ adapterFroms[i]="Item"+String.valueOf(i); } //准备适配器内容 for(int i=0;i<itemLength;i++){ Map<String,Object> map = new HashMap<String,Object>(); for(int j=0;j<itemCount;j++){ map.put(adapterFroms[j], item.get(j)[i]); } data.add(map); } //绑定适配器并返回 SimpleAdapter simpleAdapter = new SimpleAdapter(context, data, resource, adapterFroms, to); return simpleAdapter; } }
版本二:数据格式为ArrayList<ArrayList<Object>>
package com.zhouzijing.android.util; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.content.Context; import android.widget.SimpleAdapter; public class SimpleAdapterUtil{ /** * 创建适配器并配置数据. * @param context The context where the View associated with this SimpleAdapter is running * @param item 需要绑定的数据 * @param resource resource Resource identifier of a view layout that defines the views for this list * item. The layout file should include at least those named views defined in "to" * @param to The views that should display column in the "from" parameter. These should all be * TextViews. The first N views in this list are given the values of the first N columns * in the from parameter. * @return */ public static SimpleAdapter create(Context context,ArrayList<ArrayList<Object>> item, int resource,int[] to) { //定义适配器内容数据 List<Map<String,?>> data = new ArrayList<Map<String,?>>(); //获取要显示内容数量 int itemLength = item.get(0).size(); //获取要显示内容内部长度 int itemCount = item.size(); //定义适配器from参数 String[] adapterFroms = new String[itemCount]; for(int i=0;i<itemCount;i++){ adapterFroms[i]="Item"+String.valueOf(i); } //准备适配器内容 for(int i=0;i<itemLength;i++){ Map<String,Object> map = new HashMap<String,Object>(); for(int j=0;j<itemCount;j++){ map.put(adapterFroms[j], item.get(j).get(i)); } data.add(map); } //绑定适配器并返回 SimpleAdapter simpleAdapter = new SimpleAdapter(context, data, resource, adapterFroms, to); return simpleAdapter; } }
[3] [转]Java字符串变换为日期和时间比较大小
来源: 互联网 发布时间: 2014-02-18
[转]Java字符串转换为日期和时间比较大小
方法一:
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
String dateBegin=fmt.format(carrierCommand.getDateBegin());
String dateEnd=fmt.format(carrierCommand.getDateEnd());
//如果获得的日期格式不是'2008-05-22',就必须要格式化一下日期
String dateBegin = request.getParameter("dateBegin");
String dateEnd = request.getParameter("dateEnd");
if(java.sql.Date.valueOf(dateBegin).after(java.sql.Date.valueOf(dateEnd))){
//起始日期大于结束日期
errors.rejectValue("dateEnd", null, "起始日期必须小于结束日期!");
}
StringBuffer timeBegin = new StringBuffer();
StringBuffer timeEnd = new StringBuffer();
timeBegin.append(request.getParameter("timeBegin"));
timeEnd.append(request.getParameter("timeEnd"));
timeBegin.append(":00");
timeEnd.append(":00");
if(java.sql.Date.valueOf(dateBegin).equals(java.sql.Date.valueOf(dateEnd)))
{ //起始日期等于结束日期
if(java.sql.Time.valueOf(timeBegin.toString()).equals(java.sql.Time.valueOf
(timeEnd.toString())))//时间相同
{
errors.rejectValue("timeEnd", null, "起始与结束日期相同,起始时间必须小于结束时间!");
}
if(java.sql.Time.valueOf(timeBegin.toString()).after(java.sql.Time.valueOf
(timeEnd.toString())))//时间相同
{
errors.rejectValue("timeEnd", null, "起始与结束日期相同,起始时间必须小于结束时间!");
}
}
方法二:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
*
* @author hp
*/
public class test {
public static void main(String args[]) {
int i= compare_date("1995-11-12 15:21", "1999-12-11 09:59");
System.out.println("i=="+i);
}
public static int compare_date(String DATE1, String DATE2) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm");
try {
Date dt1 = df.parse(DATE1);
Date dt2 = df.parse(DATE2);
if (dt1.getTime() > dt2.getTime()) {
System.out.println("dt1 在dt2前");
return 1;
} else if (dt1.getTime() < dt2.getTime()) {
System.out.println("dt1在dt2后");
return -1;
} else {
return 0;
}
} catch (Exception exception) {
exception.printStackTrace();
}
return 0;
}
}
方法三:
比如:现在是2004-03-26 13:31:40
过去是:2004-01-02 11:30:24
我现在要获得两个日期差,差的形式为:XX天XX小时XX分XX秒
java计算时间差及比较时间大小
比如:现在是2004-03-26 13:31:40
过去是:2004-01-02 11:30:24
我现在要获得两个日期差,差的形式为:XX天XX小时XX分XX秒
一:
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try
{
Date d1 = df.parse("2004-03-26 13:31:40");
Date d2 = df.parse("2004-01-02 11:30:24");
long diff = d1.getTime() - d2.getTime();
long days = diff / (1000 * 60 * 60 * 24);
}
catch (Exception e)
{
}
二:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date now = df.parse("2004-03-26 13:31:40");
java.util.Date date=df.parse("2004-01-02 11:30:24");
long l=now.getTime()-date.getTime();
long day=l/(24*60*60*1000);
long hour=(l/(60*60*1000)-day*24);
long min=((l/(60*1000))-day*24*60-hour*60);
long s=(l/1000-day*24*60*60-hour*60*60-min*60);
System.out.println(""+day+"天"+hour+"小时"+min+"分"+s+"秒");
三:
SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date begin=dfs.parse("2004-01-02 11:30:24");
java.util.Date end = dfs.parse("2004-03-26 13:31:40");
long between=(end.getTime()-begin.getTime())/1000;//除以1000是为了转换成秒
long day1=between/(24*3600);
long hour1=between%(24*3600)/3600;
long minute1=between%3600/60;
long second1=between%60/60;
System.out.println(""+day1+"天"+hour1+"小时"+minute1+"分"+second1+"秒");
====================================================
java 比较时间大小
String s1="2008-01-25 09:12:09";
String s2="2008-01-29 09:12:11";
java.text.DateFormat df=new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Calendar c1=java.util.Calendar.getInstance();
java.util.Calendar c2=java.util.Calendar.getInstance();
try
{
c1.setTime(df.parse(s1));
c2.setTime(df.parse(s2));
}catch(java.text.ParseException e){
System.err.println("格式不正确");
}
int result=c1.compareTo(c2);
if(result==0)
System.out.println("c1相等c2");
else if(result<0)
System.out.println("c1小于c2");
else
System.out.println("c1大于c2");
方法一:
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
String dateBegin=fmt.format(carrierCommand.getDateBegin());
String dateEnd=fmt.format(carrierCommand.getDateEnd());
//如果获得的日期格式不是'2008-05-22',就必须要格式化一下日期
String dateBegin = request.getParameter("dateBegin");
String dateEnd = request.getParameter("dateEnd");
if(java.sql.Date.valueOf(dateBegin).after(java.sql.Date.valueOf(dateEnd))){
//起始日期大于结束日期
errors.rejectValue("dateEnd", null, "起始日期必须小于结束日期!");
}
StringBuffer timeBegin = new StringBuffer();
StringBuffer timeEnd = new StringBuffer();
timeBegin.append(request.getParameter("timeBegin"));
timeEnd.append(request.getParameter("timeEnd"));
timeBegin.append(":00");
timeEnd.append(":00");
if(java.sql.Date.valueOf(dateBegin).equals(java.sql.Date.valueOf(dateEnd)))
{ //起始日期等于结束日期
if(java.sql.Time.valueOf(timeBegin.toString()).equals(java.sql.Time.valueOf
(timeEnd.toString())))//时间相同
{
errors.rejectValue("timeEnd", null, "起始与结束日期相同,起始时间必须小于结束时间!");
}
if(java.sql.Time.valueOf(timeBegin.toString()).after(java.sql.Time.valueOf
(timeEnd.toString())))//时间相同
{
errors.rejectValue("timeEnd", null, "起始与结束日期相同,起始时间必须小于结束时间!");
}
}
方法二:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
*
* @author hp
*/
public class test {
public static void main(String args[]) {
int i= compare_date("1995-11-12 15:21", "1999-12-11 09:59");
System.out.println("i=="+i);
}
public static int compare_date(String DATE1, String DATE2) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm");
try {
Date dt1 = df.parse(DATE1);
Date dt2 = df.parse(DATE2);
if (dt1.getTime() > dt2.getTime()) {
System.out.println("dt1 在dt2前");
return 1;
} else if (dt1.getTime() < dt2.getTime()) {
System.out.println("dt1在dt2后");
return -1;
} else {
return 0;
}
} catch (Exception exception) {
exception.printStackTrace();
}
return 0;
}
}
方法三:
比如:现在是2004-03-26 13:31:40
过去是:2004-01-02 11:30:24
我现在要获得两个日期差,差的形式为:XX天XX小时XX分XX秒
java计算时间差及比较时间大小
比如:现在是2004-03-26 13:31:40
过去是:2004-01-02 11:30:24
我现在要获得两个日期差,差的形式为:XX天XX小时XX分XX秒
一:
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try
{
Date d1 = df.parse("2004-03-26 13:31:40");
Date d2 = df.parse("2004-01-02 11:30:24");
long diff = d1.getTime() - d2.getTime();
long days = diff / (1000 * 60 * 60 * 24);
}
catch (Exception e)
{
}
二:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date now = df.parse("2004-03-26 13:31:40");
java.util.Date date=df.parse("2004-01-02 11:30:24");
long l=now.getTime()-date.getTime();
long day=l/(24*60*60*1000);
long hour=(l/(60*60*1000)-day*24);
long min=((l/(60*1000))-day*24*60-hour*60);
long s=(l/1000-day*24*60*60-hour*60*60-min*60);
System.out.println(""+day+"天"+hour+"小时"+min+"分"+s+"秒");
三:
SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date begin=dfs.parse("2004-01-02 11:30:24");
java.util.Date end = dfs.parse("2004-03-26 13:31:40");
long between=(end.getTime()-begin.getTime())/1000;//除以1000是为了转换成秒
long day1=between/(24*3600);
long hour1=between%(24*3600)/3600;
long minute1=between%3600/60;
long second1=between%60/60;
System.out.println(""+day1+"天"+hour1+"小时"+minute1+"分"+second1+"秒");
====================================================
java 比较时间大小
String s1="2008-01-25 09:12:09";
String s2="2008-01-29 09:12:11";
java.text.DateFormat df=new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Calendar c1=java.util.Calendar.getInstance();
java.util.Calendar c2=java.util.Calendar.getInstance();
try
{
c1.setTime(df.parse(s1));
c2.setTime(df.parse(s2));
}catch(java.text.ParseException e){
System.err.println("格式不正确");
}
int result=c1.compareTo(c2);
if(result==0)
System.out.println("c1相等c2");
else if(result<0)
System.out.println("c1小于c2");
else
System.out.println("c1大于c2");
最新技术文章: