java复习(持续更新中)

java基础

JDk、JRE和JVM的区别

JDK:让其java程序开发者进行使用,它包括JRE,java运行的环境,还包含了其他供开发者使用的包。
JRE:JVM运行必须的包依赖的环境都在JRE中
JVM:在运行时,让其字节码转换成特定的机器码,JVM提供了内存管理/垃圾回收和安全机制等。这种独立于硬件和操作系统,正是java程序可以一次编写多次执行的原因。
JDK>JRE>JVM

java的三大特性

  1. 封装
    封装就是将其对象的属性私有化,外部可以进行对其访问,也可以对其不访问。

  2. 继承
    新类的定义可以增加新的数据和增加新的功能,也可以用父类的功能,但是不能进行选择性的继承父类的功能。
    注意以下三点:
    子类不能继承父类的private的属性和方法
    子类可以单独拥有自己的属性与方法
    子类也可以对父类的功能进行重写

  3. 多态
    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,因为这样会速度快的不少。

猜你喜欢

转载自blog.csdn.net/weixin_45150104/article/details/104886688
今日推荐