java 怎么实现调用外部接口不用等待返回结果_2020重新出发,JAVA基础,内置包装类...

内置包装类

Java 是一种面向对象的编程语言,Java 中的类把方法与数据类型连接在一起,构成了自包含式的处理单元。但在 Java 中不能定义基本类型对象,为了能将基本类型视为对象处理,并能连接相关方法,Java 为每个基本类型都提供了包装类,如 int 型数值的包装类 Integer,boolean 型数值的包装类 Boolean 等。这样便可以把这些基本类型转换为对象来处理了。

虽然 Java 可以直接处理基本类型,但是在有些情况下需要将其作为对象来处理,这时就需要将其转换为包装类。

JAVA的装箱与拆箱

在 Java 的设计中提倡一种思想,即一切皆对象。但是从数据类型的划分中,我们知道 Java 中的数据类型分为基本数据类型和引用数据类型,但是基本数据类型怎么能够称为对象呢?于是 Java 为每种基本数据类型分别设计了对应的类,称之为包装类(Wrapper Classes),也有地方称为外覆类或数据类型类。

包装类和基本数据类型的关系如下表所示。

我们都知道八种基础数据类型:byte 、short、int 、long 、char 、float 、double 、boolean

对应的包装类:Byte 、Short、Integer 、Long 、Character 、Float、Double 、Boolean

我们可以看出,除了 Integer 和 Character 定义的名称与基本数据类型定义的名称相差较大外,其它的 6 种类型的名称都是很好掌握的。

装箱和拆箱

包装类的装箱与拆箱的概念:基本数据类型转换为包装类的过程称为装箱,例如把 int 包装成 Integer 类的对象;包装类变为基本数据类型的过程称为拆箱,例如把 Integer 类的对象重新简化为 int。

手动实例化一个包装类称为手动拆箱装箱。Java 1.5 版本之前必须手动拆箱装箱,之后可以自动拆箱装箱,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行装箱及拆箱操作,不用在进行手工操作,为开发者提供了更多的方便。例如:

public class Demo {
        
    public static void main(String[] args) {
            
        int m = 500;        
        Integer obj = m;  // 自动装箱        
        int n = obj;  // 自动拆箱        
        System.out.println("n = " + n);              
        Integer obj1 = 500;        
        System.out.println("obj等价于obj1返回结果为" + obj.equals(obj1));    
    }
}

运行结果:

n = 500
obj等价于obj1返回结果为true

自动拆箱装箱是常用的一个功能,需要重点掌握。

Object类

Object 是 Java 类库中的一个特殊类,也是所有类的父类。也就是说,Java 允许把任何类型的对象赋给 Object 类型的变量。当一个类被定义后,如果没有指定继承的父类,那么默认父类就是 Object 类。所以Object类是所有JAVA类的根基类,是所有JAVA类的老祖宗。所有的类,不管是谁,都是从它继承下来的

d445628acf05f4c594b9581d84ae7581.png

因此,以下两个类表示的含义是一样的。

public class MyClass{…}

等价于

public class MyClass extends Object {…}

由于 Java 所有的类都是 Object 类的子类,所以任何 Java 对象都可以调用 Object 类的方法。常见的方法如下所示。

  1. clone 方法:保护方法,实现对象的浅复制,创建与该对象的类相同的新对象
  2. getClass方法:final方法,获得运行时的类型,返回一个对象运行时的实例类
  3. toString方法:该方法使用的比较多,一般子类都有覆盖,返回该对象的字符串标示
  4. finalize方法:该方法用于释放资源。当垃圾回收器确定不存在对该对象的更多引用时,对象垃圾回收器调用该方法。
  5. equals方法:比较两对象是否相等,一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。
  6. hashCode方法:该方法用于哈希查找,返回该对象的散列码值,重写了equals方法一般都要重写hashCode()方法。
  7. wait方法:wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。 调用该方法后当前线程进入睡眠状态,直到以下事件发生。
  8. 其他线程调用了该对象的notify方法。
  9. 其他线程调用了该对象的notifyAll方法。
  10. 其他线程调用了interrupt中断该线程。
  11. 时间间隔到了。

此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。

8.notify方法:该方法唤醒在该对象上等待的某个线程。

9.notifyAll方法:该方法唤醒在该对象上等待的所有线程。

其中,toString()、equals() 方法和 getClass() 方法在 Java 程序中比较常用。

toString() 方法

toString() 方法返回该对象的字符串,当程序输出一个对象或者把某个对象和字符串进行连接运算时,系统会自动调用该对象的 toString() 方法返回该对象的字符串表示。

Object 类的 toString() 方法返回“运行时类名@十六进制哈希码”格式的字符串,但很多类都重写了 Object 类的 toString() 方法,用于返回可以表述该对象信息的字符串。

先看以下代码:

// 定义Demo类,实际上继承Object类
class Demo {
    

}

public class ObjectDemo01 {
        
    public static void main(String[] args) {
            
        Demo d = new Demo(); // 实例化Demo对象        
        System.out.println("不加toString()输出:" + d);        
        System.out.println("加上toString()输出:" + d.toString());    
    }
}

输出结果为:

不加toString()输出:Demo@15db9742
加上toString()输出:Demo@15db9742

以上的程序是随机输出了一些地址信息,从程序的运行结果可以清楚的发现,加和不加 toString() 的最终输出结果是一样的,也就是说对象输出时一定会调用 Object 类中的 toString() 方法打印内容。所以利用此特性就可以通过 toString() 取得一些对象的信息,如下面代码。

public class Person {
        
    private String name;    
    private int age;  

    public Person(String name, int age) {
            
        this.name = name;        
        this.age = age;    
    }    

    public String toString() {
            
        return "姓名:" + this.name + ":年龄" + this.age;    
    }    

    public static void main(String[] args) {
           
        Person per = new Person("测试类", 30);// 实例化Person对象       
        System.out.println("对象信息:" + per);// 打印对象调用toString()方法    
    }
}

输出结果为:

对象信息:姓名:测试类:年龄30

程序中的 Person 类中重写了 Object 类中的 toString() 方法,这样直接输出对象时调用的是被子类重写过的 toString() 方法。

equals() 方法

在前面学习字符串比较时,曾经介绍过两种比较方法,分别是==运算符和 equals() 方法,==运算符是比较两个引用变量是否指向同一个实例,equals() 方法是比较两个对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值