week4

本文详细介绍了Java中的内部类,包括成员内部类和局部内部类的访问方式。接着讨论了抽象类和接口的区别,如成员类型、方法特性和继承关系。还提到了JDK8以前内部类访问局部变量需final修饰的原因。此外,文章涵盖了Scanner类的使用注意事项以及String和StringBuffer的相关操作,包括转换、比较和线程安全性问题。
摘要由CSDN通过智能技术生成

内部类

内部类是类的构造块里新建的类

分为成员内部类/局部内部类

直接访问非静态的成员内部类的成员方法的格式?

外部类.内部类 对象名=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() 字符串反转功能

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值