【javase复习】## day6 常用API ##

总结一下常用API以及常用方法!有些java提供的类方法虽然多,但是经过归类还是蛮容易去记忆和使用的,要弄清楚原理不要怕。比如之前就总是很弄不清byte[],int[],char[],String的关系。也不太清楚Date类还有calendar还有什么dateformat到底啥是啥。。其实都不难,要勤做笔记多看两遍就行了,其实还是用的少,所以只要弄清楚,到时候要用扫一眼API文档就可以了。



Object类

这里写图片描述

搞了半天最祖宗的Object类原来只有这么几个方法,除了重载的关于线程安全的方法之后几乎少的可怜。重点掌握红圈3个方法

1. toString()

返回一个对象的字符串表示,它的值等于:
getClass().getName() + ‘@’ + Integer.toHexString(hashCode())

package cn;

class Person{

}
public class www {
    public static void main(String[] args) {
        Person p = new Person();
        System.out.println(p);
        System.out.println(p.toString());
        String s = new String("分神烦大叔");
        System.out.println(s);
    }
}

结果得

cn.Person@15db9742
cn.Person@15db9742
分神烦大叔

为什么这里没有直接打印p和打印p的toString()方法得到的结果是一样的呢?

我们翻文档翻翻翻

首先来到PrintStream.class 因为我们知道System.out其实是一个输出流对象

    public void print(Object obj) {
        write(String.valueOf(obj));
    }

然后又来到String.class

  public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

发现原来是因为Print方法最终是调用了String类里面重写的toString方法!所以就很简单了,如果想让任何一个类直接打印就是你想要的内容,只要重写toString方法就可以了。

2、hashCode();

返回对象的哈希值,这里可以看做是地址,注意这里与ToString方法最后的那个值有点不同, 这里的哈希值是那个值得一个参数

3、 equals(Object obj);

比较两个对象的内存地址,即哈希值。

注意: 一般重写equals(Object obj);方法时也会重写hashCode();方法, 显得更合理,equals(Object obj);方法相当于定义了两个对象相等的一个规范,而hashCode();的本质目的是定义一个对象的唯一确认值.










String类

要学习Stirng, 先要了解String类的对象在内存中的存储方式。
如下图所示
这里写图片描述

String的两种创建方式。

直接用”asdsa” 创建, 只会在字符串常量池中创建,且重复就不创建,然后将栈内存中的变量指向字符串常量池中的地址。

new String(“sadas”) 创建的字符串对象,也会在字符串常量池中创建,重复不创建,然后将常量池中的值复制到堆内存中再创建一个对象,这里的复制不是字符串常量池地址的复制, 而是真实的字符串值的复制, 然后将这个堆内存中的地址给栈内存中的变量。
所以用new 出来的字符串 其实是创建了两个对象, 有两个地址!!!只不过没有变量指向常量池中的地址,而是直接指向堆内存中的地址, 他们相同,地址不同!!!

常用方法:

这里写图片描述

看起来很多 其实无非就是用byte[], char[], int [] ,和其他String对象去创建一个新的String对象。

使用byte[] 数组可以指定码表。
使用char[]数组没什么好说的。就是一个一个的复制进字符串,char数组的元素也可以是数字,通过ASCII表直接转换成相应的字符,这点在前面的复习中有讲述。
使用其他String对象创建, 就不用说了吧 弱智。

String()  创建一个空内容 的字符串对象。
String(byte[] bytes)  使用一个字节数组构建一个字符串对象
String(byte[] bytes, int offset, int length) 
    bytes :  要解码的数组
    offset: 指定从数组中那个索引值开始解码。
    length: 要解码多个元素。

String(char[] value)  使用一个字符数组构建一个字符串。  
String(char[] value, int offset, int count)  使用一个字符数组构建一个字符串, 指定开始的索引值,与使用字符个数。
String(int[] codePoints,int offset,int count)
String(String original) 

记住: 使用字节数组或者字符数组都可以构建一个字符串对象。

方法也有很多,看起来数不清,其实分一下类, 都是很简单的看方法名字就知道怎么用的方法。

①获取方法

  int length()  获取字符串的长度 
  char charAt(int index) 获取特定位置的字符 (角标越界)
  int indexOf(String str) 查找子串第一次出现的索引值,如果子串没有出现 在字符串中,那么则返回-1表示。     
int lastIndexOf(String str) 查找子串最后一次出现的索引值 , 如果子串没有出现 在字符串中,那么则返回-1表示

②判断方法

boolean endsWith(String str) 是否以指定字符结束
boolean isEmpty()是否长度为0
boolean contains(CharSequences) 是否包含指定序列 应用:搜索
boolean equals(Object anObject) 是否相等
boolean equalsIgnoreCase(String anotherString) 忽略大小写是否相等


③转换方法

   char[] toCharArray()  将字符串转换为字符数组
    byte[] getBytes();    将字符串转换为字节数组

前面说过字符数组、 字节数组、 字符串是可以转换的,既然可以用String里面的方法将String转换为 字符数组和字节数组。
也可以用Arrays.toString()方法将字符数组或者字节数组转换为字符串。


④其他方法

String replace(String oldChar, String newChar) 替换
String[] split(String regex) 切割
String substring(int beginIndex) 指定开始
String substring(int beginIndex, int endIndex)指定开始与结束的索引值截取子串
String toUpperCase() 转大写
String toLowerCase() 转小写
String trim() 去除字符串首尾的空格





StringBuffer、 StringBuilder类

首先要注意这两个类都是final类
不同点:

StringBuffer 慢, 线程安全, JDK1.0
StringBuilder 快 , 线程不安全, JDK1.5

因为随着JAVA的发展已经有了更好的机制去解决线程安全问题, 所以效率低下的StringBuffer显得累赘, 很少用了, 都用StringBuilder。
所以以下只讨论StringBuilder。

什么引出这两个类?

因为String创建的对象是常量, 一旦确定就无法修改,一旦修改就等于创建了一个新的对象, 耗费了内存,为了频繁修改字符串的内容,引出了这两个字符串缓冲类,实际上是内部维护了一个字符数组

构造方法:
这里写图片描述
翻开他的构造方法。

 public StringBuffer() {
        super(16);
    }

再翻开。

 AbstractStringBuilder(int capacity) {
        value = new char[capacity];
    }

StringBuffer 是一个存储字符的容器

容器的具备 的行为

String 

增加
    append(boolean b)    可以添加任意类型 的数据到容器中
    insert(int offset, boolean b)  指定插入的索引值,插入对应 的内容。 

删除
    delete(int start, int end)  根据指定的开始与结束的索引值删除对应的内容。
    deleteCharAt(int index)   根据指定 的索引值删除一个字符。


修改

    replace(int start, int end, String str) 根据指定 的开始与结束索引值替代成指定的内容。
    reverse()   翻转字符串缓冲类的内容。  abc--->cba

    setCharAt(int index, char ch)  把指定索引值的字符替换指定的字符。 
    substring(int start, int end)  根据指定的索引值截取子串。
    ensureCapacity(int minimumCapacity)  指定StringBuffer内部的字符数组长度的。

查看
    indexOf(String str, int fromIndex) 查找指定的字符串第一次出现的索引值,并且指定开始查找的位置。
    lastIndexOf(String str) 

    capacity() 查看当前字符数组的长度。 
    length() 

    charAt(int index) 
    toString()   把字符串缓冲类的内容转成字符串返回。

注意因为是维护了字符数组,如果长度不够了,会另外创建一个字符数字长度等于当前长度的2倍+2。





System类

它不能被实例化。没有构造方法,只有静态方法。

在 System 类提供的设施中,
①有标准输入、标准输出和错误输出流;
②对外部定义的属性和环境变量的访问;
③加载文件和库的方法;
④还有快速复制数组的一部分的实用方法。

实际上所有的方法也是为了以上四个方面而设计的,而且真正用的到的并不多。。

主要方法:

arraycopy(Object src, int srcPos, Object dest, int destPos, int
length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

currentTimeMillis()
返回以毫秒为单位的当前时间

exit(int status)
终止当前正在运行的 Java 虚拟机。

gc()
运行垃圾回收器。

getenv()
返回一个不能修改的当前系统环境的字符串映射视图。
getProperties()
确定当前的系统属性。

注意System.gc()方法实际上是调用了对象的finalize();方法, 通知jvm尽快回收对象,但是并不是立刻回收。








Runtime类 ##

描述了应用程序的运行环境

一个应用程序只有一个运行环境。所以显然是单例设计模式,所以没有构造方法,而是用Runtime.getRuntime()返回当前应用程序的运行时环境。

exec(String path)
执行目标程序,返回Process类对象指向的进程。

然后用这个对象的destroy()方法可以杀死自己。。

freeMemory()
返回 Java 虚拟机中的空闲内存量。

maxMemory()
返回 Java 虚拟机试图使用的最大内存量。
totalMemory()
返回 Java 虚拟机中的内存总量。







Date类 Calendar类 SimpleDateFormat类

Date类

只有一个Date()返回当前系统时间, 其他方法都已经过时不用 基本都用Calendar类取代。





Calendar类

protected Calendar()
构造一个带有默认时区和语言环境的 Calendar。

如果要用这个构造方法, 必须继承这个Calendar,所以一般用静态方法获取对象。 Calendar.getInstance()获取当前系统时间

get(int field)
返回给定日历字段的值。

eg:

Calendar.get(Calendar.YEAR)
Calendar.get(Calendar.MONTH)
Calendar.get(Calendar.DATE)
Calendar.get(Calendar.HOUR_OF_DAY)
Calendar.get(Calendar.MINUTE)
Calendar.get(Calendar.SECOND)

没法返回特定格式时间, 也是头疼。所以引出SimpleDateFormat类






SimpleDateFormat类

SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。

SimpleDateFormat(String pattern)
用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。

yyyy MM dd HH mm ss

可以自己随意变成任意格式文本。作为构造时的参数。

String format(Date date)
将给定的 Date 格式化为日期/时间字符串,并将结果添加到给定的 StringBuffer。

Date parse(String text)
解析字符串的文本,生成 Date。

public class www {
    public static void main(String[] args) throws ParseException {
        Date date = new Date(); //获取当前的系统时间。
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日   HH:mm:ss") ;  
        String time = dateFormat.format(date);  //可以把日期转换转指定格式的字符串
        System.out.println("当前的系统时间:"+ time);

        String birthday = "2000年12月26日   11:29:08";
        Date date2 = dateFormat.parse(birthday);  //注意: 指定的字符串格式必须要与SimpleDateFormat的模式要一致。
        System.out.println(date2);

    }
}

当前的系统时间:2016年08月02日 15:02:23
Tue Dec 26 11:29:08 CST 2000

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值