String类、static关键字、Arrays类、Math类
1.字符串不变:字符串的值在创建后不能被更改(注意 是值不能被更改 因为值是存放在常量池中的
字符串改变 改变的是指向 只是指针从一个值指向了另外一个值)
String s1="abc";
s1+="d";
System.out.println(s1);
//内存中有abc abcd两个字符串常量 s1从指向abc改变为指向了abcd
2.因为String对象是不可变的,所以它们可以被共享
String s1="abc";
String s2="abc";
System.out.println(s1==s2);
//注意==比较的是地址 内存中只有一个abc对象被创建 同时被s1和s2共享
//注意 String底层就是由字符数组实现的char[]
构造方法:
public String():初始化新创建的String对象,以使其表示空字符序列
public String(char[] value):通过当前参数中的字符数组来构造新的String
public String(byte[] bytes):通过使用ASCII码字符集解码当前参数中的字节数组来构造String
//无参构造
String str=new String();
//通过字符数组构造
char[] ch={'a','b','c'};
String str2=new String(ch);
System.out.println(str2); //abc
//通过字节数组构造
byte[] bs={97,98,99};
String str3=new String(bs);
System.out.println(str3); //abc
常用方法
public boolean equals (Object anObject):将此字符串与指定对象进行比较(值比较)
public boolean equalsIgnoreCase (String anotherString):将此字符串与指定对象进行比较,忽略大小写
案例:双等(==)和equals的区别
String name="admin";
Scanner sc=new Scanner(System.in);
System.out.println("请输入用户名:");
String username=sc.next();
//if(name.equals(username)){
//注意 ==比较的是两个变量的地址 而sc.next()所输入的字符串
//实例上是这样实现的new String()的过程 弟子不一样
if(name==username){
System.out.println("success");
}else{
System.out.println("error");
}
2.获取功能的方法:
public int length():返回此字符串的长度
public String concat(String str):将指定的字符串连接到该字符串上
public char charAt(int index):返回指定索引处的char值
public int indexOf(String str):返回指定子字符串第一次出现在该字符串内的索引
publci String substring(int begin):返回一个子字符串,从begin开始截取字符串到字符结尾,
有两个参数时左闭右开
//获取后缀名
String filename="shgdg.java";
System.out.println(filename.substring(filename.lastIndexOf(".")));
转换功能的方法
public char[] toCharArray():将此字符串转化为新的字符数组
public byte[] getBytes():使用平台的默认字符集将该String编码转化为新的字节数组
public String replace(target,replacement):将与target匹配的字符串使用replacement字符串替换
String str="abcde";
//将字符串转化为字符数组
char[] ch=str.toCharArray();
for (int i = 0; i <ch.length ; i++) {
System.out.println(ch[i]);
}
//将字符串转化为字节数组
byte[] bytes= str.getBytes();
for (int i = 0; i <bytes.length ; i++) {
System.out.println(bytes[i]);
}
//替换字母it为大写的IT
String str1="itcast itheima";
String replace=str1.replace("it","IT");
System.out.println(replace);
3.分割功能的办法
public String[] split(String regex):将此字符串按照给定的regex(规则)拆分为字符串数组
String str="aa bb cc";
String[] strArray= str.split(" ");
for (int i = 0; i <strArray.length ; i++) {
System.out.print(strArray[i]+" ");
}
4.String类的练习
//拼接字符串 把数组{1,2,3}按照指定格式拼接成一个字符串
int [] arr={1,2,3};
String s=arrayToString(arr);
System.out.println(s); //[1#2#3]
public static String arrayToString(int[] arr){
//创建字符串s
String s=new String("[");
//遍历数组,并拼接字符串
for (int i = 0; i <arr.length ; i++) {
if(i==arr.length-1){
s=s.concat(arr[i]+"]");
}else{
s=s.concat(arr[i]+"#");
}
}
return s;
}
//统计字符个数
//键盘录入一个字符,统计字符串中大小写字母及数字字符个数
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个字符串数据:");
String str=sc.next();
//定义三个统计变量
int bigCount=0;
int smallCount=0;
int numberCount=0;
//遍历字符串,得到每一个字符
for (int i = 0; i <str.length() ; i++) {
char ch=str.charAt(i);
//拿字符进行判断
if(ch>='A'&& ch<='Z'){
bigCount++;
}else if(ch>='a'&& ch<='z'){
smallCount++;
}else if(ch>='0' && ch<='9'){
numberCount++
}else{
System.out.println("该字符"+ch+"非法");
}
}
static关键字
概述:static关键字 ,它可以用来修饰成员变量和成员方法,被修饰的成员是属于类的,而不单单是属于
某个对象的。也就是说,既然属于类,就可以不靠创建对象来进行调用了。
1.类变量:使用static关键字修饰的成员变量 格式:(访问修饰符) static (访问修饰符) 数据类型 变量名
2.静态方法:当static修饰成员方法时,该方法称为类方法。静态方法在声明中有static,不建议使用类名
来进行调用,而不需要创建类的对象。
定义格式:访问修饰符 static 返回值类型 方法名(参数列表){}
静态方法调用的注意事项:
静态方法可以直接访问类变量和静态方法
静态方法不能直接访问普通成员变量或者成员方法,反之,成员方法可以直接访问类变量或静态方法
静态方法中,不能使用this关键字
静态原理图解:
是随着类的加载而加载的,且只加载一次
存储于一块固定的区域(静态区),所以,可以直接被类名调用
它优先于对象存在,所以,可以被所有对象共享
静态代码块;定义在成员位置,使用static修饰的代码块{}
位置:类中方法外
执行:随着类的加载而执行且只执行一次,优先于main方法和构造方法的执行
Arrays类
此类包含永安里操作数组的各种方法,比如排序和搜索,所有方法均为静态方法
public static String toString(int [] a):返回指定数组内容的字符串表示形式
public static void sort(int [] a):堆指定int型数组按照数字升序进行排列
Math类
public static double abs(double a):返回double值的绝对值
public static double ceil(double a):向上取整
public static double floor(double a):向下取整
public static long round(double a):四舍五入
请使用 Math 相关的API,计算在 -10.8 到 5.9 之间,绝对值大于 6 或者小于 2.1 的整数有多少个?
//定义最小值
double min=-10.8;
//定义最大值
double max=5.9;
//定义变量计数
int count=0;
for (double i = Math.ceil(min); i <=Math.floor(max) ; i++) {
if(Math.abs(i)>6 || Math.abs(i)<2.1){
count++;
}
}
System.out.println("个数为:"+count); //9