Java复习
-
JVM
java之所以能在多平台运行时因为JVM充当翻译官的作用
-
JRE
是java的运行时的环境,包含jvm和运行的时候所需要的核心内库,想运行一个已有的java程序只需要安装jre就行了
-
JDK
是java程序开发工具包,包含JRE和开发人员使用的工具,其中的开发工具:编译工具(javac.exe)和运行工具(java.exe)
-
数据类型
-
小模块复习
1.1方法
- 方法传参的时候,如果参数是基本数据类型,在方法中修改参数,实参不会改变,但是如果参数是引用数据类型就会修改实参
面向对象编程
1.1继承
关键字:extends
特点:
构造方法:
子类中所有的构造方法默认都会访问父类中无参的构造方法,因为子类会继承父类中的数 据,可能还会用到父类中的数据,所以必须先初始化父类的数据
ps:注意 继承后私有方法不能被重写(父类私有成员子类是不能继承的)
子类方法访问权限不能更低(public>默认>私有)
1.2多态
同一个对象表现出不同的形态
访问特点:成员变量:编译看左边,执行看左边,可以访问子类重写的功能,不能访问自定义的方法
成员方法:编译看左边,执行看右边 ps:因为成员方法有重写,而成员变量没有,对于调用父类成员变量还是子类成员变量,只与变量的声明类型有关系,与实例化的类型没有关系。而对于调用父类方法还是子类方法,只与变量的实例化的类型有关系,与声明的类型没有关系
向上转型:多态 向下转型:类型强制转化
1.2.1抽象类
抽象类和抽象方法必须使用abstract修饰 ,但是成员变量不行
有抽象方法的类一定是抽象类
抽象可以看做一个大类的概念,不能实例化,只能通过继承多态的方式实例化
抽象的子类必须重写抽象类的所有方法或者本身就是一个抽象类
1.3接口
1.3.1:成员变量
只能是常量,默认修饰符public static final
1.3.2:构造方法
接口没有构造方法,接口主要是对行为抽象,是没有具体存在的‘
成员方法默认都是抽象方法
在jdk8,有静态方法:只能被接口调用
默认方法:不是抽象方法,不强制被重写,用于升级接口
jdk9,有私有方法
抽象类和接口的区别
抽象是对于一个具体事物的抽象,大多表示一个事物具有的最基本的行为和属性,而接口是对于行为的抽象表示一个具体的行为而不关心谁去做这个行为
标准库
java的基本数据类型:整数类型,浮点类型,布尔类型,字符类型;引用数据类型:class ,接口,数组
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
float | Float |
double | Double |
char | Character |
boolean | boolean |
long | Long |
string对象
-
创建方式: new Strin() 每次创建都会重新开辟一块地址,每次获得的对象不一样
String s = “abc” 只要字符列相同即顺序和大小写相同,无论在程序中出现几次都是同一个 String对象
特点:字符串定义之后就不可变了,每次重新声明一个字符串都会开辟一个新的地址
常用方法:equals()比较字符串对象的内容是否相同
stringBuilder
- 创建方式:new StringBuilder()创建一个空白可变的字符串对象
new StringBuilder(String str)根据字符串的内容创建一个可变的字符串对象
特点:字符串可变
常用方法:append(任意数据类型) 添加数据并且返回数据本身,会改变对象本身
reverse反转 反转字符串对象
StringBuilder与string相互转化
StringBuilder对象.tostring()方法 //将StringBuilder转化为string
StringBuilder(stirng) //构造方法,将字符串转化为StringBuilder
Array对象
- 创建方式: Array的构造方法是用private修饰的,所以只能用newinstance创建
Integer对象
-
创建方式:
integer()//不推荐 valueof()
-
和字符串相互转化
int ------ string
…public static String valueof(int i)
string -----int
…integer.valueof()
…public int intValue()
…public int parseInt
集合基础
-
集合分为单列集合和双列集合
单列:List Set
双列:Map
都是接口需要具体的实现类
一.List集合
-
特点:
有序:存储和取出的元素顺序一致,简单来说就是有索引
可重复:存储的元素可以重复
-
特有方法
add(index,element) 因为collection无索引,这方法在指定的缩引加入元素
remove()
set()
get()
以上方法都与索引有关
1.1ArrayList
在java中的数组的长度是固定的,没有push和pop方法所以有了集合的应用
集合类的特点:提供一种存储空间可变的
构造函数: ArrayList() 创建一个空的集合对象
方法: Boolean add(要添加的元素) 将指定的元素追加到此集合的末尾
参数2 index 在指定的索引位置插入指定的元素
Boolean remove(obj) 删除指定的元素,返回删除是否成功
Element remove(index) 删除指定索引的元素,返回被删除的元素
Element set(index,element) 修改指定的索引的元素返回修改的元素
Element get(index)
源码分析:在jdk7中
ArrayList list = new ArrayList(); //底层创建了长度为10的object【】数组 elementData
list.add(123); //elementData[0] = new Integer(123);
...//如果发现容量不够,则扩容,默认情况下扩容1.5倍,同时将原来的数组复制到新的数组里面
在jdk8中,构造函数不再初始化一个默认的数组而是在add方法里面创建
1.2linkList
底层的数据结构是链表,因为如果数组增删性能满,查询快,链表增删快,查询慢
特有方法:
void addFirst(e)
addLast(e)
E getFirst()
E getlast()
E removefirst
E removelast
源码分析:
内部是双向链表
private static class Node<E> {
E item;
LinkedList.Node<E> next;
LinkedList.Node<E> prev;
Node(LinkedList.Node<E> var1, E var2, LinkedList.Node<E> var3) {
this.item = var2;
this.next = var3;
this.prev = var1;
}
}
1.3集合的遍历
-
Iteratior:迭代器,集合的专用遍历方式
方法:next() 返回迭代的下一个元素
hasnext() 如果还有可以迭代的对象,则返回true
- 集合有个方法 iterator(): 返回这个集合的遍历器对象
!! 并发修改异常
记住:当一个集合的迭代器(特指iterator)被创建出来的时候,集合的迭代次数就已经被确定,如果在之后在add元素就需要新创建一个迭代器
-
列表迭代器 ListIterator
比迭代器多了一个逆向迭代,用法和next和hasnext方法相同,但是注意光标最开始是左边
迭代器有一个add方法 解决了并发修改异常
-
增强for循环
增强for:简化数组和collection集合的遍历
- 实现了iterable接口的类允许其对象成为增强for语句的目标
- 内部实现了迭代
二:Set集合
集合特点:不包含重复元素,没有带索引的方法,所以不能使用普通的for循环
2.1hashset
- 底层数据结构为哈希表,无序的,对集合的迭代顺序不作任何保证,线程不安全的,可以存储null
jdk8哈希表是数组,而数组每一项都是链表
2.2Linkhashset
作为hashset的子类,遍历其内部数据的时候,可以按照添加时候的数据遍历,因为在hashmap结构上面每个新加入的元素的多了两个引用指向上一个和下一个元素,提高了频繁遍历的性能
三:Map集合
3.1.map的概述
Interface Map<k,v> k.键的类型 v,值的类型,将键映射到值的对象,不能包含重复的键,每个键可以映射到最多一个值
- Map中的key:无序的,不可以重复的。使用set存储所有的key—》key所在的类要重写equals和hashcode()方法
- map中的vaule:无序的,可以重复的,使用collection存储所有的value
- 一个键值对构成一个Entry对象
- map中的entry:无序的,不可以重复的,使用set存储所有的entry
常用方法: V put(K key ,V value)
remove(k) 根据值删除键值对元素
clear:移除所有
查: get(key)根据键查找值 ; keySet() 获取所有键的集合 Collection values() 获取所有值的集合
** 遍历方式:
1.获取所有键的集合,用keyset()方法实现
2.遍历键的集合,获取到每一个键,用for( :)
remove(k) 根据值删除键值对元素
clear:移除所有
查: get(key)根据键查找值 ; keySet() 获取所有键的集合 Collection values() 获取所有值的集合
** 遍历方式:
1.获取所有键的集合,用keyset()方法实现
2.遍历键的集合,获取到每一个键,用for( :)
3.根据键去找值用get(key)