内部类与常用类Day11
内部类
内部类:
定义在内部的类
外部类 :
相对于内部类,定义在外部的类
注意;
1.外部类不能用static修饰
2.外部类的访问权限修饰符不能用private
匿名对象:
没有对象名的对象,称为匿名对象
内部类的分类:
1.成员内部类:
2.静态内部类:
定义位置:类中,方法以外
3.局部内部类
定义位置:方法体重
4.匿名内部类
定义位置:值或者实参中
成员内部类
定义位置:
类中,方法以外
语法:
访问权限修饰符 class 类名{
}
注意:
成员内部类中不能定义静态成员(比如:静态属性,静态方法,静态代码块)
特殊情况:
1.当外部类属性和内部类属性名称相同时,如何区分
this.属性名 表示内部类属性
外部类名.this.属性名 表示外部类属性
2.当外部类方法与内部类方法同名时,如何区分
this.方法名(实参列表) 表示内部类方法
外部类名.this.方法名(实参列表) 表示外部类方法
创建对象方法:
外部类名.内部类名 对象名 = 外部类对象.new 内部类类名(实参列表);
静态内部类
定义位置:
类中,方法以外
唯一用static修饰的类.
语法:
访问权限修饰符 static class 类名{
}
注意:
外部类可以定义的,静态内部类都可以;
特殊情况:
1.外部属性名与内部属性名相同时,如何区分
当属性为静态时:
用内部类名.属性名 表示内部类属性
用外部类名.属性名 表示外部类属性
当属性为非静态属性时
(内部类中不能直接使用外部类非静态成员)
静态内部类就是用static修饰的成员内部类;
创建对象方法:
外部类名.内部类名 对象名 = 外部类对象.new 内部类类名(实参列表);
局部内部类
定义位置:
类中,方法中;
语法:
class 类名{
}
注意:
1.没有访问权限修饰符
2.局部内部类不能定义静态成员(静态属性,静态方法,静态代码块)
3.局部内部类只能在定义的方法中使用,而且必须要在类定义完成后
特殊情况:
1.当外部类属性名和内部类属性名相同时
this.属性名 表示内部类属性
外部类名.this.属性名 表示外部类属性
2.当外部内方法名和内部类方法名相同时,如何区分
this.方法名(实参列表) 表示内部类方法
外部类名.this.方法名(实参列表) 表示外部类方法
如何创建对象:
内部类类名 对象名 = new 内部类类名(实参列表);
该类只能在定义的方法中使用;
匿名内部类(***)
没有类名的内部类
定义位置:
实参或者值
语法:
父类名 /父接口名 对象名 = new 父类名 /父接口名(){
属性;
方法;
代码块;
}
特点:
一个匿名内部类只能创建一个对象
注意:
1.内部类中不能定义静态成员(静态属性,静态方法,静态代码)
2.匿名内部类必须重写所有抽象方法
包装类
八个基本数据类型 对应的包装类:
char Character
byte Byte
int Inteager
short Short
long Long
double Double
float Float
boolean Boolean
自动拆箱与自动装箱
自动拆箱:
将基本数据类型的包装类转换为基本数据类型
自动装箱:
将基本数据类型自动转换为基本数据类型的包装类
数字缓冲区
不用创建地址
-128 - 127;
面试题:
Integer i1 = 128;
Integer i2 = 128;
sout(i1 == 12);
false
常用类
Object
Random
随机数:
nextInt(最大值)
nextBoolean()
Scanner
获取键盘录入:
next()
nextInt()
...
System
系统:
常用方法:
in:输入
out:正常输出
err:错误输出
常用方法:
arraycopy():拷贝数组
exit(); 退出 (禁用)
0:正常退出
其他:非正常退出
currentTimeMillis(); 获取现在至1970年1月1号00:00:00的毫秒值
gc();垃圾回收机制;
Arrays
数组工具类
static sort(int[] nums):排序(快排)
static toString(Object[] a):将数组转换为字符串
字符串相关类
可变字符串
StringBuffer
特点:
1.线程安全
2.jdk1.0出现
3.效率比StringBuilder慢
特有方法:
append();添加到尾部
insert(index ,str) 指定位置插入
...
StringBuilder
特点:
1.线程不安全
2.jdk1.5出现的
3.效率比StringBuffer块
特有方法:
append();添加到尾部
insert(index str):指定位置插入
不可变字符串
String
提供的方法:
增
+:字符串连接
改
字符串1.replace(要替换的字符, 替换后的字符 )
注意:替换后的返回值是一个字符串;
查
字符串1.length():查询字符1串长度
字符串1.isEmpty():查询字符1串是否为空
字符串1.contains(子字符串):查询字符串1中是否包含子字符串
字符串1.indexOf(子字符串):获取子字符串第一次出现的位置(开始位置 下标从0开始),如果查询子字符串不存在,返回-1;
字符串1.lastIndexOf(子字符串):获取子字符串最后一次出现的位置(开始位置 ,下标从0开始),如果查询不存在,则返回-1;
字符串1.equals(子字符串):判断两个字符串内容是否相同(不忽略大小写)
字符串1.equalsIgnoreCase(子字符串):判断两个字符串是否相同(忽略大小写)
字符串1.trim():忽略字符串前后空白
字符串1.endsWitch(字符串2):判断字符串1是否以字符串2结尾;
字符串1.startWith(字符串2):字符串1是否已字符串2作为开始;
字符串1.toUpperCase(),将字符串中的小写字母全部转化为大写字母;
字符串1.toLowerCase(),将字符串中的大写字母全部转化为小写字母;
字符串1.toCharArray(),将字符串转化为字符数组
字符串1.charAt(index),获取指定位置字符;
字符串1.getBytes(),将字符串转换为字节数组;
字符串1.split(字符串2),按照字符串2对字符串1进行切割
注意:
使用.切割是使用\\.
字符串1.substring(开始位置, 结束位置):截取字符串,包含开始位置字符,不包含结束位置字符.
字符串1.substring(开始位置):截取字符串,从开始位置到字符串结尾
注意 : 当字符串量很大时(大于10000),操作字符串,使用可变字符串.