一、String类
● 字符串比较:== 和 equals()的区别?
·· ==:比较的是两个字符串内存地址的数值是否相同,属于数值比较;
·· equals(): 比较的是两个字符串的内容,属于内容比较
● string类的两种实例化方法的区别?
··直接赋值: 在每一个运行的JVM低层存在一个字符串的对象池(方法区的运行时常量池),直接赋值会将字符串的内容放入到池中,以供其他继续使用直接赋值方法的String对象使用,如果新声明的字符串内容不再池之中,则会开辟一个新的,继续放到池中,以供下次使用;String str = "hello" ----实际上开辟了两块空间
··构造方法实例化:开辟两块堆内存空间,一块成为垃圾,不能入池(除非手动intern())
public class StringDemo {
public static void main(String args[]) {
String str1 = new String("Hello").intern();
String str2 = "Hello";// 入池
String str3 = "Hello";// 使用池对象
System.out.println(str1 == str2);// true
System.out.println(str1 == str3);// true
System.out.println(str2 == str3);// true
}
}
● String 、StringBuffer、StringBuilder的区别?
String s = "abcd";
s = s+1;
System.out.print(s);// result : abcd1
上述代码解释:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉
StringBuilder与StringBuffer,前者线程非安全,后者线程安全
● String类的常用方法:
//字符串与字符:
public String(char[] value) ---将全部字符数组转变为字符串
public char[] toCharArray()---将字符串转换为字符串数组
//字符串比较:
public boolean equals(String anObject)
public boolean equalsIgnoreCase(StringanotherString)
public int compareTo(String anotherString)---比较两个字符串大小(1,0,-1)
//字符串查找:
public boolean contains(String s)
public int indexOf(String str)
public int indexOf(String str, int fromIndex)
//字符串替换:
public String replaceAll(String regex, String replacement)
public String replaceFirst(String regex, String replacement)
//字符串截取:
public String substring(int beginIndex)---从指定位置开始截取到结尾
public String substring(int beginIndex, int endIndex) ---截取指定范围的内容
//字符串拆分:
public String[] split(String regex)
public String[] split(String regex, int limit)
二、this关键字
⑴、this关键字用于区分局部变量和成员变量,比如在方法的参数中有名称与成员变量相同的变量,那么在该方法进行赋值等其他操作运算的时候,成员变量必须使用this来作为前缀,以此作为区分
⑵、类的方法中如果有对成员变量的操作,那么该方法会持有this兑现的引用地址,这样能让方法知道,它被哪个对象调用了
三、static关键字
⑴、如果类中的某个方法并没有涉及到任何成员变量,那么这个方法就没有实例化的必要,可以使用static修饰。
⑵、静态方法只能访问类中的其他静态方法,或者静态成员变量,而不能直接访问非静态方法和非静态的成员变量。
⑶、静态方法不能出现this关键字和super关键字,因为持有对象的引用没有意义的
⑸、主函数必须是静态的
⑹、静态成员变量即被static修饰的成员变量,可以直接通过类名.方法名直接进行调用,而且同类的多个对象应该是保有一份相同的静态成员变量,静态成员变量优于对象的存在,不会因为一个对象对静态成员变量的修改而导致其他对象的静态成员变量的修改,并且静态成员随着类的加载而加载,而不是对象,会随着类的消失而消失,并且存储在方法区的静态代码区中
⑺、静态代码块是为了完成某个共同的初始化类操作而存在的,随着类的加载而执行,并且只加载一次
代码块只会随着对象的加载而加载,每次创建一次对象,就会加载一次
且静态代码块优先于构造块和主方法执行,不管有多少个实例化对象产生,静态块都只调用一次
四、final、finally、finalize
1.final:如果一个类被final修饰,意味着该类不能派生出新的子类,不能作为父类被继承。因此一个类不能被声明为abstract,又被声明为final。将变量或方法声明为final。可以保证他们在使用的时候不被改变。其初始化可以在两个地方:一是其定义的地方,也就是在final变量在定义的时候就对其赋值;二是在构造函数中。这两个地方只能选其中的一个,要么在定义的时候给值,要么在构造函数中给值。被声明为final的方法也只能使用,不能重写。
2.finally:在异常处理的时候,提供finally块来执行任何的清除操作。如果抛出一个异常,那么相匹配的catch字句就会执行,然后控制就会进入finally块,前提是有finally块。
3.finalize:finalize是方法名,java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是在垃圾收集器确认一个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此,所有的类都继承了它。子类覆盖finalize()方法已整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
网友评论