java学习(7)-另外一些简单类和泛型的描述



说明

因为是个人复习java的总结,所以结构稍显杂乱,有些语句过于口语化.


Object

  equals()方法,其实内部实现就是==,基本类型比较值,引用类型比较的是地址
源代码表现为
  this == obj this为调用方法的对象,obj为传入的内容
所以在使用的时候基本需要重写


Date类

  主要就是用来表示时间,可以在毫秒和具体日期之前切换.
  毫秒日期的原点为1970/1/1 00:00:00
  中国为东八区所以需要加八个小时

  直接打印返回的是重写后的toString方法,包括时区年月日等信息
如果想要格式化输出的Date可以通过SimpleDateFormat类来实现.
  因为SimpleDateFormat中有堆Date类输出的格式解析实现,首先需要通过构造器创建对应的输出解析方式,使用y,M,d,H,m,s表示年月日时分秒,然后通过 SimpleDateFormat的对象调用format格式化Date对象,然后就可以输出指定的格式.
  format是转换Date为指定格式而parse方法则是解析指定格式为Date
  具体调用和format一样,只是效果不同,但是需要注意其抛出的解析异常,格式不正确时出现.


Calendar类

  Calendar类无法直接创建对象,但是可以使用getInstance静态方法来获取其子类.
  主要使用的get方法获取其中具体的属性值,仍需要先实现子类对象,然后调用get()传入Calendar中的具体字段,然后获得返回值,如传入Calendar.YEAR
  然后还有set方法设置,具体和get相同
  还有add方法传入对应的字段和int,对字段增加后面int的值,可为负数


System类

  其中含有获取系统信息的大量方法以及系统操作
  常用的如currentTimeMillis()方法,获取当前的系统时间,毫秒表示,多用于对于程序运行时间的计数.
  还有就是arraycopy方法,其中有五个参数,具体看文档,实现的就是把一个数组一定长度的内容放到另一个数组中


StringBuilder类

  • 忘记比较StringBuffer了,下次更新补充.

  因为字符串在底层是被final修饰的byte数组,无法改变的,所以需要StringBuilder这个类来作为字符串的缓冲区,达到使用可改变的字符串的目的,从而减少内存的占用.
  特别在做字符串的组合的时候,String类对于内存的占用十分多,每个””都需要创建,每次计算都要新增字符串,而这些字符串实际上都不会再使用到,所以效率十分低.

  而StringBuilder底层其实也是byte数组,但是不是final修饰并且是长度可变的.所以对于字符串的组合操作使用效率较高.
  其中append方法,效果从名字可以看出,但是特殊在其返回值是调用的对象,从概念上理解就是StringBuilder所占用的一块对象内存在append中一直没有改变,只是其中的数组内容发生了一些变化,因此对于这个函数可以使用链式地语句书写模式,也就是说可以不断.append(),因为其返回值是同一个对象.

  还有toString方法,其实就是把StringBuilder转换成String.
  其实很多类有重写toString()方法,但是这个方法和String的是不同的,很多类中重写的是Object类中的toStirng,主要是输出的问题,而String类中的则是转换成字符串.


包装类

  其实就是基本数据类型的类,其中有一些操作方法.

    byte    Byte
    char    Character
    int      Integer
    boolean   Boolean
    float    Float
    double    Double
    long     Long
    short    Short

  其实其中常用的就ValueOf()静态方法,获取字符串或者int的值
  .IntValue静态方法,其实就是包装类变回基本数据类型


基本类型和字符串之间的转换

其实就是parseInt()方法,随数据类型更改方法名


集合框架

其实就是集合整理上实现的类的一个结构
  首先Collection接口分为List接口和Set接口
  其中List接口有以下实现类:Vector,ArrayList,LinkedList
  其中Set分为TreeSet和HashSet
  然后HashSet又被LinkedHashSet继承
主要学习顶层的抽象类,可以了解共性的方法,还有底层的实现类,可以了解具体实现类的特性.


Collection常用功能

  其实思考Collection作为所有集合的共同接口,其中包含的共性必然是增删改查等基本操作的规范.


Iterator接口

  其实就是一个迭代器,用于判断集合中是否还有元素,并进行遍历.因为部分集合是无需的,所以有迭代器是十分必要的.
  迭代器具有泛型,泛型的数据类型随着集合而定.
  这个接口不能直接实例化,而获取其对象的方法也很奇葩,使用的是集合中的iterator()方法.
  foreach语句,其实底层也是迭代器,但是语句简化.
  for(集合/数组的数据类型 变量名: 集合名/数组名)


泛型

  其实就是规范能输入的数据类型
  如果不知道什么类型的时候,就可以在类中设置泛型为
  如果不写会默认为Object,但是不安全,因为在使用的时候很可能泛型输能输入不同类型的数据,那么在输出的时候,使用就需要向下转型才能使用你存入时需要使用的初衷方法,但是这样可能传入是传入错误数据从而导致无法转型.
但是如果定义泛型,那么就可以把这种错误解决在编译阶段,并且输出之后不需要向下转型.
  如果写了泛型,这些问题就会在编译阶段出错,从而减少了错误的修改代价.
泛型可以使用在类中,即所有数据类型都改成,不包括静态的方法,这个字母不一定要强制要求,这样做的好处,是对于一个类,需要限定其中数据类型统一的时候,在创建对象时设置泛型,从而达到类中数据类型统一的目的.但是着样实质上一个对象也只能统一为一种类型.

  泛型也可以定义在方法中
  也可以定义在接口中,而在接口中的泛型类型的设置,一种是在实现类中重写对应方法为某种类型,而达到某种类型的泛型.另一种是接口实现什么类型的翻新,其中的方法就跟随什么泛型.实际上最终是接口实现类对象设置某种类型泛型,其中方法就某种类型泛型.


泛型通配符

  其实就是?,可以用来匹配所有类型的数据.
  一次泛型中没有继承概念,不会向上转型,所以只能使用通配符设置.
但是需要注意,通配符不能在创建对象的时候使用,只能是作为方法的参数传递,也就是一个匹配所有类型的方法.

  泛型通配符还有一种高级的用法,其实就是在泛型基础上增加一个范围的判定
  上限限定 <? extends E>
  下限限定 <? super E>



如有错误欢迎读者批评指正!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值