Java基础总结:
- Java语言的特点:
- JAVA三大块:
- JVM(Java虚拟机)与垃圾回收机制:
- JDK,JRE,JVM的关系:
- JDK的安装以及环境变量的配置:
- JVM内存布局:
- 注释:
- API文档:
- 标识符和命名规则:
- Java的关键字:
- 基本数据类型:
- String:
- String、StringBuffer与StringBuilder之间区别
- 序列化:
- 访问权限控制符:
- 集合:
- 面向对象:
- 多态的特性:
- 逻辑运算符:
- 异常处理:
- 多线程与并发:
- IO流:
- 网络编程:
- 反射:
- 数据结构:
- 泛型:
- 接口为什么不能被实例化:
- 内部类的种类:
- 匿名内部类的特征:
- 最后:一些的深层理解及解释:
- 感谢你的阅读,希望这篇文章能帮助到你!
Java语言的特点:
-
特点一:面向对象
a.两个基本概念:类,对象
b.三大特征:封装,继承,多态 -
特点二:健壮性
吸收了C/C++语言的特点,去掉了影响其健壮性的的部分(如:指针,内存的申请,与释放等),提供了一个相对安全的内存管理和访问机制。
-
特点三:跨平台性
a.跨平台性:Java语言编写的应用程序在不同的系统平台上都可以运行。
b.原理:只要在需要运行的Java应用程序的操作系统上,先安装一个Java虚拟机,即可。由JVM负责JAVA程序在该系统上的运行。
JAVA三大块:
JavaSE: 它是整个java开发的基础,可以开发出一些桌面级的应用程序!【坦克大战、学生管理系 统】
JavaEE:企业级应用开发 【京东、办公自动化管理系统、物流系统】
JavaME: 移动端开发,被淘汰了! 【诺基亚的塞班系统】
JVM(Java虚拟机)与垃圾回收机制:
-
Java虚拟机:
- JVM是一个虚拟的计算机,具有指令集并使用不同存储区域
- 对于不同平台有不同的Java虚拟机,有不同的虚拟机
- 只有某平台提供了对应的Java虚拟机,Java程序才能在此平台运行
- Java虚拟机机制屏蔽了底层运行平台的区别,实现了"一次编译,到处运行"。
-
Java的运行机制及运行过程:
- 创建一个后缀名为.java的文件
- 编译文件将.java文件编译为.class文件
- .class文件进入虚拟机运行,输出结果
-
Java垃圾回收机制:
- 不再使用的内存空间应回收——垃圾回收
a.在C/C++等语言中,由程序员负责回收无用的内存
b.Java语言消除了程序回收无用内存空间的责任:它提供一种系统级线程跟踪储存空间的分配情况。并在JVM空闲时,检查并释放那些可被释放的储存空间。 - 垃圾回收在Java程序运行过程中自动进行,程序员无法精准控制和干预。
- 不再使用的内存空间应回收——垃圾回收
-
既然Java有自动的垃圾回收,还会出现内存泄漏和内存溢出吗?
答案:还是会出现,与你写的程序有关,有时候会导致垃圾收集器无法回收
JDK,JRE,JVM的关系:
-
JDK(Java开发工具包):
JDK是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。安装了JDK就可以不用单独安装JRE了。
-
JRE(Java运行环境):
包括Java虚拟机和Java程序所需的核心内库等,如果想要运行一个开发好的Java程序,计算机只需要安装JRE即可。
JDK = JRE + 开发工具集(例如Javac编译工具)
JRE = JVM + JAVA SE标准库类
JDK的安装以及环境变量的配置:
详细的安装和配置教程扣一下这里!
JVM内存布局:
程序计数器,虚拟机栈,本地方法栈,堆,方法区
注释:
Java注释分为单行注释,多行注释以及文本注释
单行注释:对一行代码进行注释,两个//
多行注释:对多行代码进行注释,/* 代码块*/,
快捷键选中文本后Ctrl+Shift+/
文本注释:说明方法,类的注释
方法一:先敲“/”在敲两个*,然后回车
方法二:alt+shift+J
API文档:
API文档就是程序员的字典,可以在里面查看各种包,类等的介绍
标识符和命名规则:
a.字母,数字,下划线以及$(美元符号)组成
b.不能是关键字
c.不能以数字开头
这里提供一下软性命名要求,以后学习,开发尽量都按照这样做!
(1)类名命名规范:首字母大写,后面每个单词首字母大写(大驼峰式)。
(2)方法名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。
(3)变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。
Java的关键字:
基本数据类型:
String:
String:不属于基本类型,内部实际值是一个char[]数组
JDK1.6之前,方法区包括运行时常量池在永久代中;
JDK1.7,方法区和运行时常量池在永久代,字符串常量池在堆中;
JDK1.8,永久代被废弃,方法区在元空间,运行时常量池和字符串常量池在堆中。
创建:
String s1 = "abc"; //先将"abc"存储到池中,然后返回引用
String s2 = new String("abc"); //创建新对象"abc"已经在池中
String s3 = "yihao" + "chengxuyuan"; //创建三个对象,均在池中
String、StringBuffer与StringBuilder之间区别
序列化:
序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程
访问权限控制符:
public>protected>default>private
集合:
- List , Set, Map都是接口,List和Set继承Collection接口,Map独立接口
- Set下有HashSet,LinkedHashSet,TreeSet
- List下有ArrayList,Vector,LinkedList
- Map下有Hashtable,LinkedHashMap,HashMap,TreeMap
- Collection接口下还有个Queue接口,有PriorityQueue类
-
List集合:
List集合是有序的,可对其中每个元素的插入位置进行精确地控制,可以通过索引来访问元素,遍历元素。
-
Set集合:
Set集合是无序的,且存储元素唯一。
-
Map集合:
该集合存储键(key)值(value)对,一对一对往里存,而且保证键(key)的唯一性。数据之间存在映射。
面向对象:
面向对象三大特征:封装,继承,多态。
封装详细了解扣这里!
继承详细了解扣这里!
多态详细了解扣这里!
多态的特性:
向上,向下,重载
逻辑运算符:
用来连接boolean类型的,最终结果也是boolean类型,要么是true,要么false。
逻辑运算符:
^:逻辑异或 相同为false ,不同为true
!:取反 !true:false
&:逻辑与 {有false 则false}
|:逻辑或 {有true 则true}
短路逻辑运算符:
&&逻辑与:
运算结果和&一样 但是&&有短路效果
(a)&&(b++):若a已经为flase 则不需要计算b++;若最后输出b,则b不变。
||逻辑或:
运算结果和|一样 但是||有短路效果
(a)||(b++):若a已经为flase 则不需要计算b++,最后输出b,b不变
(建议以后都用)
异常处理:
-
异常的族谱:
-
Java中处理异常的五个关键字:
try,catch,finally,throw,throws
-
声明异常的关键字:
方法声明异常的关键字是throws,抛出异常throw。
-
try-catch-finally
可以用多个catch子句处理不同异常,级别由低到高。
Connection connection = null;
Statement statement = null;
try {
connection = DriverManager.getConnection("jdbc:mysql:");
statement = connection.createStatement();
String sql = "update ShuXing set hp=200 where id=1;";
int i = statement.executeUpdate(sql);
System.out.println(i);
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
statement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
- 扩展点:在Java SE 7或者更高版本中,一个catch块可以同时处理多种异常类型,有助于减少重复代码。
//...
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
多线程与并发:
-
线程是操作系统调度的最小单元,也叫轻量级进程。同一进程可以创建多个线程,而他们都拥有各自的计算器、堆栈和局部变量等属性,并且能够访问共享的内存变量。
-
线程的5个状态:
创建(New):使用new关键字创建一个线程
就绪(Ready):调用start方法,等待CPU调度
运行(Running):执行run方法
阻塞(Blocked):由于一些原因放弃CPU使用权,暂时停止执行
死亡(Dead):run方法执行完毕或者执行时产生异常 -
创建多线程的多种方法:
创建多线程的多种方式
创建Thread类的子类,想要实现多线程程序,就必须继承Thread类
实现步骤:
(1)创建一个Thread的子类
(2)在Thread类的子类中重写Thread类中的run方法,设置线程任务(开启线程要做什么)
(3)创建Thread的子类方法
(4)调用Thread类中的方法start方法,开启新的线程,执行run方法
多次启动一个线程是非法的,java程序属于抢占式调度,哪个线程优先级高,哪个线程先执行;同一个优先级,随机选择一个执行 -
并发与并行:
并行是真正意义上的多个任务同时执行;并发是支持处理多个任务,不一定要同时,多个任务可能是串行的,但每个任务只能获取CPU很短的占用时间,多个任务在很短的时间内交替执行。
IO流:
-
IO流分类:
输入流,输出流
-
字节输入流:
1.使用步骤:
(1)创建FileInputStream对象,构造方法中绑定要读取的数据
(2)使用FileInputStream对象中的方法read,读取文件(第一个字节)末尾为-1
(3)释放资源
2.数组有缓存作用:存储读取到的多个字节一般定义为1024或者整数倍 -
字节输出流:
1.OutputStream子类共性的成员方法:
close:关闭此输出流并释放与此流相关联的任何系统资源
flush:刷新此输出流并强制任何缓冲的输出字节被写出
write(byte [] b):将b.length字节从指定的字节数组写入此输出流
write(byte [] b,int off,int len):从指定的字节数组写入len字节,从偏移量off开始输出到此输出流
write(int b):将指定的字节输出流
2.构造方法的作用:
(1)创建一个FileOutputStream对象
(2)会根据构造方法中传递的文件/文件路径,创建一个空的文件
(3)会把FileOutputStream对象指向创建好的文件
3.字节输出流的使用步骤:
(1)创建一个FileOutputStream对象,构造方法中传递写入数据的目的地
(2)调用FileOutputStream对象中的方法write,把数据写入文件中
(3)释放资源(流使用会占用一定的内存,使用完毕要把内存清空,提高程序效率)
4.一次写多个字节:
如果写的第一个字节是正数(0~127),那么显示的时候查询ASCII码表
如果写的第一个字节是负数,那么第一个字节和第二个字节组成一个中文显示,查询系统默认码表(GBK)
5.getBytes方法:把字符串转换为字节
6.FileOutputStream(String name, boolean append) :append:追加文件开关
7.换行符号:windows:\r\n
linux:/n
mac:/r -
字符输入流:
1.FileReader构造方法的作用:
(1)创建一个FileReader对象
(2)会把FileReader对象指向要读取的文件
2.字符输入流的使用步骤
(1)创建FileReader对象,构造方法中绑定要读取的数据
(2)使用FileReader对象中的方法read
(3)释放资源 -
字符输出流:
使用步骤
(1)创建一个FileWrite对象,构造方法中传递写入数据的目的地
(2)调用FileWrite对象中的方法write,把数据写入文件中
(3)使用FileWrite中的方法write,把数据写到内存缓冲区中(字符便字节的过程)
(4)释放资源(会先把内存缓冲区的数据刷新到文件中)
网络编程:
-
Java建立TCP连接的步骤:
(1) 服务器实例化一个ServerSocket对象,通过服务器的特定端口通信;
(2) 服务器调用ServerSocket的accept()方法,一直等待直到客户端连接到服务器的端口为止;
(3) 服务器等待时,客户端实例化一个Socket对象,指定服务器地址和端口号请求连接;
(4) 客户端的Socket构造函数尝试连接到服务器指定端口,如果成功连接,在客户端创建一个Socket对象使得可以与服务器通信;
(5) 服务器端accept()方法返回一个新的socket引用,使得可以连接到客户端。 -
Spring中实现WebSocket可以直接用注解方式,类上@ServerEndPoint,然后实现@OnOpen,@OnMessage,@OnCLose,@OnError方法。在@OnMessage中可以插入心跳机制。
反射:
在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。
- java创建对象的方式:
new,clone()方法,反射,反序列化
数据结构:
1.栈:先进后出
2.队:先进先出
3.链表中的每一个元素称为一个节点,一个节点包含一个数据源(存储数组),两个指针域(存储地址)
4.红黑树:特点:趋近于平衡树时,查询速度非常快,查询叶子节点最大次数和最小次数不能超过两倍
约束:1.节点可以是黑色或者红色
2.根节点是黑色的
3.叶子节点(空节点)是黑色的
4.每个红色的节点的子节点都是黑色的
5.任何一个节点到其每一片叶子节点的所有路径上黑色节点数相同
泛型:
1.当我们不知道使用什么数据类型时,可以使用泛型E e(元素) T(类型)
2.使用泛型的好处:避免了类型转换的麻烦
把运行期异常提升到了编译期异常
3.定义含有泛型的方法格式:
修饰符<泛型> 返回值类型 方法名(参数列表(使用泛型)){
//方法体
}
4.含有泛型的接口实现方式:
(1)定义接口的实现类,实现接口,指定接口的泛型
(2)接口使用什么泛型,实现类使用什么泛型
5.泛型的通配符:?:代表任意数据类型
使用方式:不能创建对象使用,只能作为方法的参数使用
6.泛型的上限限定:? extends E 代表使用的泛型只能是E类型的子类/本身
泛型的下限限定:? super E 代表使用的泛型只能是E类型的父类/本身
接口为什么不能被实例化:
接口没有构造方法
内部类的种类:
成员内部类,匿名内部类,静态内部类,局部内部类
匿名内部类的特征:
(1)匿名内部类也就是没有名字的内部类,无class关键字,直接使用new来生成一个对象的引用正因为没有名字,所以匿名内部类只能使用一次
(2)匿名内部类还有个前提条件:必须继承一个父类(抽象类,普通类)或实现一个接口(两者不可兼得,并且只能是一个),它相当于一个具体类(只是没有名字),所以可以使用new
(3)不能存在任何的静态成员变量和静态方法。
不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。 无构造函数,使用构造(空白)代码块进行初始化
(4)当所在的方法的形参需要被内部类里面使用时,该形参必须为final,为了拷贝引用避免引用值发生改变
最后:一些的深层理解及解释:
- 为什么重写了equals方法还要重写hashCode()方法
- 程序模拟JDBC的本质
- 接口多态(向下转型)
感谢你的阅读,希望这篇文章能帮助到你!
更多推荐
LRF-Java基础知识点总结(Java基础知识点复习,学会这一篇就够了)
发布评论