助你加薪!2021年春招面向编程看这一篇就够了,让你面试无忧! (4)

格式:

public class Demo { public static void main(String[] args) { Book.Info info = new Book.Info(); info.say(); } } class Book { static class Info { public void say(){ System.out.println("这是一本书"); } } } 包装类

在Java中有一个设计的原则“一切皆对象”,那么这样一来Java中的一些基本的数据类型,就完全不符合于这种设计思想,因为Java中的八种基本数据类型并不是引用数据类型,所以Java中为了解决这样的问题,引入了八种基本数据类型的包装类。

助你加薪!2021年春招面向编程看这一篇就够了,让你面试无忧!

以上的八种包装类,可以将基本数据类型按照类的形式进行操作。

但是,以上的八种包装类也是分为两种大的类型的:

Number:Integer、Short、Long、Double、Float、Byte都是Number的子类表示是一个数字。

Object:Character、Boolean都是Object的直接子类。

助你加薪!2021年春招面向编程看这一篇就够了,让你面试无忧!

拆箱和装箱操作

以下以Integer和Float为例进行操作

将一个基本数据类型变为包装类,那么这样的操作称为装箱操作。

将一个包装类变为一个基本数据类型,这样的操作称为拆箱操作,

因为所有的数值型的包装类都是Number的子类,Number的类中定义了如下的操作方法,以下的全部方法都是进行拆箱的操

作。

助你加薪!2021年春招面向编程看这一篇就够了,让你面试无忧!

装箱操作:

在JDK1.4之前 ,如果要想装箱,直接使用各个包装类的构造方法即可,例如:

int temp = 10 ; // 基本数据类型 Integer x = new Integer(temp) ; // 将基本数据类型变为包装类 在JDK1.5,Java新增了自动装箱和自动拆箱,而且可以直接通过包装类进行四则运算和自增自建操作。例如: Float f = 10.3f ; // 自动装箱 float x = f ; // 自动拆箱 System.out.println(f * f) ; // 直接利用包装类完成 System.out.println(x * x) ; // 直接利用包装类完成 字符串转换

使用包装类还有一个很优秀的地方在于:可以将一个字符串变为指定的基本数据类型,此点一般在接收输入数据上使用较多。

在Integer类中提供了以下的操作方法:

public static int parseInt(String s);//将String变为int型数据

在Float类中提供了以下的操作方法:

public static float parseFloat(String s);//将String变为Float

在Boolean 类中提供了以下操作方法:

public static boolean parseBoolean(String s);//将String变为boolean

基本数据类型和包装类型的区别

1、包装类是对象,拥有方法和字段,对象的调用都是通过引用对象的地址,基本类型不是
2、包装类型是引用的传递,基本类型是值的传递
3、声明方式不同,基本数据类型不需要new关键字,而包装类型需要new在堆内存中进行new来分配内存空间
4、存储位置不同,基本数据类型直接将值保存在值栈中,而包装类型是把对象放在堆中,然后通过对象的引用来调用他们
5、初始值不同,eg: int的初始值为 0 、 boolean的初始值为false 而包装类型的初始值为null
6、使用方式不同,基本数据类型直接赋值使用就好 ,而包装类型是在集合如 coolection Map时会使用

Integer类型的重点 Integer a=1000,b=1000; System.out.println(a==b); /** 上述代码返回false,因为 IntegerCache.low = -128 IntegerCache.high = 127 所以上面`Integer a = 1000,b = 1000;`其实都是`new Integer(1000);`所以分配的内存地址肯定不一样,所以`==`比较就成`false`了 */ 抽象类

抽象类必须使用abstract class声明

一个抽象类中可以没有抽象方法。抽象方法必须写在抽象类或者接口中。

格式:

abstract class 类名{ // 抽象类 } 抽象方法

只声明而未实现的方法称为抽象方法(未实现指的是:没有“{}”方法体),抽象方法必须使用abstract关键字声明。

格式:

// 抽象类 abstract class 类名{ public abstract void 方法名() ; // 抽象方法,只声明而未实现 } 不能被实例化

在抽象类的使用中有几个原则:

抽象类本身是不能直接进行实例化操作的,即:不能直接使用关键字new完成。 不能被我们创建,但是jvm虚拟器可以创建。

一个抽象类必须被子类所继承,被继承的子类(如果不是抽象类)则必须覆写(重写)抽象类中的全部抽象方法。

常见问题

1、 抽象类能否使用final声明?

不能,因为final属修饰的类是不能有子类的 , 而抽象类必须有子类才有意义,所以不能。

2、 抽象类能否有构造方法?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgwzyj.html