学习内容:
掌握Object类的作用及其主要方法的作用。
掌握包装类的作用以及自动装箱和拆箱的操作。
掌握匿名内部类的使用。
1、Object类
基本作用
在Java中所有的类都有一个公共的父类Object,一个类只要没有明显地继承一个类,则肯定是Object类的子类。
🔸如下两行代码表示的含义都是一样的:
class Person extends Object{ } class Person{ }
那么既然继承了Object类,Object类有哪些作用呢?实际上在Object类中提供了很多的方法,这些方法经常被开发者所使用。下面是常用的几种方法:
主要方法
(1)toString()方法
当我们输出一个对象的引用时,实际上就是调用当前对象的toString()
自定义类也可以重写toString()方法,当调用此方法时,返回对象的"实体内容"。
public String toString(){ return "User [name="+name+",age="+age+"]"; }
开发中使用自动生成的toString()
🔸注意:
前面说过当我们输出一个对象的引用时,实际上就是调用当前对象的toString(),但是我们输出时写还是不写是有区别的。
public void test(){ String str="你好,Java"; str=null; System.out.println(str);//null System.out.println(str.toString());//java.lang.NullPointerException }
(2)equals()方法
🔸equals()方法的使用:Java 面向对象(三)(String内容的比较)
接收任意引用类型的对象
既然Object类是所有对象的父类,则所有的对象都可以向Object进行转换,在这其中也包含了数组和接口类型,即一切的引用数据类型都可以使用Object进行接收。
🔸范例:使用Object接收接口实例
interface A{ public String getInfo(); } class B implements A{ public String getInfo(){ return "Hello World!!"; } } public class ObjectDemo{ public static void main(String[] args){ A a=new B(); Object obj=a;//对象向上转型 A x=(A)obj;//对象向下转型 System.out.println(x.getInfo()); } }
🔸运行结果:
Hello World!!
虽然接口不能继承一个类,但是依然是Object类的子类, 因6为接口本身是引用数据类型,所以可以进行向上转型操作。
2、包装类
(1)包装类介绍
在Java的设计中提倡一种思想,即一切皆对象,那么这样就出现了一个矛盾,从数据类型的划分中可以知道Java中的数据类型分为基本数据类型和引用数据类型,但是基本数据类型怎么能够称为对象呢?此时,就需要将基本数据类型进行包装,将8种基本类型变为一个类的形式,那么这也就是包装类的作用。
🔸包装类与基本数据类型的关系如下所示:
🔸可以从JDK文档中发现包装类中的继承关系:
(1)Integer、Byte、Float、Double、Short、Long都属于Number类的子类,Number类本身提供了一系列的返回以上6种基本数据类型的操作。
(2)Character属于Object的直接子类。
(3)Boolean属于Object的直接子类。
Number类是一个抽象类,主要是将数字包装类中的内容变为基本数据类型.
🔸 Number 类中定义的方法如表所示:
(2)装箱与拆箱
装箱:将一个基本数据类型变为包装类,这样的过程称为装箱操作。
拆箱:而将一个包装类变为基本数据类型的过程称为拆箱操作。
🔸范例:
public class Demo{ public static void main(String[] args){ int x=30; Integer i=new Integer(x);//装箱 int temp=i.intValue();//拆箱 } }
🔸范例:自动装箱,拆箱
public class Demo{ public static void main(String[] args){ Integer i=30; Float f=30.3f; int x=i; float y=f;
(3)包装类应用
包装类在实际中用得最多的还是字符串变为基本数据类型的操作
例如,将一个全由数字组成的字符串变为一个int或float 类型的数据。在Integer和Float类中分别提供了以下两种方法:
Integer类(字符串转int型)
public static int parseInt (String s) throws NumberFormatException
Float类(字符串转float型)
public static float parseFloat (String s) throws NumberFormatException
在使用以上的两种操作时,一定要注意字符串必须由数字组成。
3、匿名内部类
在Java中除了内部类之外,还有一种名内部类。匿名内部类就是指没有一个具体名称的类,且是在接口和抽象类的应用上发展起来的
🔸范例:
interface Y{ public void printInfo(); } class X{ public void fun1(){ this.fun2(new Y(){//匿名内部类 public void printInfo(){ System.out.println("Hello World!"); } }); } public void fun2(Y y){ y.printInfo(); } } public class De{ public static void main(String[] args){ new X().fun1(); } }
🔸运行结果:
Hello World!
🔸分析:
(1)直接实例化接口对象,代码如下:
new Y(){ }
此时,是直接为接口实例化,从前面的概念应该知道,接口本身是不能直接进行实例化的,所以在接口实例化后要有一个大括号,在其中编写具体的实现方法。
(2)实现抽象方法,代码如下:
new Y(){//匿名内部类 public void printInfo(){ System.out.println(“Hello World!”); } }