今天开始学java(十二):又是String关键字还有陌生的static

String

java.lang.String类代表字符串类
API当中说:java程序中所有的字符串面值,都作为此类的实例实现
其实就是说:程序当中所有的双引号字符串,都是string类对象,就算没有new,也照样是。

String字符串的特点:
1、字符串的内容永不可变,是常亮,创建吼不能更改
2、正是因为字符串不可改变,所以字符串可以共享使用
3、字符串效果上相当于char[]字符数组,但是底层原理是byte[]字节数组。

使用String 创建字符串的常见4种方式:
三种构造方法:
public String():创建一个空白字符串,不含有任何内容
public String(char[] array):根据字符数组的内容,来创建对应的字符串。
public String(byte[] array):根据字节数组的内容,来创建对应的字符串
一种直接创建:String str = “weqe”,右边直接用双引号

注意:直接写上双引号,就是字符串对象。

字符串常量池:程序当中直接写上的双引号字符串,就是字符串常量池
对于基本类型来说,==是进行数值的比较
对于引用类型来说,==是进行地址值的比较
==是进行对象的地址只比较,如果确实需要字符串的内容比较,可以使用两个方法:
public boolean equals(Object obj):参数是可以是任何对象,只有参数是一个字符串并且内容相同的才给true,否则返回flase
注意:
1、任何对象都能用object进行接收。
2、equals方法具有对称性,也就是a.equals(b)和b.equals(a)是一样的
3、如果比较对方一个常量一个变量,不推荐吧常量字符串写在前面,例如:
推荐:“abc”.equals(str) 不推荐:str.equals("abc)
因为如果变量为null,在调用方法时,会造成空指针异常(NullPointerException)
使用equalsIgnoreCase可以忽略大小写进行比较:

    public static void main(String[] args) {
       String str1 = "abc";
       String str2 = "asd";
       char[] charArray = {'a','b','c'};
       String str3 = new String(charArray);
       System.out.println(str1==str2);
       System.out.println(str1==str3);
       System.out.println(str3.equals(str3));
  • public int length():获取字符串当中含有的字符个数,拿到字符串的长度
  • public String concat(String str)将当前字符串和参数字符串拼接成为返回值新的字符串
  • public char charAt(int index)获取指定索引位置的单个字符,所有的索引都从0开始
  • public int indexOf(String str)查到参数字符串在本字符串中首次出现的位置,如果没有,返回-1
  • public String[] split(String regex)按照参数的规则,将字符串分割成几个部分

static

如果一个成员变量使用了static关键字,那么这个变量不再属于自己,而是属于所在的类,多个对象共享同一份数据
一旦使用static修饰成员方法,那么这就成为了静态方法,静态方法不属于对象,而是属于类
如果没有static关键字,那么必须首先创建对象,然后红果对象才能使用它
如果有了static关键字,那么不需要创建对象,直接可以通过类名称而使用他

无论是成员变量还是成员方法,如果有了static,都推荐使用类名称进行调用
静态变量:类名称.静态成员方法
静态方法:类名称.静态方法()

注意事项:
1、不能直接访问非静态,因为在内存当中现有的静态内容,后有的非静态内容
2、静态方法不能用this,因为this代表当前对象,通过谁调用的方法,谁就是当前对象

  • 举例说明,先创建一个类,里面写上不同的方法
public class Myclass {
    int num;//成员方法
    static int num1;//静态方法

    //成员方法
    public void method(){
        System.out.println("成员方法");
    }
    //静态方法
    public static void methodStatic(){
        System.out.println("这是一个静态方法");
            }
}
  • 再创建一个类去调用它
public class Demo02Staticmythod {
    public static void main(String[] args) {
        Myclass obj = new Myclass();
        //先弄一个对象,才能使用没有static关键字的内容;
        obj.method();
        //但对于静态方法来说,可以通过对象名进行调用,也可以直接通过类名称调用
        Myclass.methodStatic();//类名称.静态方法
        //对于本类当中的静态方法,可以省略类名称:Demo02Staticmythod.qqq()
       qqq();
        }
    public static void qqq(){
        System.out.println("11111");
    }
}
  • 静态代码块的格式:
static {
//静态代码块的内容
  }
}

特点:当第一次用到本类时,静态代码块执行唯一的一次
静态内容总是优先于非静态,所以静态代码块比构造方法先执行
静态代码块的典型用途:
用来一次性的对静态成员变量进行赋值
举个例子:
首先在一个类中创建一个静态代码块和一个构造方法

public class person {
    static{
        System.out.println("静态代码块执行");
    }
    public person(){
        System.out.println("构造方法执行");
    }
}

再首次使用该类:

    public static void main(String[] args) {
        person one = new person();
        person two = new person();
    }

这时候得到的结果只有

静态代码块执行
构造方法执行
构造方法执行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章