今日内容:
- String 类
- static 关键字
- Arrays 类
- Math 类
- 三大特性---继承
- 方法重写
- super关键字
- this关键字
- 抽象类
String类
创建String常见3+1方式
1.public String() 空白字符串,不包含任何内容
2.public String(char[] array) 根据字符数组内容,来创建对应字符串
3.public String(byte[] array) 根据字节数组内容,来创建对应字符串
三种构造方法:即使内容一样,但是因为new了所以都会产生新的内存地址,在堆内存之中,
char[] array={'A','B','C'};
String str=new String(array);
解释:此三种内存都需要,提前创造一个例如char[] array={'A','B','C'};传入第二种方式char[] 会产生一个堆中的内存,第二种方式的String也会产生一个堆中的内存放char[],所以我们查找是通过String内存找到char[]内存,从而输出。其他的同理:
一种直接创建:
String str="值"; 直接创建,直接用双引号,系统也会认定为字符串对象
String str1="aaa";
String str2="aaa";
//str1和str2的内存地址一样,都在堆内存中的字符串常量池
解释:这种创建方式,创建的字符串数据是直接存放在堆内存中的字符串常量池内,不同的是这个如果字符串一样,那么他们的内存地址是完全一样的,不会创建新的内存。
备注:关于==号
1.字符串之间用==判断,判断的是字符串的内存地址
2.基本数据类型用双==直接判断数值
String常用方法
判断功能:2个
public boolean equals(Object o) 将次字符串与指定对象进行比较,参数不能为null,进行内存地址和内容双重判断,符合其中一个就返回true.如果比较双方是一个常量和一个变量,建议把常量放在字符串的前面 常量.equals(变量);不建议----》变量.equals(常量)。因为此时如果变量为null就会产生空指针异常,null在前面才会空指针
public boolean equalsIgnoreCase(String anotherString) 将此字符串与指定对象比较,忽略英文字母大小写,进行内存地址和内容双重判断,符合其中一个就返回true
nstanceof:类型判断,判断是否属于同一数据类型
获取功能
1.public int length; 返回字符串长度
2.public String concat(String str): 将指定字符串连接到该字符串末尾
3.public char charAt(int index) 返回索引位置的char值
4.public int indexOf(String str): 返回·指定的字符串第一次出现在该字符串的索引值
5.public String substring(int beginindex): 返回一个子字符串,从beginindex开始,截取到该字符串末尾
6.public String substring(int beginindex,int endindex); 截取从beginindex到endindex中间的索引,[beginindex,endindex). endindex<=String.length;注意截取出来的字符串对象是一个新的字符串对象,重新开辟内存在堆里面,和字符串常量池里面的字符串内存地址不相等
转换功能:
1.public char[] toCharArray(): 将此字符串转换为新的字符数组。
2.public byte[] getBytes(); 使用平台默认字符集,将该字符串编码转换为新的字节数组
3.public String replace(CharSequence oldStringt,CharSequence newString): 将所有出现的老的字符串替换为新的字符串,返回的是新的字符串。
备注:CharSequence是一个接口,也是应用数据类型,意思就是可以接受字符串参数数据类型
练习1:定义一个方法,把数组{1,2,3,4}按照指定格式拼接称为一个字符串
格式:[1#2#3#4] Test1
练习2:统计字符个数,键盘录入一个字符串,统计字符串中大小写字母以及数字的个数Test2
Static关键字
=概述:
static关键字的使用可以修饰成员变量和成员方法,被修饰之后就属于静态的,属于类的,不单单是属于某个对象的,就是说不再通过创建对象来调用类中的静态成员信息
定义和使用格式:
类变量
当成员变量被static修饰,该变量称为【类变量】,类变量,该类的每一个对象都可以【共享】同一个类变量的值,热河对象都可以更改类变量,类变量灵活度更高,
ststic 数据类型 变量名;
static int roomId;
静态方法
当成员方法被static修饰,称为类方法,类方法通过类名直接调用,不用创建对象称之为【静态方法】 类名.方法名()
修饰符 static 返回值类型 方法名(参数列表){
//方法体内容
}
public static String arrayToString(int[] arr){
//方法体
//必须有return
}
静态方法调用注意事项
1.静态方法可以直接访问静态变量和静态方法,
2.静态方法【不能直接访问】成员变量和成员方法,反之成员方法可以直接访问静态变量和静态方法
3.静态方法不能使用this关键字
调用格式:
//静态方法一般建议使用类调用,可以使用对象调用,但是程序会出现警告信息,不建议使用
类名.静态方法名(参数列表);
类名.静态类变量名;
备注:不能直接访问的,都通过实例化对象调用
静态原理解释:静态方法在栈空间,静态变量在除了栈之外的jvm空间,
Static操作注意事项:
1.static修饰的内容,随着类的加载而加载,只会加载一次。
2.存储于一块固定的内存区域(静态域),所以被类直接调用
3.他优先于对象,对象未存在,static修饰的信息早就存在了,使用可以被类的所有对象共享。
静态代码块
什么是静态代码块:被static修饰的代码块 { } ,定义在成员变量位置。
1.位置:类中方法外,方法里面没有
=2.执行:随着类的加载而加载,而且之只会加载一次,优先于main方法和构造方法加载
静态代码块格式
public class className{
//静态代码块不能写在方法里面
static{
//多条执行语句
}
public static void main(String[] args){
}
}
例如:
//斗地主,三个成员
public class Game{
private static int number; //玩家数量
private static ArrayList<Menber> list; //玩家们 Member类,成员类
stctic{ //提前初始化信息,下面的就不需要了,但是上面的变量必须是静态的成员变量
number=3;
numbers=new ArrayList<>();
//添加玩家
list.add("小刘");
list.add("小张");
list.add("小花");
}
}
public class TestGame{
public static void main(String[] args){
/*
ArrayList<String> list=new ArrayList<>();
list.add("小刘");
list.add("小张");
list.add("小花");
*/
}
}
备注:static可以修饰成员变量成员方法代码块,如果不想在不创建对象的的情况下去调用成员变量和成员方法,可以定义成静态变量和静态方法,静态代码块通常作用静态变量和静态方法