Java基础知识总结
1、java语言的特点:简单易用,开源,跨平台,面向对象,可移植性,安全。多线程。
2、JDK、JRE、JVM的作用及关系:
作用: JVM:保证Java语言跨平台
JRE:Java程序的运行环境
JDK:Java程序的开发环境
关系:JDK:JRE+工具
JRE:JVM+类库
3、关键字
定义:被java语言赋予特定含义的单词
特点:全部小写
注意:goto和const作为保留字存在
4、标志符
定义:就是给类、接口、方法、变量等起名字的字符序列
组成规则:可以由英文大小写字母,数字以及$和_组成,但不能以数字开头,不能是java中的关键字,还有区分大小写。
5、注释
定义:就是对程序进行解释说明的文字。
分类:单行注释,多行注释和文档注释。
作用:解释说明程序,提高代码的阅读性。可以帮助我们调试程序。
6、常量
定义:在程序执行的过程中,其值不发生改变的量
分类:字面值常量和自定义常量
7、变量
定义:在程序执行的过程中,其值在某个范围内可以发生改变的量
8、数据类型:
说明:Java是一种强类型的语言,针对每种数据都提供了对应的数据类型。
分类:基本数据类型(4类8种)
(1)整型:int、short、long、byte。
(2)浮点型:float、double。
(3)字符型:char。
(4)布尔型:boolean。
注意:整数默认是int类型,浮点数默认是double,长整数要加L或者l,单精度浮点数要加F或者f。
引用数据类型:类、接口、数组。
9、数据类型转换
1)boolean类型不参与转换
2)默认转换:
从小到大:byte,short,char--int --long--float--double
byte,short,char 同类型相加不互相转换,直接转成int类型参与运算。
如:byte型数据+byte型的数据会先转为int再相加。
3)强制转换
从大到小,可能有精度的损失,不建议使用。
格式:目标数据类型 变量名 = (目标数据类型)(被转换的数据)。
10、控制跳转语句
break:中断
作用环境:用在循环和switch语句中
作用:跳出单层循环或者跳出多层循环。
continue:
作用环境:用在循环中
作用:跳出单层循环的一次,循环可以继续执行下一次。
return:返回
作用:用于结束方法。一旦遇到return,程序就不会再继续执行下去。
11、方法重载:
定义:在同一个类中,方法名相同,参数列表不同,与返回值无关。
12、数组:
定义:存储同一种数据类型的多个元素的容器。
特点:每一个元素都有编号,从0开始,最大编号是长度-1。编号就是索引。
定义格式:数据类型[]数组名(推荐此方式);或 数据类型 数组名[];
初始化方式:
1)动态初始化:只给长度,系统给默认值。
如:int[]arr=new int[3];
2)静态初始化:给出值,系统决定长度
如:Int []arr=new int[]{1,2,3};
13:Java的内存分配:分成5部分。
1)栈:存储局部变量。
2)堆:存储所有new出来的。
3)方法区:存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
4)本地方法区:系统相关。
5)寄存器:cpu使用。
14:局部变量:定义在方法中或者方法声明上的变量。
15:栈内存和堆内存的区别
栈:数据使用完毕,就消失。
堆:每一个new出来的都有地址,每一个变量都有默认值。数据使用完毕后,在垃圾回收器空闲时回收。
如:byte,shor,int ,long的默认值都是0;
float,double的默认值是0.0;
char的默认值是 \u0000;
boolean的默认值是false;
引用类型的默认值是null。
16:面向对象(OOP)
特征:封装、继承、多态、抽象
17、pribate关键字
私有的意思,可以修饰成员变量和成员方法。
特点:被private修饰的成员只能在本类中被访问。
18、this关键字:
代表当前类的引用对象。哪个对象调用方法,该方法内部的this就代表那个对象。
应用:解决了局部变量隐藏成员变量的问题;
作为返回值,返回类的引用
19、构造方法:
作用:用于对对象的数据进行初始化
特点:方法名和类名相同,没有返回值类型,void都没有,没有返回值。
注意:如果我们没写构造方法,系统将提供一个默认的无参构造方法。
如果我们给出了构造方法,系统将不再提供默认的构造方法,
这个时候,我们要使用无参构造方法,必须自己给出,
推荐:自己手动给出无参构造方法。
20、继承:
定义:把多个类中相同的成员给提取出来定义到一个独立的类中。然后让这多个类和该独立的类产生一个关系,
这多个类就具备了这些内容。这个关系叫做继承。
继承的好处:提高了代码的复用性,提高了代码的维护性,是多态的前提。
弊端:打破了封装性,让类的耦合性增强。
21:Java中继承的特点:
1)类只支持单继承,但可以多层继承。
22:final关键字。
1)最终的意思,可以修饰类,方法,变量。
2)特点:被修饰的类不能被继承,被修饰的方法不能被重写,被修饰的变量是一个常量。
23、多态:
1)同一对象在不同时刻体现出来的不同状态。
2)多态的前提:有继承或者实现关系。有方法重写。有父类或者接口引用指向子类对象。
3)多态的好处:提高了代码的维护性,提高了代码的扩展性。
24、抽象类:
抽象类和抽象方法必须用关键字abtract修饰
抽象类不一定有抽象方法,但是有抽象方法的类一定是抽象类。
抽象类不能被实例化
抽象类的子类:是一个抽象类或者是一个具体类(这个具体类必须重写抽象类中的所有抽象方法)
抽象类有构造方法(用于子类访问父类数据的初始化)
25、接口
特点:接口不能被实例化。
、
实现类:是一个抽象类。
是一个具体类,这个类必须重写接口中所有的抽象方法。
接口中成员的特点:1)成员变量只能是常量(默认修饰符public static final)
2)没有构造方法
3)成员方法只能是抽象的(默认修饰符public abstract)
26、String类的概述和使用
字符串的特点:一旦被赋值,就不能改变(字符串的内容不能改变,而不是引用不能改变)。
27、StringBuffer
用字符串拼接,比较耗时并且耗内存,java对此提供了缓冲区类,
特点:字符串的内容可以改变。线程安全。
28、StringBuilder
线程不安全,字符序列可改变。
28、自动拆箱和自动装箱。
自动装箱:基本类型转为引用类型 如:Integer i = 100相当于 Integer i =new Integer(100);
自动拆箱:应用类型转为基本类型 i=i+200;Integer i=intValue(i)+200;
29、List的子类(有序,可重复)
ArrayList:线程不安全,底层使用数组实现,查询快,增删慢,效率高。
LinkList:线程不安全,底层使用链表实现,查询慢,增删慢,效率高。
Vector:线程安全,底层使用数组实现,查询快,增删慢,效率低。
30、泛型
(1)概述:泛型是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊类型。
(2)格式:<数据类型> 里面的数据类型一定是引用类型。+
(3)好处:把运行时期的问题提前到了编译期间,避免了强制类型的转换。
(4)泛型中的通配符:
作用:可以解决当具体类型不确定的时候,这个通配符就是?;当操作类型时,不需要使用类型的具体功能时,
只使用Object类中的功能。那么可以用?通配符来表示未知类型。
泛型限定(在集合中使用):上限 ?extends E:可以接收E类型或者E的子类型对象。
下限:? super E: 可以接收E类型或者E的父类型对象。
31:可变参数(...):
用在函数的参数上,当操作同一个类型数据的个数不知道的时候,可以用这个方式,这个可变参数
可以接收任意个数同一类型的个数。
32:Set集合(无序,唯一)
1)HashSet集合:底层数据结构是哈希表(是一个元素为链表的数组)
哈希表的底层依赖两个方法:hashcode()和equals()保证了元素的唯一性;
执行顺序:首先比较哈希值是否相同
如果相同:继续执行equals()方法,
如果返回true;元素重复,不添加。
如果返回false.直接把数据添加到集合,
如果不同:直接把元素添加到集合。
2)TreeSet集合:1)底层是一个自平衡的二叉树
2)保证元素的排序方式
自然排序(元素具备比较性):让元素所属的类实现comparable接口
比较器排序(集合具备比较性):让集合构造方法接收comparator实现类对象。
33、Collection集合总结
Collection
|——List(有序,可重复)
|——ArrayList
底层数据结构是数组,查询快,增删慢。线程不安全,效率高。
|——Vector
底层数据结构是数组,查询快,增删慢,线程安全,效率低。
|——LinkedList
底层数据结构是链表,查询慢,增删快。线程不安全,效率高。
|——Set(无序,唯一)
|——HashSet
底层数据结构是哈希表。依赖hashCode()和equals()保证元素唯一。
|——LinkedHashSet
底层数据结构是链表和哈希表,由链表保证元素有序
由哈希表保证元素唯一。
|——TreeSet
底层数据结构是红黑树,有自然排序和比较器排序。
根据比较的返回值是否是0保证元素唯一
34、Map
1)将键映射到值得对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
2)Map和Collection的区别
1.Map存储的是键值对形式的元素,键唯一,值可以重复。
2.Collection存储的是单独出现的元素,子接口元素唯一,子接口List元素可重复。
35、Collections和collection的区别。
collection是单列集合的顶层接口,有两个子类接口List和set
collections是针对集合进行操作的工具类,可以对集合进行排序和查找等。
36、编译期异常和运行时异常的区别
编译期异常必须要处理的,否则编译不通过。
运行期异常可以不处理,也可以处理。
37、throw和throws的区别
throw:在方法体中,后面跟的是异常对象名,并且只能是一个,
throw抛出的是一个异常对象,说明这里肯定有一个异常产生了。
throws:在方法声明上,后面跟的是异常的类名,可以是多个。
throws是声明方法有异常,是一种可能性,这个异常并不一定会产生。
38、IO流
1)作用:IO用于在设备间进行数据传输的操作。
2)分类:
a:流向:输入流 读取数据
输出流 写出数据
b:数据类型
字节流:字节输入流
字节输出流
字符流:字符输入流
字符输出流