一、String类
String是引用数据类型,表示字符串(其实是由多个字符组成的)
String是final修饰的,所以是最终类,最终类是不能被继承的,既然不能被继承也就意味着里面的方法不能被重写
1.1、String类中常用的方法
public static void method() {
//replace()替换
String url = "http://www.tieba.baidu.com";
System.out.println(url.replace("baidu", "bilibili"));
System.out.println(url);
//substring()截取 如果只有一个参数 代表开始,知道末尾结束
System.out.println(url.substring(20));
//如果有两个参数 参数一代表开始 参数二代表结束(不包含)
System.out.println(url.substring(5, url.length()));
System.out.println(url.length());
//split() 分割 参数代表拆分的依据
String[] urlArr =url.split("\\.");
System.out.println(urlArr);
for(int i=0;i<urlArr.length;i++) {
System.out.println(urlArr[i]);
}
System.out.println("转换为大写"+url.toUpperCase());
}
1.21.1、String类中不常用的方法
public static void method2() {
String str = "hello word";
//对应下标为3的值
System.out.println("制定索引出的char值:"+str.charAt(3));
//找出该字母对应的下标
System.out.println("指定char值对应的索引:"+str.indexOf('d'));
//如果有重复默认是第一个 last是最后一个
System.out.println("指定char值对应的索引:"+str.lastIndexOf('l'));
String compare1 = "asc";
String compare2 = "aac";
//两个数比较 在前的减去后面的
System.out.println(compare2.compareTo(compare1));
//字符拼接 concat
System.out.println(compare2.concat(compare1));
//有的话则为ture 否则 false
System.out.println("是否包含指定的字符串:"+str.contains("hello"));
String url = "https://www.baidu.com";
//查看结尾是否是cn 对的话为ture 否则 false
System.out.println(url.endsWith("cn"));
//查看结尾是否为http开头 对的话为ture 否则 false
System.out.println(url.startsWith("http"));
//将字符串转换为字节数组
byte[] bts = str.getBytes();
//print(bts);
System.out.println("判断字符串是否为空字符:"+"".isEmpty());
}
注意:数组中使用的length属性,String中使用的是length()!!!!
2、String中equal方法
ava中==和equals的区别:==号如果比较的是基本数据类型,那比较的值是否相等,如果比较的是引用数据类型,那比较的是地址是否相同;在String类中equals先比较地址,地址不相同再比较值是否相同。
public static void main(String[] args) {
String sr1 = new String("abc");//创建了两个对象 常量在变量池中 对象在堆中
String sr2 = new String("abc");// 新创建一个对象 sr1 sr2两个对象的地址不相同
System.out.println(sr1 == sr2); //所以结果为false
System.out.println(sr1.equals(sr2)); //先对比对象的地址 然后对比内容 内容相同 则返回为true
String sr3 = "a";//这时一个常量
String sr4 = "b";//这也是一个
String sr5 = sr3+sr4;//将两个地址的常量拼接在一起产生一个新的地址
String sr6 = "ab";// sr6是一个新的地址 所以结果为false
System.out.println(sr5 ==sr6);
System.out.println(sr5.equals(sr6)); //先对比对象的地址 然后对比内容 内容相同 则返回为true
String sr7 = "a"+"b"+"c"; //先做字符串的拼接再创建对象 所以结果是ture
String sr8 = "abc";
System.out.println(sr7 == sr8); //共用一个对象地址 结果为true
System.out.println(sr7.equals(sr8));//true
}
3、字符串常量池:
字符串常量池:字符串是常量,所有的字符串常量都是存储在常量池中的,每个常量在常量池中都有地址;在常量池中,如果定义的常量在常量池中已经存在,则不会再进行创建,而是直接拿来用,如果不存在就创建一个常量扔进常量池中
二、多态
多态就是多种形态: 分为向上转型、向下转型两种。例如:猫,既可以成为猫,也可以归为猫科动物,还可以归为动物
多态要求:必须是有继承或实现的关系,(而且有方法重写)
1、向上转型
语法格式:父类类型 变量名 = new 子类类型()
2、向下转型
语法:子类类型 变量名 = (子类类型) 父类形变量名;
向下转型,为了使用子类中的特有方法
public class DuoTaiDemo {
public static void main(String[] args) {
User u1 = new VipUser(); // 子----->父 向上类型转换 只能调用父类的方法
u1.goShop();
int a = 1; byte b = (byte)a;
VipUser u2 = (VipUser)u1;// 父------>子 向下类型转换 强制类型转换 可以调用子类中的方法
u2.vip();
}
}
/**
* 客户总类
*/
class User{
public void welcome() {
System.out.println("欢迎光临");
}
public void goShop() {
System.out.println("购买·····");
}
}
class commonUser extends User{
public void common() {
System.out.println("我是普通用户");
}
}
class VipUser extends User{
public void vip() {
System.out.println("我是VIP用户!!");
}
}
三、instanceof关键字
什么时间 在对类型进行向下转型时,一定要使用instanceof 运算符进行判断
语法 : (引用 instanceof 类型)
instanceof运行的结果只能为true /false
if(u1 instanceof commonUser ){
commonUser x = (commonUser )u1;
x.common ();
}else if(u1 instanceof VipUser) {
VipUser x = (VipUser)u1;
x.vip();
}
}
System.out.println(u1 instanceof commonUser); 输出的结果为false
System.out.println(u1 instanceof (VipUser);输出结果为true
}