JavaSE学习笔记——Java的核心类库(部分)

Java的核心类库(部分)

主要内容:由jdk提供常用的类和API。

java.lang.Object

概念:java中规定,Object是所有类的超类(父类)。所描述的概念就是对象。为其子类提供了统一的方法。toString(),equals(),hashCode方法。

  • toString()
    概念:功能就是将对象的内容采用字符串的形式输出。默认情况下,object对于toString方法直接返回的字符串的形式为:类的全限定名@该实例对象在内存中的哈希值。jdk中如果直接输出一个引用类型的变量,那么默认调用object的toString方法,如果需要自定义对象的输出内容,那么需要重写toString。toString通常是在测试阶段为了快捷的查阅当前对象的内容而使用。

  • equals()
    概念:比较两个对象是否”相当”,判断另一个对象和当前对象的内容是否相等,而不是去判断这两个对象的地址是否相等. 通过Object#equals判断两个对象的内容是否相当,需要手都提供对于equals方法的实现. 在重写Object#equals方法是需要遵守的规则:自反性/非空对称/传递性/一致性

   public boolean equals(Object obj){
        //1.判断参数是否为空
        if(obj ==null ){
            return false;
        }
        //2.和当前对象进行比较
        if(obj == this){
            return true;
        }
        //3. 判断obj的运行时类型是否属于当前类
        if(obj instanceof className){
           //3.1 强制转换
           className other=(className)obj;
           return this和other之间的内容比较的结果;
        }
        return false;
   }
  • hashCode方法
    概念:返回该对象的哈希码值。支持此方法是为了提高哈希表的查询的性能.根据编程规范,重写了equals方法建议重写hashCode以维护equals和hashCode的常规协定.在equals中参与比较的内容必须在hashCode中出现.

java.lang.String

概念:表示不可变的字符串,该字符串一旦初始化之后值就不能改变.所以可以被共享.

字符串的初始化

  • 方法1:采用双引号直接提供字符串的常量值(字面量)

    //在内存中创建了一个对象:字符串的常量池中的abc,常量池中的数据可以被共享,在初始化字符串时,默认扫描常量池中的数据,如果存在直接返回,否则在创建.以空间换时间的过程.
    String str1="abc";
  • 方法2:通过String提供的构造器实例化一个字符串对象

   //在内存中创建了两个对象
   //1.new关键字在堆内存中创建的String对象.
   //2.字符串的直接量默认在编译时在常量池中创建.
   String str2=new String("abc");
字符串初始化常见问题
   String str4 = "abc";
   String str5 = str4 + "123";

以上代码创建了三个对象:

  • 常量池中的两个对象:abc,123
  • 底层new StringBuilder对象.java通过加号实现字符串的拼接底层通过StringBuilder对象实现.

String中常用的API

  • String#charAt(index):截取指定位置的字符
  • String#length():获得字符串的长度,字符的个数
  • String#equals(Object):判断两个字符串的内容是否相等
  • String#endsWith(suffix):判断字符串是否采用指定的内容结束.通常判断文件后缀
  • String#startsWith(pre):判断字符串是否采用指定的内容开始
  • String#toLowerCase():将字符串转成小写
  • String#toUpperCase():将字符串转成大写
  • String#indexOf(str);判断字符串中是否存在指定的子串,如果存在返回该字串在字符串中第一次出现的位置,否则返回-1
  • String#lastIndexOf(str);判断字符串中是否存在指定的子串,如果存在返回该字串在字符串中最后一次出现的位置,否则返回-1
  • String#indeOf(str,index):从index开始查询是否存在指定的字符串,返回第一次出现的位置,否则返回-1;
  • String#substring(begin,end);从String中下标为[begin,end)位置截取一个子串
  • String#trim():去掉字符串两端的空白(空格,换行,制表符)
  • String#toCharArray():将字符串以字符数组的形式返回
  • String#getBytes():根据系统默认的编码格式获得一个byte数组,如果windows系统默认字符编码为gbk,如果linux,mac系统默认的utf-8
    • utf-8:中文采用3个字节进行描述
    • gbk:中文采用2字节描述
    • iso-8859-1:无法处理中文
    • ASCII:无法描述中文
  • String(bytes,charSet):通过该构造器实现将byte序列转成字符串.
  • String#replaceAll(String regex, String replacement):将符合regex的内容采用指定的内容进行替换

StringBuilder和StringBuffer

  • StringBuffer:线程安全的可变字符序列,效率低
  • StringBuilder:线程不安全的可变字符序列,效率高,就是StringBuffer的替代类

Java中对于时间的处理

  1. java中表示时间的方式

    • 采用long类型,描述1970-01-01 00:00:00 到现在的毫秒值

       //long类型的时间由于信息量太少,所以很少使用,通常作为底层使用
       //早期可以使用该方法进行效率的测试.目前被单元测试取代
       long now=System.currentTimeMillies();
    • 采用java.util.Date;描述时间的概念,底层就是对long类型的时间进行操作

       /*
        *由于Date类型的底层的算法存在千年虫的问题,所以目前Date中大部分的API都已经*过时.所以Date通常在java中不进行时间的计算.使用Date描述时间的概念(用户的生日,商品的生产日期,合同的续签时间)
        */
       Date now=new Date();
      
       public class User{
         //描述用户的注册时间
         private Date registTime;//使用Date表示时间的概念
       }
    • 采用java.util.Calendar:java提供的历法,通常实现日期的计算.

       //通过Calendar提供的API对日期进行计算
       Calendar now=Calendar.getInstance();

java.util.Calendar

  • Calendar#get(field):获取时间的属性值

    • Calendar.YEAR:获得年份
    • Calendar.MONTH:获得月份,从0开始,0表示1月
    • Calendar.DAY_OF_MONTH/Calendar.DATE:获得日期,一个月中第几天
    • Calendar.DAY_OF_YEAR:一年中第几天
    • Calendar.WEEK_OF_MONTH:一个月中第几周
    • Calendar.WEEK_OF_YEAR:一年中第几周
    • Calendar.DAY_OF_WEEK:一周中的第几天.星期天为第一天
  • Calendar#set(field,value):将指定的属性进行设置

  • Calendar#clear(field);将指定的属性值清空
  • Caleddar#add(filed,offset):对指定的属性进行操作,添加偏移量.如果给定的值超出当前操作的属性的范围,那么会自动对前一个属性进行进位.
  • Calendar#roll(field,offset);对指定的属性进行操作,添加偏移量.如果给定的值超出当前操作的属性的范围,不会响应前一个属性.

日期格式的转换

  • 日期格式的转换指定的日期格式和Date类型的相互转换.由java.text.SimpleDateFormat实现.
   SimpleDateFormat sdf=new SimpleDateFormat();
   //提供预定义的格式
  • 常见的时间的预定义格式
序号模式说明
1yyyy采用四位表示年份 1999
2yy采用两位表示年份 99
3MM采用两位表示月份 01
4dd采用两位表示日期 02
5HH采用两位的24小时值
6mm采用两位表示的分钟
7ss采用两位表示的秒钟
8E表示星期
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值