java基础知识点复习①
对java的认识
java是一门开源的面向对象的编程语言,具有面向对象的封装、继承、多态的特点。
封装:将类的某些信息隐藏起来,只提供特定的方法来访问或修改这些隐藏信息,从而防止直接操作类中的某些属性。是通过访问权限修饰符来实现封装的,public——protected——default——private访问权限依次减小,封装多使用private关键词修饰属性或者方法。封装可以提高代码的安全性、将内部实现封装起来提高代码的复用。
继承:通过extends实现子类继承父类,子类如果继承了父类就同时拥有父类公共的特征和行为(属性和方法),私有的属性也可以继承但是不能这直接访问,需要使用super.get/setXXX()方法(如果子类没有重写父类的get/set方法也可以直接使用this.getXXX方法,因为创建子类对象时,会先创建父类,父类的属性和方法与子类特有的属性和方法组成了子类的空间)。继承时不能继承父类的构造器;一个类只能继承一个类,一个类可以被多个类继承,允许多级继承;Object是所有类的父类(超类);子类不能继承父类中的静态变量,但是可以访问(共享不等于继承)。继承可以实现代码的提高复用性。
多态:从表现形式上看,多态就是调用同一个方法有不同的处理方式和处理结果,多态实现的条件有:①存在继承关系,②子类重写父类中的方法,③存在父类的引用指向子类的实例。多态使得代码更加灵活,在程序执行时根据具体的实例对象调用方法。
java与C和C++ 相比去除了难以理解的指针,并且实现了自动垃圾回收,可以让程序员专注于业务代码的编写。
java还做到了跨平台性。java虚拟机jvm是实现跨平台的关键,编写好的源代码是.java文件,经过编译后形成字节码.class文件,.class文件并不能直接被执行,需要jvm将字节码转换为机器能读懂的机器码并执行指令,所以只需要在不同的平台上安装不让的jvm就可以实现”一次编译,到处使用“。(具体的jvm加载过程属于jvm中类加载器内容)
java中的数据类型
java属于强类型语言,其中数据类型可以分为基本数据类型和引用数据类型。
8种基本数据类型:整数型、字符型、浮点型、布尔型
整数型:
byte:1个字节;short:2个字节;int:4个字节;long:8个字节。
字符型:
char:2个字节
浮点型:
float:4个字节;double:8个字节。
布尔型(boolean):只包含两个值true/false(不能用0/1表示)
应用类型:类、数组等
基本数据类型的包装类
java为8中基本数据类型提供了包装类,并提供了一系列的操作。
为什么要为基本类型提供包装类呢?
- 作为与基本类型对应的类 类型存在,方便涉及到对象的操作。
例如在集合中类型参数只能传入引用类型;在mybatis中对于从数据库中查询到的某些字段值为null时如果该字段在java代码中定义的是基本数据类型会封装为对应数据类型的默认值(以int为例,就会封装为0,0和null是不同的可能会导致错误),而引用数据类型默认值就是null。 - 提供一些属性如最大值、最小值,以及一些方法。
基本数据类型与包装类有什么不同?
包装类是以对象的形式,可以对其进行对象的一些操作,而八种基本数据类型不是对象。
使用方式不同,包装类使用new关键字创建对象,基本数据类型是通过关键字声明。
初始值不同,基本数据类型的初始值由具体数据类型定,包装类的初始值为null。
存储的位置不同,包装类的实例是存储在堆中,基本数据类型存储在栈中。
包装类的自动封箱与自动拆箱
装箱就是将基本数据类型封装为包装类,拆箱恰好是反过来将包装类型转为基本数据类型。
自动装箱和拆箱就是不用写显示的代码,内部直接进行封箱和拆箱。
//自动封箱Integer a = 4;//自动拆箱Integer integer = new Integer(4);int b=integer;System.out.println(b==a);//true
在封箱的时候底层默认调用的是valueOf()静态方法,在拆箱的时候底层默认调用的是intValue()方法。
值得注意的是在调用valueOf()的时候存在一个问题:
public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);}
当值在-128127之间时会取出Integer中的私有类IntegerCache里面的cache数组里的数据。所以在-128127之间的值是同一个值,而区间之外的值是通过new关键字创建出来的新的对象使用==判断时会出现相同的数字结果为false。