日期:2014-05-20  浏览次数:20591 次

请教java类定义问题
最新学习android多线程断点续传的代码,网上有篇文章中有这么一个类定义,

public class Dao {
private static Dao dao = null;
private Context context;

private Dao(Context context) {
this.context = context;
}

public static Dao getInstance(Context context) {
if (dao == null) {
dao = new Dao(context);
}
return dao;
}
....省略...
public synchronized boolean isHasInfors(String urlstr) {
SQLiteDatabase database = getConnection();
int count = -1;
Cursor cursor = null;
try {
String sql = "select count(*)  from download_info where url=?";
cursor = database.rawQuery(sql, new String[] { urlstr });
if (cursor.moveToFirst()) {
count = cursor.getInt(0);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != database) {
database.close();
}
if (null != cursor) {
cursor.close();
}
}
return count == 0;
}

问题1:private static Dao dao = null;
类的定义中声明本类的变量是什么意思,有什么用途?

问题2:public synchronized boolean isHasInfors(String urlstr)
返回序列化的布尔值是什么意思,有什么用途?


------解决方案--------------------
private static Dao dao = null;定义一个Dao类的静态变量dao并赋值为空null;
synchronized是同步的意思吧 如果我没有记错的话
那么这里就是定义一个同步方法。。
我也是初学者  不是很清楚
------解决方案--------------------
问题1:private static Dao dao = null;
类的定义中声明本类的变量是什么意思,有什么用途?

他这是为了实现单例模式 。跟下面这个方法配合以实现单例模式

public static Dao getInstance(Context context) {
if (dao == null) {
dao = new Dao(context);
}
return dao;
}

单例模式是一种设计模式。
作用:不能使用new关键字来创建本类的实例,像你的那个例子的话就只能通过getInstance方法来获得本类的实例。而且每次获取到的都是同一个实例。
这只是个大概介绍。 
单例模式的具体内容可以自己去查。 很容易查到的






------解决方案--------------------
引用:
最新学习android多线程断点续传的代码,网上有篇文章中有这么一个类定义,

public class Dao {
private static Dao dao = null;
private Context context;

private Dao(Context context) {
this.context = context;
}

pub……


楼上说的不错,这正是懒汉式单例模式的实现,对于
新手你只需知道这是一种设计方法就行了也可以了解下
http://blog.csdn.net/kiritor/article/details/8675215
第二个问题,楼主应该是眼拙了
synchronized 怎么会是"序列化"呢?
至于他是什么我就不过多解释了