------- android培训、java培训、期待与您交流! -------
泛型
1泛型的由来:jdk5.0出现的安全性特性
2泛型的好处:1)将运行时期的问题(强转异常)转到了编译时期。
2)避免了强制转化的问题
泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会去除掉“类型”信息,使程序运行效率不受影响,对于参数化的泛型类型,getClass()方法的返回值和原始类型完全一样。由于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就可以往某个泛型集合中加入其它类型的数据,例如,用反射得到集合,再调用其add方法即可。
3当操作的引用数据类型不确定的时候,就用泛型
注意:泛型技术是给编译器使用的技术,用于翻译时期,确保了类型的安全,运行时会将泛型去掉,生成class文件中不带泛型,这个称为泛型的擦除为了兼容运行的类加载器。、
当方法静态时,不能访问类上定义的泛型,如果静态方法使用泛型,只能将泛型定义在方法上
在jdk5.0后,使用泛型来接受类中要操作的引用数据类型。
在泛型类中当类中操作的引用数据类型不确定时,就是用泛型来表示。
当方法静态时,不能访问类上定义的泛型,如果静态方法使用泛型,只能将泛型定义在方法上。
Public static <T>void methed(T obj){
}
泛型的通配符:?未知类型,可以对类型进行设定
?extends E:接收E类型或E类型的子类。上限
?super E 接受E类型或E类型的父类类型。下限
泛型的限定:
? extends E: 接收E类型或者E的子类型对象。上限
一般存储对象的时候用。比如 添加元素 addAll.
? super E: 接收E类型或者E的父类型对象。 下限。
一般取出对象的时候用。比如比较器。
集合技巧
(1)需要唯一
就用set不需要就用List
需要制定顺序需要TreeSet,不需要HashSet
需要频繁增减,需要用LinkList不需要ArrayList
看到Array就要想到数组,查询快
看到Link就要想到链表,增删快
看到Hash就要想到哈希表,唯一性,元素需要覆盖hashcode方法和equals()方法
看到Tree就要想到二叉树,排序,就要想到两个接口comparable和comparator
System类:不能被实例化,类中的方法和属性是静态的。
Out:标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用
户指定的另一个输出目标。
In:标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。
常见方法:
public static longcurrentTimeMillis()返回以毫秒为单位的当前时间。注意,当返回值的时间单位是毫秒时,
值的粒度取决于底层操作系统,并且粒度可能更大。例如,许多操作
系统以几十毫秒为单位测量时间。
当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒
为单位测量)。
getProperties()确定当前系统的属性。
properies集合中存储的都是String类型。
RunTime:没有构造方法,说明该类不能创建对象,且没有静态方法,说明了该类有一个方法(getRuntime())来获取该类的一个对象,即单例模式
Exec:命令
例:import java.io.IOException;//打开记事本程序
publicclass Array {
publicstaticvoid main(String[] args) {
Runtime r=Runtime.getRuntime();
try {
r.exec("notepad.exe");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Date日期:在类 Date 所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表
示形式:
年份 y 由整数 y - 1900 表示。
月份由从 0 至 11 的整数表示;0 是一月、1 是二月等等;因此 11 是十二月。
日期(一月中的某天)按通常方式由整数 1 至 31 表示。
小时由从 0 至 23 的整数表示。因此,从午夜到 1 a.m. 的时间是 0 点,从中午到 1 p.m. 的时间是 12 点。
分钟按通常方式由 0 至 59 的整数表示。
秒由 0 至 61 的整数表示;值 60 和 61 只对闰秒发生,尽管那样,也只用在实际正确跟踪闰秒的 Java 实现中。于按当前引入闰秒的方式,两个闰秒在同一分钟内发生是极不可能的,但此规范遵循 ISO C 的日期和时间约定。
将毫秒值转换为日期对象:通过date的构造函数public Date(long date)
还可以通过setTime()设置。
将日期转换为毫秒值: public long getTime()
DateFormat :是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间
将日期转化为字符串:
使用DateFormat类中的Format方法。
将日期格式的字符串转化为日期:
public Dateparse(Stringsource)throws ParseException
从给定字符串的开始解析文本,以生成一个日期。该方法不使用给定字符串的整个文
本。
每日心得与总结:我认为其实泛型是对开发的一种规范,慢慢的开发多了你就明白它其实很有用,比如你可以把查询结果list的每条记录,各个属性封装在一个类中,比如:public class Demo{ privateString A;private String B;private String C (此处略去get(),set())},你就可以查询结果用泛型,List<Demo> list =new ArrayList<Demo>(); 这样声明了之后就可以很方便的得到某条记录的具体属性值,比如说,你想要第三条记录的A值:list.get(2).getA()就行了。当然了,你如果不加泛型的话,可以进行强转类型。。。。。泛型,其实不难,也用不着往里钻,也没有什么好钻的,只是可能开始理解上有点疑问,但是时间长了,你就会理解为什么加泛型了,泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
Java语言引入泛型的好处是安全简单。
在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
这使我对泛型有了更深一步的理解了,除了看老师的视频,百度知道里面也帮了我不少的忙,解了我很多的不明白,在这我要感谢那些帮助我的人。谢谢你们。