一.静态资源访问
1.通过类型名访问
注意点:
静态场景下不能调用成员资源
补充:
构造快:在生成对象的时候调用,并且在构造器之前
{}
静态块:在类信息被加载的时候调用
static{}
类信息的加载时机:当首次使用某个类的类信息时加载
示例代码:
public class HighTrain{
{
System.out.println("进入了构造块");
id = "G6003";
}
static{
System.out.println("进入了静态块");
}
public HighTrain(String id){
System.out.println("进入了构造器");
this.id = id;
}
public HighTrain(){}
String id;//每辆车的编号是不一样的
static int coachCount = 8;//属于高铁类型都通用的特性
public String hello(){
return "欢迎乘坐"+id+"次列车";
}
//工具方法,计算出发点到目的地的距离,返回字符串
public static String getAreaInfo(String begin,String end){
//System.out.println(id);
return begin+"到"+end+"一共有n公里,请各位乘客做好准备";
}
}
class Test{
public static void main(String[] args){
//HighTrain ht = new HighTrain();
//int count = HighTrain.coachCount;
//HighTrain.getAreaInfo("上海","成都");
HighTrain ht = new HighTrain("G1007");
HighTrain ht1 = new HighTrain();
System.out.println(ht1.id);
}
}
二.字符串比较,及操作
1.字符串是字符不可变序列
凡是需要改变字符串内容的方法都会返回一个新字符串
2.equals:判断两个字符串对象的内容是否相同
==:判断两个变量内存储的值是否相同
当==作用引用类型的时候,是判断是否指向同一个对象
示例代码:
public class StringApiStu{
static String src = "a.b.c.EabDF123我真帅";
public static void main(String[] args){
demo13();
}
//charAt
public static void demo1(){
char ch = src.charAt(3);
System.out.println(ch);
}
//concat(String str)
public static void demo2(){
String s = src.concat(",你真坏");
//src = "123";
System.out.println(s);
}
//contains(CharSequence s)
public static void demo3(){
boolean b = src.contains("bcE");
System.out.println(b);
}
//endsWith(String suffix),startsWith
public static void demo4(){
boolean b = src.endsWith("我真帅");
b = src.startsWith("a");
System.out.println(b);
}
//equals(Object anObject) equalsIgnoreCase(String anotherString)忽略大小写比较
public static void demo5(){
int a = 123;
int b = 123;
System.out.println(a==b);
String s = "123";
String s2 = new String("123");
String s3 = "123";
System.out.println("s="+s+",s2="+s2);
System.out.println(s==s2);
System.out.println(s.equals(s2));
System.out.println(s==s3);
}
//indexOf(int ch) indexOf(int ch,int fromIndex) lastIndexOf(int ch)
public static void demo6(){
int index = src.indexOf("ab",1);
System.out.println(index);
}
//isEmpty()
public static void demo7(){
String s = " ";//空字符串
String s1 = null;//空指针
boolean b = s1.isEmpty();
System.out.println(b);
}
//length()
public static void demo8(){
int len = src.length();
System.out.println(len);
//遍历字符串
for(int i = 0;i < len;i++){
char ch = src.charAt(i);
System.out.println(ch);
}
}
//replace(char oldChar, char newChar) replaceFirst(String regex, String replacement)
public static void demo9(){
String s = src.replaceFirst("\\.","O");
System.out.println(s);
}
//substring(int beginIndex) substring(int beginIndex,int endIndex)
public static void demo10(){
String s = src.substring(2,5);//[2,5)
System.out.println(s);
}
//toLowerCase() toUpperCase()
public static void demo11(){
String s = src.toLowerCase();
System.out.println(s);
String s1 = src.toUpperCase();
System.out.println(s1);
}
//trim() 去除字符串前后的空格
public static void demo12(){
String s = " abc def ";
System.out.println("--"+s+"---");
s = s.trim();
System.out.println("--"+s+"---");
}
//valueOf(char c)
public static void demo13(){
String s = String.valueOf(true);
System.out.println(s);
}
}
三.静态常量池
字符串常量池:
意义:节约时间和内存
让需要使用同一个内容的字符串对象的引用指向同一个对象
什么时候使用常量池:
通过字面值赋值的时候使用常量池
示例代码:
public class StringPool{
public static void main(String[] args){
String s = "123";
String s1 = "123";
String s2 = new String("123");
String s3 = new String(s);
String s4 = "1"+"23";
String s5 = new String("1")+"23";
String s6 = s+"";
String s7 = new String(s)+"";
System.out.println(s==s1);//true
System.out.println(s==s2);//false
System.out.println(s==s3);//false
System.out.println(s==s4);//true
System.out.println(s==s5);//false
System.out.println(s==s6);//false
System.out.println(s==s7);//false
//------------
String str1 = "abc";
String str = new String("abc");
}
}