java_常用类
内部类
概念:在一个类的内部在定义一个完整的类
特点:
1、编译之后可分别生成独立的字节码文件
2、内部类可直接访问外部类的私有成员,而不破坏封装
3、可为外部类提供必要的内部功能组件
成员内部类
在类的内部定义和成员变量、成员方法同级别的类,即是成员内部类
class Outer{
class Inner{
public void method(){
System out.println("内部成员方法");
}
}
}
先创建外部类对象,再借助外部类对象,进而创建成员内部类
public class Test{
public static void main(String[] args){
Outer out = new Outer();
Outer.Inner in = out.new Inner();
in.method();
}
}
内部类可直接访问外部类的私有属性,而不破坏封装
②当外部类,内部类存在重名属性时,会优先访问内部类属性
③外部类类名.this:指向外部类当前实例对象
外部类类名.this.属性名:访问外部类属性
④成员内部类不能定义静态成员(静态属性和静态方法)
静态内部类
静态内部类类似于静态属性;
定义位置:类以内,方法以外,被static修饰
创建静态内部类中的静态成员,直接通过类名:
Outer.Inner i = new Outer.Inner();
访问静态内部类中的静态成员,直接通过类名:
Outer.Inner.静态内部类的静态成员;
局部内部类
局部内部类类似于局部变量:
①定义位置:方法内部
②局部内部类中可以直接访问外部类的私有属性
class Outer{
private int a = 10;
//外部类的成员方法
public void outer_method(){
int m = 1;
//局部内部类
class Inner{
int n = 5;
//局部内部类的成员方法
public void inner_method(){
System.out.println("a="+a);//a=10
}
}
//创建局部内部类对象,只能在定义它的方法中
Inner i = new Inner();
System out.println("内部成员方法");
i.inner_method();
}
}
局部内部类访问外部类的局部变量时,要求局部变量必须加上final
(局部变量的生命周期和对象的生命周期不一致)
局部变量使用完立即回收,对象是自动回收机制
匿名内部类
概念:特殊的局部内部类(局部内部类的一切特征,匿名内部类都有)
语法:继承一个类或是实现一个接口
new 接口名 () { 实现接口的代码 } ;
创建对象:只会创建该类的一个对象
优点:减少代码量
缺点:可读性差
匿名内部类继承一个类或者实现一个接口;只创建该类的一个对象
equals(Object o)
“==”等号
如果等号两边都是基本数据类型则比较数值
如果等号两边都是引用类型则比较地址
覆盖equals(Object o)方法
1、判断两个引用是否指向同一个对象
2、 判断传入的引用是否为空
3、判断两个引用的真是类型是否一致
4、强制转换类型o
5、依次比较属性值是否相等
基本数据类型使用“==”比较
引用类型使用String中的equals()进行比较
Object类
Object类:超类,根类,定义在java.lang包下,所有类的父类(直接或是间接)
Object类型的引用中可以存储任意类型的对象
Object中定义的方法所有类都具备
Object类中常用的方法
getClass():返回引用中存储的实际对象类型
应用:通常用于判断两个引用中实际存储对象类型是否一致
hashCode():返回该对象的哈希码值(一般是通过将对象的内部地址转换成一个整数)
toString():返回该对象的String形式
作用:未来方便打印输出对象的内容,可以覆盖toString()方法
toString()方法覆盖的原则:将所有属性的值拼接为一个字符串作为返回值
equals(Object obj):比较两个对象的内容是否相同,返回值布尔类型
finalize():垃圾回收器在回收垃圾对象时,调用的方法
垃圾回收器(GC)回收垃圾对象的时机:
①自动回收机制:JVM内存耗尽,不能再为新创建的对象分配内存空间,一次性的收回所有的垃圾对象(自动的调用对象中的finalize方法)
②使用System.gc(),通知JVM执行垃圾回收
包装类
基本数据类型所对应的引用数据类型
引用类型的变量只能存储对象,8种基本数据类型不能直接存储在引用中,为了让Object统一管理所有类型的数据,Java提供包装类的概念
为8种数据类型分别定义了响应的对象类型,称之为包装类
基本数据类型 | 包装类型(对象类型) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
常用方法
常用数据类型之间的转换:
public class Test{
public static void main(String[] args){
//int 转 Integer
Integer i1 = new Integer(10);
Integer i2 = new Integer.valueOf(10);
//Integer 转 int
int a1 = i1.intValue();
//String 转 Integer
Integer i3 = new Integer("123");
Integer i4 = new Integer.valueOf("123");
//Integer 转 String
String s1 = i4.toString();
String s2 = i4+"";
//int 转 String
String s3 = a1+"";
//String 转 int
int a2 = Integer.parseInt("123");
/*
注意:String转换成int时,要求String必须是数字字符串,否则抛出NumberFormatException数字格式异常
*/
}
}
//Long、Integer类型进制形式输出
public class Test {
public static void main(String[] args) {
int a = 12;
System.out.println("16进制:"+Integer.toHexString(a));
System.out.println("2进制:"+Integer.toBinaryString(a));
System.out.println("8进制:"+Integer.toOctalString(a));
}
}
//### 自动装箱、拆箱
//JDk5.0之后,提供自动装箱。拆箱的功能,及包装类型和基本数据类型自动转换
public class Test{
public static void main(String[] args){
/*
将一个基本数据类型变为包装类型的过程称为自动装箱
*/
Integer i =12;
/*
将一个包装类型变为基本数据类型的过程称为自动拆箱
*/
int a = i;
}
}
包装类可以区分0和null,即有效数据和无效数据
String类
创建String对象(两种方式不同)
不可变性
String字符串是常量,创建之后不可改变;
字符串字面值存储在串池中,可以共享
String 中的方法split(String str, int limit);
使用方法:
①当limit的值<0时,尽可能多的使用此规则进行分割字符串的操作。
②当limit的值=0时,尽可能多的使用此规则进行分割字符串的操作,但是当最后一个分割符后面没有字符时,抛弃此分隔符后的字符,不计数。
③当limit的值>0时,最多执行n-1此字符串的分割操作,执行完n-1次后,后面的字符技术一次。
### 可变长字符串
1、StringBuffer:可变长字符串,JDK1.0、线程安全,运行效率慢
2、StringBuilder:可变长字符串,JDK5.0,线程不安全,运行效率快
//buffer相当于一个序列,调用append()方法,可以向序列中追加字符串
StringBuffer buffer = new StringBuffer();
buffer.append("字符串");
StringBuilder 同理
BigDecimal
位置:java.math包中
作用:精确表示、计算浮点数
创建BigDecimal对象。(方式很多)
例:BigDecimal bd = new BigDecimal(“1.0”);
方法:
加、减、乘、除(具体方法参看API,java.math包中)
补充
除法:
divide(BigDecimal divisor, int scale, int roundingMode) ;
参数scale:指定精确到小数点后几位
参数roundingModel:指定小数部分的取舍模式,通常采用四舍五入的模式,取值为BigDecimal.ROUND_HALE_UP