本人纯小白,只是将CSDN当作一个记笔记平台,如有大佬发现错误,请及时告知,万分感谢!!
-------------------------------------------------------------------------------------------------------------------------------
前言:本次学习了,内部类,匿名内部类,object,字符串,String重写equals,StringBuffer,
StringBuilder,其中因该理解String和StringBuffer,StringBuilder三者的区别;
一,内部类;
内部类就是在一个类里面在重新建一个类,两个类可以相互调用,但要注意的是在相互调用其属性方法时,都要额外创建一个方法,然后再该方法中创建你想要调用的类的对象,然后在调用方法;
需要注意的是,在测试类中想要调用内部类对象时,应在=右边先new一个外部类.在new一个内部类才能调用;
2;匿名内部类;这个作用是在你需要创建一个抽象类或者接口时,有的方法只需要用到一次,那么就可以直接在测试类中使用这个匿名内部类了;
格式:接口 变量 = new 接口() {
};
二,object
object是所有子类中的一个根类
-
toString()
返回该对象的字符串表示。通常toString方法会返回一个“文本方式表示”此对象的字符串。结果应该是一个简明易懂的信息表达式。建议所有的子类都重写此方法。
-
hashCode()
由Object类定义的hashCode方法给不同的对象返回不同的整数
-
finalize()
用于垃圾回收,我们不用手动去调用,由JVM来调用,当垃圾回收器确定不存在该对象的引用时,由对象的垃圾回收器调用此方法。
-
equals()
比较两个对象地址的值。自定义类重写equals用来比较这两个对象是否相等。
==用于比较基础数据类型时是比较值的大小;
==用于比较引用数据类型时是比较地址值;
三,字符串;
‘’代表单字符;“”代表字符串
String字符串也是引用数据类型;
声明字符串有两种方法
1,是直接声明;String str1=“bsajkghdikahdkla”;
2,是使用对象来声明;String str2=new String(“kjdhaioljdpolwajd”);
两者最主要的区别还是在与存储空间的不同;
第一种直接声明的方法会在堆里的常量池中寻找,如果没有就在常量池中创建一个对应的字符串;
并将该字符串的位置复制给栈空间;
第二种则是在堆空间中创建一个new对象,然后常量池中的地址复制给堆空间所创建的对象空间,而对象空间在堆里的位置在通过赋值给栈里的存储位置,所以第二种栈空间中存放的是堆中对象的地址;
2,字符串的一些使用方法可以看课件;
2.1其中分割字符串可以采用split方法,需要注意的是需要再创建一个数组用于接收分割后的字符串;
String str1="jakdhalhaoliajda"; String[] str2=str1.split("ha"); //通过循环将被裁剪后的数组打印出来 for (int i = 0; i <str2.length ; i++) { System.out.println(str2[i]); }
2.2替换数组也有点不同;
String str1="jakdhalhaoliajda"; //将字符串中的j全部换成了k; System.out.println(str1.replace("j","k"));
2.3涉及想要集中调换几个字符时可以采用以下方法
String str3="6487161864981"; System.out.println( str3.replace(str3.substring(3,7),"****"));
四,String重写equals;
经过String重写equals以后,比较的就不再是地址了,而是直接比较字符串里的东西;
五,
StringBuffer
在输出时应该要创建一个对象然后在对象的那个框里进行赋值;
进行拼接时可以使用appen进行拼接
反转字符串时可以使用创建StringBuffer对象,然后使用stringbuffer中的reverse方法就可以实现字符串反转
StringBuffer是线程安全的,创建后值可以变化,可以添加、修改、删除值,但不会改变地址,不会产生新的字符串。
线程安全有利有弊,它提高了安全性,但是牺牲了性能。
六,
StringBuilder
非线程安全的可变字符串。
用法和StringBuffer一样,只是StringBuilder是非线程安全的。