static string java_java String类、static关键字

String类:【重点】

String类的概述

概述:

java.lang.String类代表字符串,java程序中所有的字符串文字,如“abc”都可以看作是String类的实例.

程序当中的所有双引号字符串,都是String类的对象.(没有new,也是对象).

字符串的特点:

字符串的内容永远不可改变【重点】

正是因为字符串的内容永远不可改变,所以字符串是可以共享使用的.

字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组.

//第二点

String str1 = "abc";

String str2 = "abc";

内存当中“abc”,"abc"对象会被创建出来,而且“abc”对象只会被创建一次,内存当中只有一个“abc”对象被创建

此时str1和str2可以共享同一个“abc”对象

String str3 = new String("abc");

String str4 = new String("abc");

备注:JDK1.7之后的JVM 将【运行】时常量池从方法区区移除了,在 java堆(heap)中开辟空间用来存储运行时常量池

JDK1.8开始,取消了Java方法区(method area),取而代之的是一种元空间(metaspace)

JDK1.8中字符串常量池和运行时常量池逻辑上属于方法区,实际上存储在堆内存中.

创建String字符串的常见3+1种方式

三种构造方法

public String();创建一个空白的字符串,不包含任何内容.

public Stirng(Char[] array);根据字符数组的内容,来创建对应的字符串.

public Stirng(byte[] array);根据字节数组内容,来创建对应的字符串.

一种直接创建

String str = "abc";//右边直接用双引号

备注:直接写上双引号,系统也会认定为字符串对象.

【1.对于引用数据类型来说 == 进行的是地址值】

【2.对于基本数据类型来说,比较是数值内容】

【3.双引号直接写在字符串在常量池当中,new的不在池当中】

常用方法:【重点】

判断功能方法

public boolean equals(Object anObject);将此字符串与指定对象进行比较,(参数可以是任意值)

当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。

不但判断地址值,还进行内容判断,只要符合其中一个就返回true;

建议:如果比较双方是一个常量一个变量,推荐把常量字符串放在前面,把变量放在后面

如:"Hello".equals(str1)不建议写成:"str1".equals(Hello):防止空指针异常

public boolean equalsIgnoreCase(String anObject);将此字符串与指定的对象进行比较,不考虑大小写

获取功能

public int length();返回字符串的长度

public String concat(String str);将指定的字符串连接到该字符串的末尾

public char charAt(int index);返回指定索引处的char值 索引起始值为0

public int indexOf(String str);返回指定的子字符串第一次出现在该字符串内的索引值"连续的"(返回-1就是没有)

public String substring(int beginIndex);返回一个子字符串,从beginIndex开始截取该字符串的末尾

新的字符串 World是新的字符串对象

public String substring(int beginIndex,int endIndex);返回一个子字符串,从beginIndex区间截取该字符串

包含beginIndex索引值,不包含endIndex索引值---》[beginIndex,int endIndex)

转换功能:

public char[] toCharArray();将此字符串转换成新的字符数组

public byte[] getBytes();适用平台默认的字符集将该字符串编码转换成新的字节数组.

public String replace(CharSequence oldString,CharSequence newString);

将所有出现的老的字符串替换成新的字符串,返回是替换之后新的字符串

CharSequence意思就是可以接收字符串类型

备注:CharSequence是一个接口,也是一种引用数据类型,意思是可以接收字符串参数数据类型

static关键字

概述

static关键字的使用,可以修饰成员变量和成员方法,被修饰的成员是【属于类】的,不单单是属于某个对象的

也就是,既然是属于类的,那就不需要通过创建对象来调用类中的成员信息

定义和使用格式

类变量

当成员变量被static修饰,该变量就成为【类变量】.该类的每个对象都可以【共享】同一个类变量的值.

任何对象都可以更改类变量的值.类变量也可以不通过创建类对象的方式进行操作.通过类也可以进行操作.

//类变量不再属于对象自己,而是属于所在类,多个对象共享同一份数据

定义格式:

static 数据类型 变量名;

如:

static int roomID;

静态方法

当成员方法一旦被static关键字修饰时,该方法称为【类方法】,

类方法一般是通过类名.直接调用,而不需要单独创建对象来调用,调用方式很简单.习惯性称为【静态方法】

定义格式

修饰符 static 返回值类型 方法名(参数列表){

//方法体内容

}

如:

public static String arrayToString(int[] arr){

//方法体内容就是如何转换

//...

//必须有返回语句 return 返回值;

}

静态方法调用的注意事项

1.静态方法可以直接访问类变量和静态方法

2.静态方法【不能直接访问普通的成员变量和成员方法】,反之成员方法可以【直接访问】类变量和静态方法

3.静态方法中不能使用this关键字

调用格式

静态方法建议通过类来调用,但也可以通过对象来调用,会出现警告信息,不建议使用对象来调用

格式:

//访问类变量

类名.类变量名;

//访问静态方法

类名.静态方法名(参数);

备注:这些不能直接访问成员信息,可以间接的通过实例化对象来调用

静态原理图解

static修饰的内容:

1.是随着类的加载而加载,而且只会被加载一次

2.存储于一块固定的内存区域(静态域/区),所以可以被直接调用.

3.他优先于对象存在,所以可以被类的所有对象所共享

静态代码块

静态代码块:定义在成员的位置,被static修饰的代码块{}

1.位置:类中方法外

2.执行:随着类的加载而加载而且只会执行一次,优先于main方法和构造方法执行

格式:

public class ClassName{

static{

//执行语句 多条执行语句

//...

}

}

public static void main(String[] args){

/*static{

错误写法

}*/

}

-------------------------------------------

如:

//斗地主 需要三个成员

public class Game{

public static int number;//玩家数量

static ArrayList members;//玩家们

static{

number = 3;

menbers = new ArrayList<>();

//添加玩家

list.add("小明");

list.add("小刘");

list.add("小花");

}

}

public class TestGame{

public static void main(String[] args){

/*ArrayList list = new ArrayList<>();

list.add("小明");

list.add("小刘");

list.add("小花");*/

}

}

备注:static可以修饰成员变量,成员方法,代码块,在使用过程中,如果你不想在不创建对象的情况下去调用成员变量,

成员方法,可以定义为静态的.对于静态代码块来说,通常作用是对类中的成员变量进行初始化 ,

直接定义后初始化局限性很大  静态代码块更灵活还能写多条语句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值