关于Integer、Math、String类的一些思考

        我们知道java是面向对象的语言,而面向对象就是最难理解和搞懂的内容,今天我们就对Integer、Math、String这三个类谈一下java面向对象的技术应用以及我们在做面向对象时的一些参考价值。

       在Integer类中我们都清楚拆箱和装箱,这是学习java必须知道的内容。当然对于拆箱和装箱的一些思考,我们也会在后面去出相关的博文。

       现在我们先看Integer装箱valueOf的代码:

        

    

        这里涉及到一段代码:IntegerCache.low,我们看这个IntegerCache类,就在这个方法的上面。

        关于Integer、Math、String类的一些思考_第1张图片

                

            在这段代码中,我们看到了static{}静态代码块,也就是-128到127这个值在执行代码的时候早已经加到了静态区cache数组中,需要的时候直接从静态区中cache数组去调用就可以了。利用了静态缓存,速度上显然是显而易见的。

            这是不是给我们一些思考,如果我们需要一些数据在程序的执行过程中加快提取速度,而这些数据不是很大时,是不是可以考虑这种方法,去提升程序的速度,充分利用静态缓存。使程序不用再重新开辟内存。

            这也是我们学习java面向对象的一个可取的思路线索吧。

            同时还有一点,IntegerCache是一个Integer的内部类,专门操作Integer里面的静态缓存数据的。实现了数据和逻辑的分离。这一点不也是我们学习的内容吗?我们如何让数据和逻辑分离开来,更好地程序的可读性和面向对象的思维,是不是可以应用这样的方法呢,而如果说这个数据又是这个类所特有的,就可以做为内部类吧。这也是我们什么时候使用内部类的原因吧。

            再则看Math和String类。

            我们先看API中有这样的方法:

            在String类中:

                    

        在Math类中:

                

        

        这两个都是静态方法,我们都知道静态方法直接用以下方式调用

        类名.方法名

        但我们可不可以不走寻常路。

        String类的方法copyValueOf左边的值是返回值,静态方法返回字符串

        我们不考虑这个静态,直接new String()然后取这个方法

        关于Integer、Math、String类的一些思考_第2张图片

        

    我们发现可以执行。

    我们并没有用String.copyValueOf()

    我们再看Math

    关于Integer、Math、String类的一些思考_第3张图片

    

 我们发现这句报错了。

    为什么呢。

    我们看一下Math类

    

    

    Math无参构造器私有化了,不允许我们进行外面new

    而String的构造器是可以new的

    这是不是告诉我们一个信号,值得我们学习呢?

    Math是一个数学的工具类,提供一些数学方法让我们去使用,这个类不需要我们去new,严格按照静态方法的使用原则,那么我们以后如果遇到这种工具类,不需要去执行构造器的时候,是不是可以采用private严格让用户遵守我们的方法去使用呢。

    综上所述:

    1、            如果有一些数据只有这个类能够使用,我们是不是考虑一下内部类。

    2、            如果类中的数据不是很大时,提升速度,是不是要以把数据放入静态缓存,在运行过程中不再另开辟内存了。

    3、            如果这个类中的方法全部都是静态的工具类方法,是不是限制一下开发者不能去new 我们的工具类呢,别忘了new 是要在堆里另开辟内存的,而直接使用静态方法是提升速度的。

    后续还会带来对java面向对象的思考,敬请关注,其目的对那些小白、小小白、小白白们走进java 世界,灵活运用面向对象尽自己的一份力量吧!





你可能感兴趣的:(JAVA基础,Java,编程基础,面向对象,编程思想,计算机)