第三周阶段性小结——Object对象、String类、StringBuffer、StringBuilder、System、Runtime、Date
一、Object对象
1、object 类的常用方法:
Object类是所有类的父类,java中所有的类都直接或间接地继承自Object类,即使没有显示的使用extends关键字指定Object为父类,系统也会自动继承该类。所以说,Object类是整个Java语音继承树的唯一根;根据继承的特性,任何Java对象都可以调用Object类的方法。
toString();
Equals(Object obj);
hashCode();
1.1 toString()
返回该对象的字符串表示。
1.1.1 toString()方法的作用
toString() 返回对象的描述信息 java.lang.Object@de6ced 类名@哈希码值的十六进制形式。
直接输入一个对象的时候,会调用对象的toString方法。
在程序中,重写toString之后,我们直接输出一个对象的时候,就会输出符合我们所需求的格式数据。
重写前:
重写后:
1.2equals()
用于比较两个对象的内存地址,判断两个对象是否为同一个对象。
可以对equals()方法进行重写,比如,相比较两个人的身份证是否一致。
Equals()方法在集合上用的比较多。
注意!!!!!
1equals()方法的形参必须是Objec类型,不能是其他类型。
2在比较两个字符串的内容是否相等时,常常用的equals()方法进行比较。其实equals()方法来自Object类,而在String类中对equals()方法进行了类重写,以满足比较字符串的内容是否相等,实际在Object类本身的equals方法是比较的内存!
示例如下:
1.3hashCode()
返回该对象的哈希码值(可以把哈希码理解成内存地址)
Java中的规范,一般我们重写了一个类的equals方法,我们都会重写他的hash
Code方法。
hashCode() 返回该对象的哈希码值: 采用操作系统底层实现的哈希算法。 同一个对象的哈希码值是唯一的。
注意:在java中对equals()方法和hashCode()方法有以下约定:
1在程序执行期间,如果一个对象的hashCode()方法作比较所用到的信息没有被修改,则该对象多次调用的hashCode()方法返回的结果值必须是同一整数。
2 如果两个对象根据equals()方法结果值是true,则调用这两个对象中任一对象的hashCode()方法必须返回同一个整数。
3如果两个对象根据equals()方法结果值为false,则调用这两个对象中任一个对象的hashCode()方法,不要求产生不同的整数结果。但如果不同则可以提高散列表的性能。也就是说,这两个对象的hashCode值相同,不代表这两个对象相等。
2、java中查看源代码:
方式1:按住ctrl键,单击你需要查看的源代码。
方式2:把光标移动到你需要查看的代码处,按下F3
3、查看源代码的好处:
1 查看源代码可以了解别人是如何写出这个技术的,让我们了解的更加深入。
2 吸收大牛的思想。
3 看源代码最忌讳的就是不要每行都看懂,能看个大概猜出意思就可以。
通过查看源代码明白的原理如下:
二、字符串入门(String)
1一段代码引发的故事:
在上述字符串中,“==”用于比较 引用数据类型的时候,比较的是两个对象的内存地址,equals方法默认比较也是两个对象的内存地址。
2.代码的内存分析:
String str = “hello”这种方式创建字符串的时候,jvm首先会检查 字符串常量池中是否存在该字符串的对象,如果已经存在,那么就不会在字符串常量池中创建了,直接返回该字符串再字符串常量池中内存地址,如果该字符串还不存在字符串常量池中,那么就会在字符串常量池中先创建该字符串的对象,然后在返回。
new String (“hello”)这种方式创建字符串对象的时候,jvm首先先会检查字符串常量池中是否存在“hello”的字符串,如果已经存在,则不会在字符串常量池中创建了,如果还没有存在,那么就会在字符串常量池中创建“hello”字符串对象,然后还会去到堆内存中再创建一份字符串的对象,把字符串常量池中的“hello”字符串内容copy到对内存中的字符串对象,然后返回堆内存中字符串对象的内存地址。其内存图如下
其中str3.equals(str4)ture,是因为String类中,重写了obj的方法,返回的是两个对象打的内容。
3String类重写equals();
大致是这样的,首先将两个字符串转换成两个字符数组,然后将字符串写入到字符数组中,然后接着比较两个字符数据的每个值是否一样。
String 类重写Object的equals方法,比较的是两个字符串的内容是否一致。
三、字符串的方法:(String)
1构造方法:
1.1
String() 创建一个空内容的字符串对象。
1.2
String(btye[] bytes)使用一个自己数组构建一个字符串对象。
1.3
String(byte[] byes, int offset, int length)
bytes:要解码的数组。
Offset:指定从数组中哪个索引值开始解码。
Length:要解码多少个元素。
使用一个字节数组构建一个字符串对象,指定开始解码的索引值和解码的个数。
1.4
String(char[] valus)使用一个字符数组,构建一个字符串。
1.5
String(int[] codePoints,int offset,int count)
和上述字节数组功能相同。
1.6
String(String original)
构造方法总结:
使用字节数组或者字符数组都可以构建一个字符串对象。
2获取类方法
int length() 获取字符串的长度
char charAt(int index) 获取特定位置的字符 (角标越界)
int indexOf(String str) 获取特定字符的位置(overload)
int lastIndexOf(int ch) 获取最后一个字符的位置
使用方法如下:
3判断类方法:
boolean endsWith(String str) 是否以指定字符结束
boolean isEmpty()是否长度为0 如:“” null V1.6
boolean contains(CharSequences) 是否包含指定序列 应用:搜索
boolean equals(Object anObject) 是否相等
boolean equalsIgnoreCase(String anotherString) 忽略大小写是否相等
4转换方法
String(char[] value) 将字符数组转换为字符串
String(char[] value, int offset, int count)
Static String valueOf(char[] data)
static String valueOf(char[] data, int offset, int count)
char[] toCharArray() 将字符串转换为字符数组
小结:字节数组与字符数组、字符串他们三者之间是可以相互转换的。
5其他方法
String replace(char oldChar, char newChar) 替换
String[] split(String regex) 切割
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)截取字串
String toUpperCase() 转大写
String toLowerCase() 转小写
String trim() 去除空格
四、StringBuffer类(字符串缓冲类)
1、引入StringBuffer
字符串的特点:因为字符串是常量,字符串一旦创建,他的值不能更改。字符串的内容一旦发生了变化,那么马上会创建一个新的对象。
所以:字符串的内容不适宜频繁修改,因为一旦修改,马上就会创建一个新的对象,如果频繁修改,在内存中将创建多个对象。如果需要频繁修改字符串内容,建议使用字符串缓冲类StringBuffer.
StringBuffer其实就是一个存储字符的容器,可以方便的对字符进行增删查改。
容器具备的行为:增加 、删除、修改、查看、判断。
2、StringBuffer的构造方法
2.1StringBuffer()
构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符。
使用Stringbuffer无参的构造函数创建一个对象时,默认的初始容量是多少?如果长度不够使用了,自动增长多少倍?
StringBuffer 底层是依赖了一个字符数组才能存储字符数据的,该字符串默认的容量是16,如果字符数组的长度不够使用了,会自动增长1倍。
3、增加
append();添加数据的方法。
StringBuffer("jack") 在创建对象的时候赋值
append() 在缓冲区的尾部添加新的文本对象
insert() 在指定的下标位置添加新的文本对象
4、删除
5、修改
replace(int start int endString str) 使用给定 String 中的字符替换此序列的子字符串中的字符。该子字符串从指定的 start 处开始,一直到索引 end - 1 处的字符
setCharAt(int index char ch) 指定索引位置替换一个字符
6、查看
toString() 返回这个容器的字符串
indexOf(String str) 返回第一次出现的指定子字符串在该字符串中的索引。
substring(int start) 从开始的位置开始截取字符串。
7、反序
reverse() 把字符串反序输出。
五、StringBuilder
StringBuilder 是JDK1.5之后提出的,线程不安全,但是效率要高。用法与StringBuffer类似。
六、System
System类主要用于获取系统属性的。
1System常用的方法:
System类常用的方法:
1.1 arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 一般
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
1.2currentTimeMillis() 获取当前系统系统。 重点
1.3exit(int status) 退出jvm 如果参数是0表示正常退出jvm,非0表示异常退出jvm。 一般
1.4gc() 建议jvm赶快启动垃圾回收器回收垃圾。
finalize() 如果一个对象被垃圾回收 器回收的时候,会先调用对象的finalize()方法。
1.5getenv(String name) 根据环境变量的名字获取环境变量。
1.6getProperty(key) 确定当前的系统属性。
七、Runtime
该类代表了应用程序的运行环境。
getRuntime() 返回当前应用程序的运行环境对象。
exec(String command) 根据指定的路径执行对应的可执行文件。
freeMemory() 返回 Java 虚拟机中的空闲内存量。 以字节为单位
maxMemory() 返回 Java 虚拟机试图使用的最大内存量。
totalMemory() 返回 Java 虚拟机中的内存总量
八、日期类 Date
1getYear
在eclipse中,有横线穿过的,表示该方法已经过时的方法;jdk中为什么没有删除呢,是因为很早以前有很多人使用这个方法,可能系统还在运行,所有无法进行删除。目前该方法已经被Calender 的get 方法所取代。
2日期格式化类 SimpleDateFormat
2.1format()可以把日期转换指定格式的字符串
2.2parse()把一个字符串转换成对应的日期
九、Match类
主要提供了很多的数学公式给我们使用
1.match类的主要方法
abs(double a) 获取绝对值
ceil(double a) 向上取整
floor(double a) 向下取整
round(float a) 四舍五入
random() 产生一个随机数. 大于等于 0.0 且小于 1.0 的伪随机 double 值
十、Random类
1生成1-10之间的随机数
2.实例应用—验证码
posted on 2017-09-21 17:42 7不积跬步无以至千里7 阅读(267) 评论(0) 编辑 收藏 举报