精华内容
下载资源
问答
  • 2021-02-26 15:08:39

    在时代的不断变迁与发展之中。越来越多的新技术涌现了出来。今天就为大家介绍一下java的包装类是什么意思,以及它包括哪些内容。

    首先,由于java中的数据类型int,double等不是对象,所以无法通过向上转型得到Object提供的方法,而像String却可以,原因是String是一个对象而不是一个类型。java提供包装类就是为了解决,基本数据类型因为上述的特性,导致无法参与转型,泛型,反射等过程的问题。包装类根据名称可以得知。就是将基本的数据类型以及一些辅助方法包装到类中,例如自己实现一个int的包装类,代码展示如下:class IntDemo

    {

    private int num;

    public IntDemo(int num)

    {

    this.num = num;

    }

    public int intValue()

    {

    return this.num;

    }

    }

    那么java提供哪些包装类呢?主要包括下面两种。

    第一种,对象型包装类,它不继承任何其他类(Object的直接子类);代码展示如下:// boolean的包装类

    public final class Boolean implements java.io.Serializable

    , Comparable 

    // char的包装类

    public final

    class Character implements java.io.Serializable, Comparable 

    第二种,数值型包装类,继承于Number类。代码展示如下:// byte的包装类

    public final class Byte extends Number implements Comparable 

    // short的包装类

    public final class Short extends Number implements Comparable 

    // int的包装类

    public final class Integer extends Number implements Comparable 

    // long的包装类

    public final class Long extends Number implements Comparable 

    // float的包装类

    public final class Float extends Number implements Comparable 

    // double的包装类

    public final class Double extends Number implements Comparable 

    另外, Boolean和Character两个类就是正常的属性方法封装,但是数值型的包装类继承了一个Number类。代码展示如下:public abstract class Number implements java.io.Serializable

    关于它们定义的方法如下图所示:

    599e42ed8733dc960b2aa9a25c44449b.png

    以上就是关于java中包装类的概念的具体含义,以及它所包含的内容具体展示。想要了解更多java常见问题,敬请关注奇Q工具网。

    推荐阅读:

    更多相关内容
  • java中不能继承有哪些?

    千次阅读 2021-02-12 17:13:35
    在Java中,只要是定义为final的,也可以说是final修饰的,就是不能被继承的。因为jdk的开发者认为,有一些最基本的没要必要对开发者开放,如果用户继承时操作有误,很可能引入很多问题。为了防止用户对...

    97b46086fab6434f086bdc20d6e6d29e.png

    在Java中,只要是被定义为final的类,也可以说是被final修饰的类,就是不能被继承的。

    因为jdk的开发者认为,有一些最基本的类没要必要对开发者开放,如果用户继承时操作有误,很可能引入很多问题。为了防止用户对基本类进行相应的扩展,也体现了java设计过程中的开闭原则,最终将这些类设计成为final的。

    这是final的规定:当你将final用于类身上时,一个final类是无法被任何人继承的,那也就意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要

    进行修改或扩展。对于final类中的成员,你可以定义其为final,也可以不是final。而对于方法,由于所属类为final的关系,自然也就成了final型的。你也可以明确的给final

    类中的方法加上一个final,但这显然没有意义。

    java中常见的不能被继承的类有如下:String,

    StringBuffer,

    StringBuilder,

    基本类型的包装类如Double,Integer,Long

    等等。

    我们来看看这个String类是如何被定义的:

    c549149905b1fc1a43262c22b0978811.png

    以上就是这个String类的定义方式,我们可以明显的看到一个final修饰符!

    如果说整个类都是final(在它的定义前冠以final关键字),就表明自己不希望从这个类继承,或者不允许其他任何人采取这种操作。换言之,出于这样或那样的原因,我们的类肯定不需要进行任何改变;或者出于安全方面的理由,我们不希望进行子类化(子类处理)

    展开全文
  • Java 包装类是什么

    万次阅读 多人点赞 2018-04-26 14:29:49
    包装类就是将基本的数据类型以及一些辅助方法封装到类中,例如 class IntDemo { private int num; public IntDemo(int num) { this.num = num; } public int intValue() { return this.num; } } Java...

     java中的数据类型int,double等不是对象,无法通过向上转型获取到Object提供的方法,而像String却可以,只因为String是一个对象而不是一个类型。基本数据类型由于这样的特性,导致无法参与转型,泛型,反射等过程。为了弥补这个缺陷,java提供了包装类。

     包装类顾名思义就是将基本的数据类型以及一些辅助方法包装到类中,例如自己实现一个int的包装类:

    class IntDemo {
        private int num;
        public IntDemo(int num) {
            this.num = num;
        }
        public int intValue() {
            return this.num;
        }
    }

    1. Java提供的包装类

     虽然上面的IntDemo类能实现一些辅助功能,而且可以支持泛型反射等功能,但是如果如果每次使用都自己封装这么一个类的话,就太繁琐了。所以,java为我们提供了基本数据类型的包装类,这些包装类分为两类,一种是对象型包装类,不继承任何其他类(Object的直接子类),另一种是数值型包装类,继承于Number类。

     对象型(Object 的直接子类)包装类:

    // boolean的包装类
    public final class Boolean implements java.io.Serializable,
                                          Comparable<Boolean>
    
    // char的包装类
    public final
    class Character implements java.io.Serializable, Comparable<Character>

     数值型(继承了Number类)包装类:

    // byte的包装类
    public final class Byte extends Number implements Comparable<Byte>
    
    // short的包装类
    public final class Short extends Number implements Comparable<Short> 
    
    // int的包装类
    public final class Integer extends Number implements Comparable<Integer>
    
    // long的包装类
    public final class Long extends Number implements Comparable<Long> 
    
    // float的包装类
    public final class Float extends Number implements Comparable<Float> 
    
    // double的包装类
    public final class Double extends Number implements Comparable<Double> 

     Boolean和Character两个类就是正常的属性方法封装,但是数值型的包装类继承了一个Number类。

    public abstract class Number implements java.io.Serializable

    其中定义的方法如下:

    Number类的方法

     其实Number中定义的方法就是用于拆箱装箱的。

    2. 拆箱与装箱

     装箱:

      将基本数据类型封装为包装类对象,利用每一个包装类提供的构造方法实现装箱操作。

     拆箱:

      将包装类中包装的基本数据类型数据取出。

    // 装箱
    Integer integer1 = new Integer(1);
    // 拆箱
    int integer2 = integer1.intValue(); 

     JDK1.5之后提供自动拆装箱。

    // 自动装箱
    Integer integer1 = 1;
    // 自动拆箱
    int integer2 = integer1; 

    3. 自动装箱的内存复用

     自动装箱时,对于Integer var = ?,如果var指向的对象在-128 至 127 范围内的赋值时,生成的Integer实例化对象是由 IntegerCache.cache() 方法产生,它会复用已有对象。和String的共享池操作是一个道理,cache()方法会将位于-128~127范围内产生的Integer对象入池,下次使用的时候,从池中拿去,就不会在创建了。

     所以,在这个数值区间内的 Integer对象的栈指向(属性名) 可以直接使用==进行判断,因为值相同,指向的就是同一片区域。但是这个区间之外的所有数据,自动装箱都会在堆上产生实例化,并不再复用已有对象,这是一个大坑,为了避免这个问题,推荐使用 equals 方法进行Integer的判断。

     对于所有数值型的包装类来说,都会涉及到上面这种问题,一定要多加注意。

     而对于手动装箱,即采用new进行包装类创建时,不会发生内存复用,因为new关键字每次使用,都会开辟新的空间,这和String采用构造方法创建字符串不入池相对应。

    4. 包装类编码规约

     所有的相同类型的包装类对象之间值的比较,全部使用equals()方法。

     所有的POJO(简单Java类,只包含基本属性,有参构造,get/set)类属性必须使用包装类数据类型,类属性即static属性。

     RPC(远程方法调用)方法返回值和参数必须使用包装数据类型。

     推荐所有的局部变量使用基本数据类型。

    5. 包装类对字符串与基本数据类型转换的支持

     实际工程中,各种数据的接收是通常是通过字符串完成的,所以要掌握包装类对字符串转换的方法。

    // String->int
    public static int parselnt(String s)throws NumberFormatException;
    
    // String->double 
    public static double parseDouble(String)throws NumberFormatException;
    
    // String->Boolean 
    public static boolean parseBoolean(String s)

     字符串转数值类型时字符串只能包含数字,否则会抛出 NumberFormatException 异常,这是一个非受查异常。

     但是字符串转Boolean是个特例,parseBoolean()方法会将”true”转为true,而将非”true”的字符串转为false。

    展开全文
  • Java包装类的共同点

    千次阅读 2019-03-10 23:19:32
    渣渣海除了写点博客外,还有github哦...之前写过一篇博客,讲了基础的Java包装类的装包拆包过程,下面补充一下包装类它们的一些共同点。 1.所有包装类都重写了Object方法 我们也很容易知道Object的方法有: bo...

    渣渣海除了写点博客外,还有github哦,欢迎进去看看,如果有喜欢的,记得加个小星星哦。

    github地址:https://github.com/xuhaihan?tab=repositories

    之前写过一篇博客,讲了基础的Java包装类的装包拆包过程,下面补充一下包装类它们的一些共同点。

    1.所有包装类都重写了Object方法

       我们也很容易知道Object的方法有:

    boolean equals(Object obj)
    int hashcode()
    String toString()

      1.1 equals

       equals 基本上用于判断当前对象和参数传入的对象是否相同,Object类的默认实现是比较地址。对于两个变量,指向同一个对象地址时,equals才会返回true,与==运算符结果相同。一般这个默认实现是不符合我们需要的比较两个对象相等,需要子类重写这个实现。以Long为例,其equals方法代码实现如下:

    public boolean equals(Object obj){
        if(obj instanceof Long){
          return value==((Long)obj).longValue();
       }
       return false;
    }

    对于Float,equals方法实现跟上面还有点区别,需要注意一下,其equals实现:

    public boolean equals(Object obj){
       return (obj instanceof Float) && (floatToIntBits((Float) obj).value) ==floatToIntBits(value));
    }

    上面代码出现了一个floatToIntBits()方法,这里将float的二进制表示看做int。为什么要使用这个方法呢?因为float类型要比较相等的时候,只有当他们表示的二进制完全一样的时候才相等。所以比较两个float相等转成成了二进制对应int值的比较。Double实现euqals方法也类似,有兴趣的可以自己找源码看看。

    1.2 hashCode

       hashCode 返回一个对象的哈希值。哈希值是一个int类型的数,一般有对象中不变的属性值映射得来。一般在容器类会对对象进行区分。一个对象的哈希值不能改变,相同对象的哈希值相同,不同对象的可以相同,也可以不同,一般是不同。对于hashcode与equals的关系,我这里推荐一个博主的文章,写的比我详细,我这里就在这里引用他的文章。

    https://blog.csdn.net/xlgen157387/article/details/88087963

    包装类也重写了hashCode,根据包装类的基本类型值计算hashCode,对于Byte、Sort、Integer、Character,hashCode就是其中内部的值,具体代码为:

    public int hashCode(){
       return (int)value;
    }

    对于Boolean,hashCode代码如下:

    public int hashCode(){
       return value ? 1231 : 1237
    }

    为什么选择这两个值,因为它们都是质数,即只能被1和本身整除的数,质数用于哈希时,不易冲突。

    其他的包装类也类似,就不在赘述,读者可以自行查看源代码,比较容易看懂,不难。

    1.3 toString

     每个包装类都重写了toString方法,返回对象的字符串表示,这个也容易理解,不过多阐述。

    2. 包装类都实现了Comparable接口

     Java API 的Comparable 接口如下:

    public interface Comparable<T> {
       public int compareTo(T o)
    }

    使用了泛型,具体参数类型由实现接口的类传入。每个包装类的实现基本都是根据类型值进行比较的,不过多说明。

    3.包装类除了toString方法外,还有一些跟String相关的方法

      除了Character方法外,每个包装类都有一个静态的valueOf(String) 方法,根据字符串表示返回包装类对象。例如:

    Boolean b=Boolean.valueOf("true");
    Float f=Float.valueOf("123.45f");
    

    也有一个静态方法parseXXX(String) 方法,根据字符串表示返回基本类型,如:

    boolean b=Boolean.parseBoolean("true");
    double d = Double.parseDouble("123.45");

    都有一个静态的toString方法,根据基本类型值返回字符串表示,如

    System.out.println(Boolean.toString(true));

    对于整数类型,字符串表示除了默认的十进制外,还可以表示为其他禁止,如二进制,八进制,十六进制,包装类有静态方法进行相互转换,比如

    System.out.println(Integer.toBinaryString(12345)); //换成二进制
    System.out.println(Integer.toHexString(12345)); //换成十六进制

    4.常用常量

    包装类除了定义静态方法和实例方法外,还定义一些静态变量,以Boolean类型为例有:

    public static final Boolean TRUE = new Boolean(true);
    public static final Boolean FLASE = new Boolean(false);

    所有数值都定义了MAX_VLAUE和MIN_VALUE,表示能表示的最大/最小,比如,Integer:

    public static final int MIN_VALUE=0x80000000;
    public static final int MAX_VALUE=0x7fffffff;

    Float和Double还定义了一些特殊数值,比如正无穷,负无穷,非数值

    5.Number

    6种数值类型都有一个共同的父类Number。Number是一个抽象类,定义如下方法:

    byte byteValue()
    short shortValue()
    int intValue()
    long longValue()
    float floatValue();
    double doubleValue();

    通过这些方法,包装类实例返回任意类型的基本数值类型。

    6.不可变性

     包装类都是不可变类,就是指实例对象一旦创建,没有办法修改对象。通过如下实现:

    • 包装类都申明了final,不能被继承
    • 内部基本类型是私有,而且声明了final
    • 没有定义setter方法

      之所以定义为不可变类,主要是为了程序更加简单安全,不用担心数据被意外改写,可以安全共享数据,特别是在多线程环境下。

    展开全文
  • Java8 基础数据类型包装类-Long

    千次阅读 2018-01-10 14:33:19
    Long包装类
  • 8个基本数据类型的包装类

    千次阅读 2017-02-20 15:03:55
    我们知道,java提供的8种基本数据类型并不支持面向对象的编程机制,不具备“对象“的...但是在某些时候,基本数据类型也会有一些制约,例如所有的引用类型的变量都继承了Object,都可以当成Object类型变量使用。但基
  • 面向对象编程之继承、多态、封装、抽象、接口、包继承类继承格式为什么要继承继承的特点继承的种类及关键字访问权限多态向上转型动态绑定方法重写重写和重载的区别比较多态的优点封装实现Java的封装封装的优点...
  • 三个特殊的:String Object 包装 String: String的两种实例化方式:直接赋值:String str1 = “hello world”;传统方法:String str2 = new String(“hello world”);字符串相等的比较:“equals”和...
  • 包装类(int与Integer)

    千次阅读 2019-09-07 11:04:02
    包装类(Wrapper Class): Java是一个面向对象的编程语言,但是Java中的八种基本数据类型却是不面向对象的,无法通过向上转型获取到Object提供的方法,而像String却可以,只因为String是一个对象而不是一个类型。...
  • 无意间都到一篇《走心的安卓工程师跳槽经验分享》,发现自己工作几年了,技术方面虽然有了飞跃的进步,可是不知道自己的技术到了什么...02抽象、接口继承实现区别(参考Effective Java 和接口 第18条:接口优于抽...
  • * 数字类型的包装类继承自Number * 其提供了如:IntValue,doubleValue这样的方法 * 作用是可以将当前包装类表示的数字以其他数字类型的形式返回。 * @author kaixu * */ public class IntegerDemo2 { public...
  • JAVA常用类之包装类

    千次阅读 2015-12-27 12:44:13
    JAVA语言包装类把基本数据类型转换为对象。每个JAVA基本类型在java.lang包中都有一个相应的包装类。 基本类型 包装类 boolean Boolean byte Byte char Character short Short int Integer long Long ...
  • 深入Java基础(一)——基本数据类型及其包装类

    万次阅读 多人点赞 2016-12-21 22:18:34
    这一系列打算慢慢地去接触源码,并且列出相关的题目,对于完全的初学者的话,我到时候会搜一套我认为比较好的培训机构的视频以及给些...2.数据类型的包装类理解(含源码解析);3.数据类型转换、装包拆包等一些小坑。
  • JAVA基本数据类型及其对应的包装类

    万次阅读 2018-09-10 17:18:13
    为解决此类问题 ,Java为每种基本数据类型分别设计了对应的类,称之为包装类(Wrapper Classes),也有教材称为外覆类或数据类型类。  基本数据类型对应的包装类如下图: 2、装箱和拆箱 2.1、什么是装箱...
  • 关于Java包装类的理解

    千次阅读 2017-07-14 16:03:42
    在学习了一段时间的Android之后,深知在Java基础体系中部分知识的缺失而使我在学习过程中碰到了许多不能理解的概念,就在最近,我打算重新学习Java语言的一些基础,就我现在大概几个星期系统的学习,...继承 9.多态
  • Effective Java 和接口 第16条:复合优先于继承 继承(inheritance)是实现代码重用的有力手段,但它并非永远是完成这项任务的最佳工作。使用不当会导致软件变得很脆弱。在包的内部使用继承是非常安全的,在那里,...
  • JAVA 虚机自动完成基本类与包装类的转换 基本类型的包装类都采用final修饰方法,因此无法继承它们扩展的新类,也无法重写它们的方法。 包装类包装类是基本类的扩展 int i=2, Integer i = new Integer(2); 其实...
  • java中的继承详解

    万次阅读 多人点赞 2020-12-19 08:43:00
    继承的描述在现实生活中,继承一般指的是子女继承父辈的财产。在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。例如猫和狗都属于动物,程序中便可以描述为猫...
  • Java 继承、多态与的复用

    万次阅读 多人点赞 2016-10-12 17:09:30
    本文结合Java的的复用对面向对象两大特征继承和多态进行了全面的介绍。首先,我们介绍了继承的实质和意义,并探讨了继承,组合和代理在的复用方面的异同。紧接着,我们根据继承引入了多态,介绍了它的实现机制和...
  • 变量尽量不要定义为包装类,尽量使用基本类型。int和Integer的区别1.存储原理不一样: int:属于简单类型,不存在“引用”这个概念;其数据是存储在栈空间中; Integer:属于继承自Object的类,是按照java存储对象的...
  • 包装类

    千次阅读 2014-11-19 09:51:11
    java.lang 每一个基本类型都一个包装类, Character,Integer,Double,Float,Boolean,Long,Short,Byte ...其他数值型包装类类似,静态方法,构造函数,静态属性都是一样,把类型改成相应的类型即可
  • 深入浅出,全方面理解java多态性,终极父类,instanceof,包装类等,还有一些踩坑点,不容错过
  • 继承格式:class 子类 extends 父类 { } ;... 1、私有方法不能重写(父类私有成员子类是不能继承的) 2、子类方法访问权限不能更低(public > 默认 > 私有) Java中继承的注意事项 1、J
  • java程序设计语言提供了两种机制,可以用来定义允许多个实现的类型:接口和抽象。这两种机制之间最明显的区别在于,抽象允许包含某些方法的实现,但是接口...可以Java只允许单继承,所以抽象作为类型定义受到...
  • java中的包装类和异常

    千次阅读 2016-09-26 19:13:46
    基本类型不是对象------没有从java.lang.Object继承,接口java.util.List只提供以引用类型为参数的方法add,基本类型不能重载add方法。 为了能够将对象作为异常抛出,该对象必须是Throwable类型,...
  • 或者在方法中,直接使用 “{}” 括起来的一段代码,表示一块代码区域。代码块里面的变量属于局部变量,只在自己所在区域(前后的{})内有效。根据代码块定义的位置的不同,我们又将代码块分成三种形式:局部代码...
  • 因此,对象的抽象是的具体化就是对象,也可以的实例是对象,实际上就是一种数据类型。具有属性,它是对象的状态的抽象,用数据结构来描述的属性。具有操作,它是对象的行为的抽象,用操作名和实现...
  •  - 基本数据类型的包装类(Wrapper class)  - 字符串相关类  - 时间处理类  - Math类  - File类 先从基本数据类型的包装类开始学习。  基本数据类型的包装类  为什么需要包装类? ...
  • 如果一个在定义时没有明确指明继承哪个,则默认继承Object。 在java中所有的都有一个公共的父类就是Object,一个只要没有明显的继承一个,则肯定就是Object的子类。如下两种代码表示是一样的: ...
  • python:基础

    万次阅读 多人点赞 2018-06-17 01:14:53
    oop把对象作为程序的基本单元,一个对象包含数据和操作数据的函数2、在python中,所有数据类型都视为对象,也可以自定义对象。自定义对象数据类型就是面向对象中的概念1、(Class): 用来描述具有相同的属性和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 196,867
精华内容 78,746
关键字:

包装类可以被其他的类继承