内部类
内部类是类的构造块里新建的类
分为成员内部类/局部内部类
直接访问非静态的成员内部类的成员方法的格式?
外部类.内部类 对象名=new 外部类().new 内部类();
直接访问静态的成员内部类的成员方法的格式?
外部类.内部类 对象名=new 外部类.new 内部类();
接口和抽象类区别?
成员区别:抽象类成员可以是变量也可是常量
方法可以是抽象也可以是非抽象方法
有构造方法,用于初始化变量
接口成员只能是常量
方法是抽象方法,无构造方法.
关系区别:类与类:继承关系,可以是单继承/多层继承,但不能是多继承
类与接口:实现关系.类继承父类同时可以实现多个接口
接口与接口:继承关系,单继承/多继承/多层继承
jdk8以前内部类访问局部变量为什么加入final修饰?
局部变量生命周期随着方法调用存在,调用结束消失,当方法结束但成员内部类正在被创建对象,通过成员方法访问里面的局部变量就会访问不到,必须加入final修饰为自定义常量.
匿名内部类格式及本质?
new 类名/接口名(){
重写方法(){}
};
本质:继承了该类或者是实现了该接口的子类对象.
获取类的字节码文件对象方式有几种?
getclass()方法 /任意类型的class属性 /public static Class cString class()
toString
返回字符串类型数据--返回对象应该便于阅读,建议子类重写该方法
toHexString 将整数类型转成16进制数据以字符串类型体现
hashCode 返回对象哈希码值
==与equals区别
==链接基本数据类型则比较数据值是否相等,链接引用数据类型比较地址值是否相等
字符串常量相加,先相加再看结果,是否在常量池中,如果有,返回地址值,若无,开辟空间
变量相加,先开空间,再操作
equals默认比较地址值是否相同,子类重写后比较对象内容是否相同.
Scanner: java.util.Scanner 文本扫描器(键入数据)
成员方法:除过char类型数据外都可以录入.
细节:如果先录入int,在录入String(使用String nextLine())-----String的值可能会被漏掉
解决方案:
1)使用String next():录入单个字符串(推荐)
2)在使用nextLine()之前,重新创建一个新的Scanner对象;
String
获取功能
charAt(int i) 获取指定索引值处的字符
length() 获取字符串长度
concat(String s) 将指定字符串拼接到该字符串末尾
indexOf (String s)返回该字符串第一次出现的索引值
lastIndexOf(String s) 最后一次出现的索引值
subString(int x,int y) x开始截取到y-1结束
subString(int x) x开始截取到结束
转换功能
getBytes() 字符串转换为字节数组(看得懂的-->看不懂的)
String(byte[] byte)解码,看不懂的-->看得懂的
tocharArray() 字符串-->字符数组
ValueOf(基本类型) 万能方法,基本类型-->String
toUpperCase 准换大写
toLowercase 转换小写
其他功能
contains(String s)是否包含指定字符串
equals(Object o) 比较是否相同
equalsIgnoreCase(String s)忽略大小写比较
startsWith(String s) 字符串是否以指定前缀开头
endsWith(String s)是否以制定后缀结束
replace(char old,char new) 指定字符替换旧字符
trim() 删除前后两端空格
StringBuffer
字符串缓冲区,线程安全,支持可变字符
线程安全:同步,执行效率低,银行类
不安全:不同步,效率高,论坛类
StringBuffer和StringBuilder的区别
这两个类都是字符机床缓冲区,都支持可变的字符序列
前者:使用在多线程环境里面,能够保证线程安全---意味着同步----执行效率低
后者:是StringBuffer的简易替换,使用在单线程环境中,线程不安全---不同步--执行效率高!
单线程使用StringBuilder:效率高(速度快)
添加删除功能
append(任意类型) 末尾追加字符串缓冲区中,返回值是字符串缓冲区本身
insert(int i,任意数据类型) 指定序列前加入新序列
delete(int a,int b)指定a-->b-1处删除,返回字符缓冲区本身.
deleteCharAt(int i)指定位置处删除指定字符,返回字符缓冲区本身
String<---->StringBuffer相互转换 (重点)
//方式1)可以通过StringBuffer的有参构造方法
//StringBuffer(String str)
//创建一个字符串缓冲
StringBuffer sb = new StringBuffer(s) ;
System.out.println(sb) ;
//方式2:通过StringBuffer的无参构造方法+append(Stringstr)
StringBuffer sb2 = new StringBuffer() ;
sb2.append(s) ;
System.out.println(sb2);
StringBuffer------>String
方式1:
publicString toString()返回字符串
StringBuffersb = new StringBuffer();
String str =sb.toString();
//方式2:String类的构造方法
//publicString(StringBuffer buffer)
String str2 = new String(buffer) ;
System.out.println(str2) ;
String和StringBuffer的区别?
* String特点:字符串是一个常量,一旦被创建,其值不能被更改
* String作为形式参数,形参的改变不会影响实际参数;
* 而除过String这个引用类型之外,形式参数的改变直接影响实际参数!
* StringBuffer特点:
* 字符串缓冲区支持可变的字符串,线程安全,执行效率低!
reverse() 字符串反转功能