Java基础总结----第三章字符串、包装类、继承、多态

字符串:

(*)
 * 面试题
 * 写出十个位于Java。lang包下的类
 * String StringBuffer System Object 八种数据类型的包装类
 */
string位于Java。lang包下,在这个包下的类使用的时候不需要导包
//String创建对象有两种写法
//一种是引用字符串常量给字符串变量赋值
String s1="hello";
//一种是通过构造方法创建对象
String s2= new String();
char[] c={'h','e','l','l','o'};
String s3=new String(c);//将字符串的内容凭借起来做字符串
//使用字符数组中,索引为2的字符开始,长度为2的两个字符组成字符串作为内容
String s4= new String(c,2,2);
String s5= new String("hello");
(*)
 * 面试题
 * 为什么String打印输出的是内容,而普通引用类型的对象输出的是地址呢
 * 因为String重写了object的tostring方法,所以在调用输出的时候,会将字符串转换成数组字符。再将
 * 字符数组输出到控制台上,所以输出的是字符串的内容,而普通引用变量调用的是object的tostring方法
 * 打印输出的是完整的类路径+类名+@+十六进制地址值
 */
* 问下面语句创建了几个对象
 * 答:字符串常量位于字符串常量池中,而字符串常量池在1.6 之前位于方法区中,在1.8之后
 * 为于堆区中,而字符串常量池在设计的时候,为了减少内存,当字符串常量池中需要使用的字符串常量
 * 已经存在的时候会直接调用这个常量,而常量池中没有这个字符串常量才会创建一个新的字符串,但是不管常量池中如何
 * 只要有new 就会在堆区中产生一个对象所以产生多少个对象,要考虑堆区和常量池中
 */
String s1="hello";//1
String s2=new String();//1
String s3=new String("hel1o");//2
String s4=new String("hello world");//2
String s5="hello World";//1
String s6="hello world";//0
String s7="q"+"w"+"e"+"r"+"d"+"f";//编译器优化完为 String s7="qwerdf"
String s8="a"+"b"+"c"+"d"+"e"+"f";//编译器优化完为 String s7="abcdef"
下面是一些处理字符串的常用处理的方法:

String s=" hello world ";
//获取字符串的长度
System.out.println(s.length());
// 查找字符串的方法,查到了返回字符串第一个字符串的索引,查不到返回-1
//字符串索引也是从0开始的 不管正向还是反向,索引都是从左侧开始的
System.out.println(s.indexOf("ll"));//从左到右查找
System.out.println(s.lastIndexOf("ll"));//从右到左反向查找
//获取索引位置的字符
System.out.println(s.charAt(2));
//截取字符串,从源字符串中截取一个新的字符串
System.out.println(s.substring(2,7));
//去除字符串的前后空格
System.out.println(s.trim());
//替换字符串
System.out.println(s.replace(" ",""));
(*)
 * 面试题
 * equals方法的实现原理
 * String的equals比较的是两个字符串的内容是否相同,所以会将字符串转换为字符数组进行按位逐一
 * 比较但是为了提高比较效率,equals 会进行三重判断,第一重比较两个对象的地址是否相同
 * 如果相同则认为同一个对象,会直接返回true 否则进行第二重判断,第二重判断比较对象是不是String类型的对象
 * 如果不是则直接返回false;如果是则进行第三重判断,第三重判断比较两个字符串长度是否相同,不同返回false
 * 如果相同则转换成字符数组进行注意比较
 *
 * 注意不是字符串类型的对象使用equals 那么,equals比较就等于==
 */
//Stringbuffer字符串缓冲区,也是字符串生成器
StringBuffer sb1=new StringBuffer();//默认长度为16的字符数组
StringBuffer sb2=new StringBuffer(20);
StringBuffer sb3=new StringBuffer("hello");
//String buffer 不能通过+或者+=来拼接字符串
sb3.append("world");
System.out.println(sb3);
System.out.println(sb3.toString());
System.out.println("hello".toString());

(*)

(StringBuffer是线程安全的,StringBuilder线程是不安全的,但是性能StringBuffer比StringBulider差一点。。)

//Stringbuffer字符串缓冲区,也是字符串生成器
StringBuffer sb1=new StringBuffer();//默认长度为16的字符数组
StringBuffer sb2=new StringBuffer(20);
StringBuffer sb3=new StringBuffer("hello");
//String buffer 不能通过+或者+=来拼接字符串
sb3.append("world");
System.out.println(sb3);
System.out.println(sb3.toString());
System.out.println("hello".toString());

包装类:

int a=10;
//用基本数据类型直接给包装类赋值,就是自动装箱
Integer i1=a;
//包装类还是引用类型的的变量还是可以通过构造方法创建对象的
Integer i2= new Integer(20);
//用包装类类型的对象给基本数据类型赋值就是自动拆箱
int b=i2;
//注意自动装箱和自动拆箱只有jdk1.5之后才可以使用
//将包装类转换为String类型
String s=i1.toString();
//将字符串转换为基本数据类型
int c= Integer.parseInt(s);
double d=Double.parseDouble(s);

继承:

//继承子类会自动拥有父类的说有成员
//extends关键字表示继承关系,左侧为子类,右侧为父类
//子类又称为派生类,父类又称为基类超类
public class Student extends Person{}
//方法重写,当父类方法不能满足之类的需要时候进行方法重写
//1.要有继承关系,同时在子类中进行方法重写
//2.方法名要完全一致
//3.参数的个数,类型,顺序要完全一致
//4.返回值类型相同或者协变(协变返回值类型就是父类的方法返回父类的对象,子类的方法返回之类的)
//注意:重写方法不能缩小父类的访问范围
//用private修饰的成员不能被继承

final关键字:

//final不能修饰构造方法
//public final FinalTest(){}
//final可以修饰方法
//final可以修饰方法,修饰的方法,可以被继承,但不能被重写
//final可以修饰类,final修饰的类不能被继承,没有子类,但可以有父类

多态:

多态:同样的消息被不同的对象接受产生的不同行为
条件:要有继承,要有重写,要有向上转型

public class Student extends Person {
    public static void main(String[] args) {
        //对象类型之间也存在类型转换,被称为对象转型
        //注意:对象转型只发生在父类和子类类型之间,所以无继承,就没有对象转换
        //对象转型有两种,一种是向上转型,一种为向下转型
        //向上转型:子类对象给父类的引用变量赋值,自动转换
        //向上转型的实质就是子类中小的那个父类对象,给父类类型赋值,所以是小的数据类型转换为大
        // 的数据类型,因此是自动转换
        //向上转型的两种写法
        Person p1=new Person();
        Student s1=new Student();
        p1=s1;
        Person p2=new Student();
        //向下转型:父类给子类的引用变量赋值,强制转换
        //要想使向下转型正常使用,必须要保证父类对象要在子类对象之中,而能保证父类对象在子类对象
        // 之中只能是向上转型,所以在使用向下转型前需要先进性向上转型,否则编译报错
        Person p3=new Student();
        Student s3=new Student();
        s3=(Student)p3;
    }
}
class Person{}

instanceof关键字:

Person p=new Person();
Student s=new Student();
//instanceof计算的是当前对象是不是有该类型或者该类型的父类创建的对象
System.out.println(p instanceof Person);
System.out.println(s instanceof Person);
System.out.println(p instanceof Student);//false
System.out.println(s instanceof Student);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值