黑马程序员_泛型

------- 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的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
  泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

这使我对泛型有了更深一步的理解了,除了看老师的视频,百度知道里面也帮了我不少的忙,解了我很多的不明白,在这我要感谢那些帮助我的人。谢谢你们。


 

                       

 

 

 





---------- android培训java培训、期待与您交流! ----------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值