Java基础笔记八
常用实用类
一、String类
-
String类在java.lang包中(lang包被默认引入);
-
String类是final类,不可以继承
-
String类的对象是不可改变的Unicode字符序列;
-
String常量也是对象,也有自己的引用和实体。
-
Java把用户程序中的String常量放入常量池;
池化思想,把需要共享的数据放在池中,用一个存储区域来存放一些公共资源以减少存储空间的开销。
1.构造方法
1、public String() 无参构造方法,用来创建空字符串的String对象。
String str1 = new String();
2、public String(String value) 用已知的字符串value创建一个String对象。
String str2 = new String("abcd");
String str3 = new String(str2);
3、public String(char[] value) 用字符数组value创建一个String对象。
char[] value = {'a','b','c','d'};
String str4 = new String(value);
//相当于String str4 = new String("abcd");
4、public String(char chars[], int startIndex, int numChars)
用字符数组chars的startIndex开始的numChars个字符创建一个String对象。
char[] value = {'a','b','c','d'};
String str5 = new String(value, 1, 2);
//相当于String str5 = new String("bc");
5、public String(byte[] values) 用字节数组values创建一个String对象。
byte[] strb = new byte[]{65,66};
String str6 = new String(strb);//相当于String str6 = new String("AB");
2.String类对象
- String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。例如:
String s = "Hello"; s = s + " world!";

如果经常对字符串进行各种各样的修改,或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。
对于字符串常量而言,如果内容相同,那么java就认为他们代表同一个String对象,而用关键字调用new调用构造器,总是会创建一个新的对象,无论内容是否相同。
String s=new String(“xyz“) 创建了几个对象(详细解析)_string s=new string("xyz")创建了几个对象-CSDN博客
3.String类的常用方法
1.基本方法
①length()
②equals()
③startsWith()、endsWith()
④compareTo()
⑤contains()
⑥indexOf()、lastIndexOf()
⑦substring()
⑧trim()
2.其他方法
①getChars()
②matches()
③replaceAll()
④split()
4.toString()方法
-
toString()方法Object类的方法,各子类可根据需要重写;
-
这个方法是将对象转变成字符串的方法,因此在字符串连接对象时(即某个类的实例对象),将调用这个对象的toString()方法将对象转变为字符串,再执行连接操作。
public class Apple {
private String name;
public String getName() {
return name;
}
public void setName(String name) { // 设置姓名的方法
this.name = name;
}
public String toString() {
String str="我是一个苹果,我的名字叫"+name;
return str;
}
}
二、equals与==的区别
§==
== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是指针。
1、比较的是操作符两端的操作数是否是同一个对象。
2、两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。
3、比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,
如:int a=10; 与 long b=10L ;与 double c=10.0; 都是相同的(为true),因为他们都指向地址为10的堆。
§equals
equals用来比较的是两个对象的内容是否相等
注:由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,Object中的equals方法返回的是==的判断。
三、String 、StringBuffer、StringBuilder
| String | StringBuffer |
|---|---|
| 表示内容不可改变的字符串 | 表示内容可以被修改的字符串 |
| 重写了equals()方法 | 并没有重写equals()方法,仍然比较的是引用值 |
| 使用“+”增加字符 增加字符后是另一个字符串常量,原来的字符串不变 | 使用append()方法增加字符 增加字符后,原来的字符串变化 |
| 代码效率很低 | 代码效率很高 |
注意:StringBuffer没有覆盖equals方法和hashCode方法,所以,将StringBuffer对象存储进Java集合类中时会出现问题,需要转换为String
§ StringBuffer和StringBuilder类都表示内容可以被修改的字符串;
§ StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
§由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
§如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用StringBuilder。
§ 如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用,那么最好用StringBuffer。
四、length属性和length方法
§问题:数组有没有length() 方法? String类有没有length() 方法?
-
数组没有length() 方法,有length的属性,表示数组的长度。
-
String有length() 方法,可以求字符串长度。
五、正则表达式
-
正则表达式是一种描述字符串集的方法,是以字符串集合中各字符串的共有特征为依据的。正则表达式定义了字符串的模式。
-
比如,"\dcat"中的\d,代表0到9中的任何一个,"0cat","1cat","2cat",…,"9cat"都是和正则表达式"\dcat"匹配的字符序列。
-
正则表达式可以用来搜索、编辑或处理文本。
-
正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
§在Java中,正则表达式位于java.util.regex包中,通常与Pattern、Matcher类一起使用
{{uploading-image-358920.png(uploading...)}}
§在正则表达式中可以用方括号括起来若干个字符表示一个元字符,该元字符代表方括号中的任何一个字符。
-
[abc]:代表a、b、c中的任何一个。
-
[^abc] :代表除了a、b、c以外的任何一个字符。
-
[a-zA-Z] :代表英文字母(包括大写和小写)中的任何一个。
-
[a-d] :代表a、b、c、d中的任何一个。
§另外,方括号里允许嵌套方括号,可以进行并、交、差运算。
-
[a-d[m-p]] :代表a ~ d或m ~ p中的任何字符(并)
-
[a-z&&[def]] :代表d、e或f中的任何一个(交)。
-
[a-f&&[^ bc ] ]:代表a、d、e、f(差)。
{{uploading-image-206064.png(uploading...)}}
六、Object类
-
Object类是所有类、数组、枚举类的父类
-
Java允许把任何类型的对象赋给Object类型的变量。
-
当定义一个类时没有使用extends关键字为它显式指定父类,则该类默认继承Object父类。
-
因为所有的Java类都是Object类的子类,所以任何Java对象都可以调用Object类的方法
Object类常用方法
-
boolean equals(Object obj):判断指定对象与该对象是否相等
-
protected void finalize():当系统中没有引用变量引用到该对象时,垃圾回收器调用此方法来清理该对象的资源
-
String toString():返回该对象的字符串表示
-
int hashCode():返回该对象的hashCode值
Object类还提供了wait()、notify()、notifyAll()几个方法,通过这几个方法可以控制线程的暂停和运行。
七、System类
System类定义了一些与系统相关的属性和方法,它所提供的属性和方法都是静态的,因此,想要引用这些属性和方法,直接使用System类调用即可。
{{uploading-image-812577.png(uploading...)}}
1.getProperties()方法
System类的getProperties()方法用于获取当前系统的全部属性,该方法会返回一个Properties对象,其中封装了系统的所有属性,这些属性是以键值对形式存在的。
2.currentTimeMillis()
currentTimeMillis()方法返回一个long类型的值,该值表示当前时间与1970年1月1日0点0分0秒之间的时间差,单位是毫秒,通常也将该值称作时间戳。
long startTime = System.currentTimeMillis(); //获取开始时间
doSomething(); //测试的代码段
long endTime = System.currentTimeMillis(); //获取结束时间
System.out.println(“程序运行时间:” + (endTime - startTime) + “ms”); //输出程序运行时间(毫秒)

浙公网安备 33010602011771号