java复习
java基础
JDk、JRE和JVM的区别
JDK:让其java程序开发者进行使用,它包括JRE,java运行的环境,还包含了其他供开发者使用的包。
JRE:JVM运行必须的包依赖的环境都在JRE中
JVM:在运行时,让其字节码转换成特定的机器码,JVM提供了内存管理/垃圾回收和安全机制等。这种独立于硬件和操作系统,正是java程序可以一次编写多次执行的原因。
JDK>JRE>JVM
java的三大特性
-
封装
封装就是将其对象的属性私有化,外部可以进行对其访问,也可以对其不访问。 -
继承
新类的定义可以增加新的数据和增加新的功能,也可以用父类的功能,但是不能进行选择性的继承父类的功能。
注意以下三点:
子类不能继承父类的private的属性和方法
子类可以单独拥有自己的属性与方法
子类也可以对父类的功能进行重写 -
多态
java多态就是一种行为不同的表现形式和表现能力。
多态有两种表现形式:继承和接口。面向对象和面向过程
面向过程
优点:性能比面向对象的高
缺点:没有面向对象易于维护,易扩展、易复用面向对象
优点:易维护、易扩展、易复用,具有封装继承多态三种特性,可以设计出低耦合的程序系统
java和C++的区别
java和c++都是面向对象的语言
两者都能进行继承,java是单继承,c++是多继承。
java具有自动内存管理机制,而c++没有
java不提供指针直接进行访问内存java基本数据类型
byte | short | int | long | double | float | char | boolean | |
---|---|---|---|---|---|---|---|---|
字节大小 | 1 | 2 | 4 | 8 | 8 | 4 | 2 | 1 |
占位大小 | 8 | 16 | 32 | 64 | 64 | 32 | 16 | 8 |
局部变量和成员变量的区别
1、成员变量存在类中,局部变量存在方法中,且局部变量不能让private、public、static等修饰,
2、成员变量是属于对象的一部分,存储在堆内存中,局部变量存储在栈内存中;成员变量随着对象的创建而存在,而局部变量随着方法的调用而消失。
3、成员变量在创建的时候会自动进行赋值,而局部变量不会进行自动赋值。
静态方法和实例方法的区别
1、静态方法在调用的时候可以直接进行“类名.方法名”,或者“对象名.方法名”,
实例方法只能调用“对象名.方法名”
2、静态方法在调用本类的时候只能调用本类中的静态成员(静态方法和静态变量),而实例方法则不一样。
构造方法
特性
1、构造方法名必须与方法名保持一致
2、在返回类型的时候不能用其void,不能调用return
3、构造方法的调用在new的时候进行自动调用
4、构造方法可以对其重载
父子关系的构造方法执行顺序
构造器不能重写和继承
先父类再子类
hashCode()与equals()的相关规定:
1、如果两个对象相等,那么他们的hashCode,一定相等
2、如果两个对象的hashCode相等,那么他们的对象不一定相等
3、如果两个对象相等,那么他们的调用equals方法一定相等
==与equals的区别:
==比较的是两个对象的地址是否相等,即判断两个对象是否相等,而equals相比较的是两个对象的数值是否相等。
final关键字
1、final主要进行修饰:属性,方法,类
2、对于final变量,如果是基本数据类型的变量,其数值一旦在初始化之后就不能进行改变;如果是引用类型的变量,则在对其初始化之后就不能再让其指向另一个对象。
3、final修饰一个类的时候,那么这个类就不能被继承。
4、final修饰一个方法的时候,第一个原因就是把方法锁定,防止任何继承类修改它的含义。第二个就是提高效率。
接口与抽象类:
1、接口默认的修饰是public,接口中的所有方法不能在接口中实现;抽象类中可以有非抽象方法。
2、一个类中可以实现多个接口;而抽象类只能被继承一个。
3、接口必须实现所有方法;抽象类则不需要实现所有方法。
4、接口不能被实例化;抽象类可以进行实例化,但是不是直接进行实例化(new 类名()),而可以进行间接在子类进行实例化。
java集合
集合
集合类存放于Java.util包中,主要有3种集合:list,set和map集合
list接口
list接口是java中常用的数据类型,javaList中共有三个实现类:ArrayList,vector和LinkedList
ArrayList(数组)
1、ArrayList是java最常用的list集合,底层运用的是数组,能够快速访问数据,数组之间不能有间隔,但是增加和删除较慢,在进行增加和删除的时候需要进行复制和移动等操作。
2、ArrayList是动态数组,容量是动态增长,当容量需要进行扩增的时候,是以:原来容量*1.5。
Vector(数组实现,线程同步)
Vector内部同样是数组进行实现,但是它的线程同步,也就是只有一个线程进行写,因此它是线程安全,但是它的访问速度比较慢。
LinkList(链表)
LinkList是双向链表,增加和删除效率高,但是查询与遍历较慢,它的线程不安全。
内部结构如图所示:
ArrayList与LinkList的异同:
1、ArrayList底层是数组,LinkList的底层是双向链表。
2、ArrayList支持随机访问,随机访问速度较快,而LinkList访问速度慢;
ArrayList增加和删除都比较慢,LinkList增加和删除较快。
3、两者都线程不同步,也就是线程不安全。
4、ArrayList有具体容量,但是ArrayList在容量满后,会每次增加0.5倍,LInkList无具体容量
ArrayList与Vector的区别:
1、Vector的所有方法都是同步,可以保证多个线程安全的访问一个方法,因此当一个线程访问方法的时候会在同步时进行浪费过多的时间。
2、在不要求线程安全时,建议使用ArrayList,因为这样会速度快的不少。