匿名内部类
匿名内部类指的是没有名字的内部类,其必须在抽象类或接口基础上才可以定义。
例:采用匿名内部类简化类的定义
interface Message{ //定义接口
public void print();
}
public class Test1_1_4_9 {
public static void main(String args[]){
fun(new Message(){ //直接实例化接口对象
public void print(){ //匿名内部类中覆写print()方法
System.out.println("Hello World");
}
}); //传递匿名内部类实例化
}
public static void fun(Message msg){ //接收接口对象
msg.print();
}
}
//结果
//Hello World
基本数据类型的包装类
Java为基本数据类型提供了对应的类,这些类称作包装类。
对象包装类(Object直接子类):Character、Boolean。
数值型包装类(Number直接子类):Byte、Short、Integer、Long、Float、Double。
关于Number类的定义:
Number是一个抽象类,里面一共定义了6个操作方法:intValue()、doubleValue()、floatValue()、byteValue()、shortValue()、longValue()。
装箱与拆箱操作
装箱操作:将基本数据类型变为包装类的形式;
每个包装类的构造方法都可以接收各自数据类型的变量;
拆箱操作:从包装中取出被包装的数据;
利用从Number类中继承而来的一系列xxxValue()方法完成。
例:使用int和Integer
public class Test1_1_5_11 {
public static void main(String args[]){
Integer obj=new Integer(10); //将基本数据类型装箱(构造方法实例化)
int temp=obj.intValue(); //将基本数据类型拆箱
System.out.println(temp*2); //数学计算
}
}
//结果
//20
例:使用double和Double
public class Test1_1_5_11 {
public static void main(String args[]){
Double obj=new Double(10.2); //装箱
double temp=obj.doubleValue(); //拆箱
System.out.println(temp*2);
}
}
//结果
//20.4
例:自动装箱与自动拆箱
public class Test1_1_5_11 {
public static void main(String args[]){
Integer obj=10; //自动装箱(直接装箱实例化)
int temp=obj; //自动拆箱
obj++;
System.out.println(temp*obj);
}
}
//结果
//110
如果使用直接装箱实例化的方式,会使用同一块堆内存空间,而使用了构造方法实例化的包装对象,会开辟新的堆内存空间。故在进行包装类数据相等比较时,最可靠的方法是equals()。
利用Object类可以接收全部数据类型
流程:
1.基本数据类型
2.自动装箱(成为对象)
3.向上转型为Object
例:利用Object接收数据类型
public class Test1_1_5_11 {
public static void main(String args[]){
Object obj=10; //先自动装箱后再向上转型,此时不能进行科学计算
//Object不可能直接向下转型
//所以要取出基本数据类型必须首先向下转型为指定的包装类
int temp=(Integer)obj; //向下变为Integer后自动拆箱
System.out.println(temp*2);
}
}
//结果
//20
数据类型转换
常用的将String数据类型变为基本数据类型的方法
Integer类:public static int parseInt(String s);
Double类:public static double parseDouble(String s);
Boolean类:public static boolean parseBoolean(String s);
例:将字符串变为int型数据
public class Test1_1_5_1 {
public static void main(String args[]){
String str="123"; //字符串
int temp=Integer.parseInt(str); //将字符串转换为int型数据
System.out.println(temp*2);
}
}
//结果
//246
注意:如果要将一个字符串数据变为数字,就必须保证字符串中定义的字符都是数字,如果出现了非数字的字符,那么转换就会出现异常。
例:将基本数据类型转换为String型数据
public class Test1_1_5_1 {
public static void main(String args[]){
int num=100;
String str=String.valueOf(num); //变为String型
System.out.println(str.replaceAll("0","9"));
}
}
//结果
//199