JavaSE
2019-12-24 10:46:03 6 举报
AI智能生成
JavaSE的总结。希望大家多多交流
作者其他创作
大纲/内容
Java语言初识
MarkDown语法
标题(#)
字体
分割线(---/***)
图片
超链接
[超链接文字](url)
列表
有序表格(1.空格)
无序列表(-.空格)
表格
右键插入表格
代码块
```语言种类
简单的Dos命令
盘符切换(d:回车)
列出当前目录下的文件以及文件夹(dir(directory):)
退回到上一级目录(cd..)
退回多级目录(cd../../)
退回到根目录(cd\:)
清屏(cls:)
退出Dos命令行(exit)
查看本机IP 网卡物理地址(ipconfig/all)
打开画板(mspaint)
打开记事本(notepad)
获取计算机名称(hostname)
创建目录(md)
删除目录(rd)
删除文件(del)
计算机语言发展
Java的诞生
1995
Java SE(基础)
Java ME
Android
Java EE(企业应用)
2006
Hadoop(大数据)
JDK(Java开发工具包)
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了
JRE(Java运行环境)
包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可
HelloWorld
Javac Hello.java
生成class
Java Hello
编译型
解释型语言
IDEA的使用
基础语法
注释
行内注释//
多行注释(/**/)
文档注释(/** */)
Javadoc生成帮助文档
标识符
关键字
数据类型
基本数据类型
整数型(默认int型)
byte 1字节
short 2字节
int 4字节
long 8个字节
0b 二进制
Ox 十六进制
0 八进制
浮点型(默认double型)
float 4字节
double 8字节
Big Decimal(精确计算)
字符型
char 2字节
编码格式
ascii
GBK
utf-8(通用)
unicode
布尔型
boolean 1字节
引用数据类型
类(Class)
接口(interface)
数组(Array)
类型转换
自动类型转换
强制类型转换
常量优化机制
“+”的作用
变量和常量
type varName[=value]
作用域
类变量
实例变量
局部变量
常量
final MAX_A = 10;
命名规范
1.见名知意
2.驼峰命名(变量,方法)
3.类(首字母大写,驼峰命名)
4.常量:大写+下划线
5.不要使用拼音命名
定义变量的注意事项
1.在同一作用域里面不能定义两个同名变量
2.变量必须赋值才能使用
3.定义变量尽量一行一个
运算符
算数运算符
"+","-","*","/","%","++","--"
赋值运算符
"=","+=","-=","*=","/=","%="
逻辑运算符
"&", "|", "!", "^", "&&","||"
"&"和“&&”的区别
关系运算符
"==","!=","<", ">", "<=", ">=", instanceof
位运算符
"&", "|", "^", "~" , ">>", "<<", ">>>"
条件运算符
"?", ":"
三元运算符
表达式?结果1:结果2
包机制
域名倒写
防止命名冲突
package
import
JavaDoc
JDK帮助文档
javaDoc
@author
@Version
@Since
@param
@return
@throws
流程控制
Scanner
用户交互System.in
顺序结构
程序默认的结构,自上而下的执行
选择结构
if单选择结构
if-else 双选择结构
if-else if -else 多重选择结构
switch
JDK1.7后支持了字符串类型
case
break
default
if和switch的区别
switch
一般用于对某个常量的判断
if
1.针对是boolean类型的判断
2.针对一个范围的判断
修饰符 返回值类型 方法名(参数类型 参数名){方法体 return返回值;}
形式参数:参数名
实际参数:调用方法时,传入的参数
3.针对几个常量值的判断
循环结构
while
尽量避免死循环
do-while
for
for(int i = 0;i<100;i++)
增强for循环
break&continue
break:跳出循环
continue:终止当次循环,继续下一次循环
带标签continue
方法
什么是方法?
是对一段功能逻辑的封装,以实现重复调用
方法的定义
方法调用
类名.方法
对象.方法
方法的返回值
void:无明确返回值类型
如果想要在这个方法执行完以后,返回一个结果,就要明确这个方法的返回值类型
一旦明确了方法的返回值类型,就必须由return带回一个明确类型相关的值
return
结束方法,返回值类型是void可以不写
方法的重载
名字相同,参数列表不同
子主题
命令行传参
给main方法传递参数
可变长参数
.......
必须放在最后一个参数
递归
自己调用自己,给自己一个出口,没出口就会压栈
数组
数组的定义
数据类型[] 数组名
int[] arr = new int [3];
{1,2,3,4,5};
必须是同一个类型
基本数据类型
引用数据类型
数组的初始化
静态初始化
int[] arr = {1,2,3,4,5};
动态初始化
int[] arr = new int[3];
数组的使用
通过索引拿到值
数组角标越界(ArrayIndexoutofBounds)
for循环遍历数组
二维数组
int [][] = new int[2][3];
2表示是二维数组的长度
3表示二维数组中一位数组的长度
遍历二维数组
arr.length.for
arr[i].length.for
Arrays工具类
asList
binarySearch
copyOf
copyOfRange
equals
sort
toString
排序算法
冒泡排序
选择排序
插入排序
快速排序
归并排序
希尔排序
堆排序
基数排序
面向对象
什么是面向对象?
类与对象
类
对象
构造方法
权限修饰符 构造方法名(和类名相同)(参数类型 参数名){}
构造的重载
默认的无参构造
如果手动定义了有参构造就必须要要动手再加一个无参构造
单例模式,需要构造器私有!
new对象
栈存放引用
堆存放具体的对象
封装
属性私有,get,set
继承
Java是单继承,只能继承一个父类
extends
所有的类继承自Object
子类拥有父类的全部特性
子类重写父类方法(方法重写)
注意事项
父类私有的方法子类不能重写,因为私有的方法子类不能继承
子类在重写父类方法时,子类方法前面的权限修饰符,不能比父类的低,要比父类的高或者一样
构造方法不能重写
静态方法不参与重写
this
super
多态
多态的前提
多态访问成员变量特点
编译看左边,运行看左边
多态访问成员方法特点
编译看左边,运行看右边(以字类重写方法为准)
多态的好处
提高代码的复用性,靠继承保证
提高代码的扩展性
多态的弊端
不能直接访问子类特有的成员
如果我们访问不到,可以向下转型
权限修饰符
public(公共的)
成员变量
修饰成员变量,成员方法,被修饰的成员可以再任意位置访问到
protected(受保护的)
被protected修饰的成员对于本包和其子类可见
缺省
缺省修饰的成员对于本包可见
private(私有的)
匿名对象
修饰成员变量和成员方法,被修饰的成员只能在本类中访问
static(静态变量)
被静态所修饰的成员属于类的,成为类变量,推荐使用类名直接调用
静态只能访问静态的,非静态的技能访问静态的,又能访问非静态的
静态方法里面,不能出现this,this也是代表一个对象,对象是后来才有的
final(最终的)
可以修饰类,变量,成员方法
修饰特点
修饰类不能被继承
被修饰的方法不能被重写
被修饰的变量不能被重新赋值,因为这个量其实是一个常量
修饰自定义变量时。常量名字全部大写 例:final int NUM = 100;
abstract(抽象的)
可以修饰类,方法
修饰类就不能直接实例化
abstract修饰的方法,子类必须要重写
注意语法
一个类里面有了抽象方法,那么这个类必须为抽象类
一个抽象类里面,可以没有抽象方法
抽象类里面可以有非抽象方法
抽象类里面有构造方法,可以采用多态的方式来完成父类数据的初始化
能否和以下关键词用
abstract private(矛盾)
private限定后无法重写,abstract强制子类重写
abstract final(矛盾)
final无法重写
接口
接口特点
接口格式:interface 接口名{}
类实现接口用implements
格式:Class 类名 implements 接口名
接口可以按照多态的方式来实例化
接口可以是具体类,要重写接口的所有抽象方法
接口的成员特点
成员变量
只能是常量,并且是静态的
默认修饰符:Public static final
建议手动给出
构造方法
接口中没有构造方法
成员方法
只能是抽象方法
默认修饰符: Public abstract
建议手动给出
接口比抽象类更抽象
只有一个方法的接口叫做函数式接口,可以使用lambda表达式
一个类是可以实现更抽象
内部类
局部内部类
将内部类定义到成员位置
局部内部类访问局部变量的问题
可以直接访问外部类成员
可以创建内部对象,通过对象调用内部类的方法来使用局部内部类的功能
局部内部类访问局部变量必须用final修饰
原因:局部变量会随着方法的调用而消失,这个时候局部对象并没有立马从堆内存中消失,还要使用那个变量
成员内部类
将内部类定义到外部类的方法中
静态内部类
匿名内部类(重点)
语法
可以用多态的方式给对象起名字
经常用于作为参数传递,或者作为返回值返回
一个普通的类也可以用匿名内部类的方式,创建出该类的子类对象
常用类
Object类
hashCode
toString
想通过调用toString想打印成员变量的值可以让子类重写父类的toString方法,打印想看到的东西
equals
重写equals方法
getClass
反射
instanceOf
wait
notify
notifyAll
clone
注意事项
Math类
常见的数学运算
Random类
生成随机数
Date类
Date
SimpleDateFormat
yyyy:MM:dd HH:mm:ss
String类
charAt
compareTo
concat
contains
equalsIgnoreCase
getBytes
trim
replace
substring
toLowerCase
toUpperCase
valueOf
Arrays类
asList
binarySearch
copyOf
copyOfRange
equals
sort
toString
StringBuffer
多线程数据量大,效率低,安全
可变长
capacity
length
添加功能
append
insert
删除功能
deletCharAt
delete
替换功能
replace
反转功能
reverse
截取功能
substring
StringBuffer和String的相互转换
String -- >StringBuffer
1.构造方法
2.通过append方法
StringBuffer --> String
1.通过substring方法
2.通过构造方法
3.通过toString方法
StringBuilder
单线程数据量较大,效率高,不安全
可变长
File类
创建功能
createNewFile
mikir
mikirs
删除功能
delete
重命名功能
renameTo
判断功能
isDirectory
isFile
exists
canRead
canWrite
isHiddern
获取功能
getAbsolutePath
getPath
getParent
getParentFile
getTotalSpace
getFreeSpace
getName
length
lastModified
list
listFiles
集合框架
Collection
List(有序可重复)
ArrayList(常用)
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
LinkedList(常用)
底层数据结构式链表,查询慢,增删快
线程不安全,效率高
特有功能
addFirst
addLast
getFirst
getLast
removeFirst
removeLast
Vector
底层数据结构是数组,查询快,增删慢
线程安全,效率低
特有功能
addElement
elementAt
Set(无序不可重复)
HashSet(常用)
底层数据结构是哈希表. 线程不安全 集合元素可以是 null
哈希表:是一个元素为链表的数组,综合了数组和链表的优点 (JDK1.7之前)
LinkedHashSet(有序且唯一)
底层数据结构是两个链表和哈希表
链表保证有序,哈希表保证元素唯一
TreeSet
进行自然排序的前提
实现Comparable接口
如何保证元素的唯一
二叉树数据结构
Iterator(迭代器)
Map
Map接口和Collection接口的不同
Map是双列的,Collection是单列的
Collections是一个包装类。它包含有各种集合操作的静态多态方法。此类就不能实例化,像一个工具类,服务于Java的Collection框架。
Map的键唯一,Collection的子体系Set是唯一的
Map集合的数据结构针对键有效,跟值无关;Collection集合的数据结构是针对元素有效
Map的功能
添加功能
V put(K key,V value)
删除功能
void clear()
V remove(Object key)
判断功能
boolean containsKey(Object key)
boolean containsValue(Object value)
boolean isEmpty()
获取功能
Set<Map.Entry<K,V>> entrySet()
V get(Object key)
Set<K> keySet()
Collection<V> values()
长度功能
int size()
HashMap(重点)
JDK1.7:数组+链表
JDK1.8:hash表=数组+链表+红黑树
TreeMap
Collections工具类
Collection和Collections的区别
Collection是一个集合几口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
Collection是一个包装类。Collection标示一组对象,这些对象也称为Collection的元素,一些Collection允许有重复的元素,而另一些则不允许,一些Collection事有序的,而另一些则是无序的。
泛型<>
约束,避免类型转换之间的问题
IO流
字节流
输出:OutputStream
FileOutputStream(文件输出流)
FileOutputStream(File file)
FileOutputStream(String name)
FileOutputStream(File file, boolean append)
FileOutputStream(String name, boolean append)
高效字节输出流
BufferedOutputStream(OutputStream out)
BufferedOutputStream(OutputStream out,int size)
输入:InputStream
FileInputStream(文件输入流)
FileInputStream(File file)
FileInputStream(String name)
高效字节输入流
BufferedInputStream(InputStream in)
BufferedInputStream(InputStream in, int size)
字符流
Reader(字符转换输出流)
InputStreamReader(InputStream in)
InputStreamReader(InputStream in, String charsetName)
Writer(字符转换输入流)
OutputStreamWriter(OutputStream out)
OutputStreamWriter(OutputStream out, String charsetName)
便捷字符流
FileReader(File file)
FileReader(String fileName)
高效字符流
BufferedReader(Reader in)
BufferedWriter(Writer out)
特有方法
BufferedReader readLine()
BufferedWriter newLine()
内存操作流
操作字节
ByteArrayInputStream
ByteArrayOutputStream
操作字符数组
CharArrayWrite
CharArrayReader
操作字符串
StringReader
StringWriter
打印流
字节打印流
PrintStream(File file)
PrintStream(String fileName)
字符打印流
PrintWriter(OutputStream out, boolean autoFlush)
特点
close()和flush()方法的的区别
随机访问流
RandomAccessFile(File file, String mode)
"r"
"rw"
"rws"
"rwd"
顺序流
SequenceInputStream
SequenceInputStream(InputStream s1, InputStream s2)
处理流
序列化
反序列化
Serializable
transient(透明的)
data
DataInputStream
DateOutpuutStream
Object流
多线程
多线程的意义
进程和线程
进程
线程
线程创建的方式
继承Thread类
1.重写run()方法
不可以抛出异常
2.实例化对象
3.调用start()方法
start():本地方法,java无权调用,交给底层的C处理
private native void start();
实现Runnable接口
步骤
1.重写run()方法
2.实例化对象
3.调用start()方法
函数式接口可以用lambda表达式简化
Callable
步骤
1.重写call()方法
2.实例化对象
3.调用start方法
特点
可以有返回值
静态代理
new Thread(Runnable).start();
Lambda表达式
为什么使用Lambda表达式
1.函数式编程
2.避免内部类定义过多
3.可以让代码看起来更简洁
4.对于函数式接口可以用lambda表达式简化
格式
推导过程并简化
线程的状态
1.初始(NEW)
2.运行(RUNNABLE)
3.阻塞(BLOCKED)
4.等待(WAITING)
5.超时等待(TIMED_WAITING)
6.终止(TERMINATED)
线程的生命周期
1.新生(New)
2.可执行(Runnable)
3.停滞(Blocked)
4.死亡(Dead)
常用方法
sleep
join
yield
isLive
start
setPriority
interrupt
线程同步
并行和并发
并发
并行
队列+锁
Synchronized
同步方法 弊端:锁太多了
同步代码块(常用)
第一个线程进来拿到锁,后面就要排队了,直到这个人释放锁,后面拿到锁才能进去
死锁(两个人都抱着对方的锁)
互斥
请求与保持
不剥夺条件
循环等待条件
Lock(优先级高)
ReentrantLock
lock
trylock
unlock
线程通信
缓冲区:消息队列
标志位:红绿灯
wait
notifyAll
线程池
池化技术
池的大小
最大连接数
保持时间
.......
网络编程
网络编程博客链接
目的
JavaWeb和网络编程的区别
JavaWeb
网络编程
如何实现网络的通信?
1.通信双方地址
IP+端口号
2.网络通信协议
TCP
1.连接稳定
2.三次握手 四次挥手
举例:打电话
UDP
1.客户端服务端没有明确的界限
2.不管有没有准备好,都可以发给你
举例:发短信
IP地址
ipv4/ipv6
端口
共有端口
HTTP
HTTPS
FTP
Telent
程序注册端口
Tomcat
MySQL
Oracle
动态、私有端口
URL
协议
构造方法
getProtocol(协议)
getHost(主机IP)
getPort(端口)
getPath(文件)
getFile(全路径)
getQuery(参数)
GUI编程
AWT
AWT的博客链接
Frame
构造方法
setResizable
setBackground
setSize
setLocation
Panel
布局管理器
FlowLayout
BorderLayout
监听事件
鼠标监听
键盘监听
窗口监听
动作事件
Swing
Swing的博客链接
JFrame
窗口
面板
面板
弹窗
标签
按钮
单选按钮(JRadioButton)
复选按钮( JCheckBox)
列表
文本框
密码框
文本域
贪吃蛇小游戏
Timer
键盘监听
游戏帧数概念
注解和反射
注解
注解的博客
作用
格式
使用地方
内置注解
@Override
@Deprecated
@SuppressWarnings
需要添加系统定义好的参数选择性使用
@SuppressWarnings("all")
@SuppressWarnings("unchecked")
@SuppressWarnings(value={"unchecked","deprecation"})
......
元注解
作用
@Target
@Retention
@Document
@Inherited
除了这四个注解剩下都是自定义注解
自定义注解
使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口
注意事项
@interface用来声明一个注解,格式:public@interface注解名{定义内容}
其中的每一个方法实际上是声明了一个配置参数.
方法的名称就是参数的名称.
返回值类型就是参数的类型(返回值只能是基本类型,Class,String,enum).
可以通过default来声明参数的默认值
如果只有一个参数成员,一般参数名为value
注解元素必须要有值,我们定义注解元素时,经常使用空字符串,0作为默认值.
反射
反射的博客
反射的优缺点
优点
缺点
Class类
常用方法
forName(Stringname)
newInstance()
getName()
getSuperClass()
getinterfaces()
getClassLoader()
getConstructors()
getDeclaredFields()
获取Class类
Class user = User.class;
Class class=person.getClass();
Class c1 = Class.forName("Demo.User");
基本数据类型
Class c4 = Integer.TYPE;
Class<Long> c5 = Long.TYPE;
哪些类型可以有Class对象
Class:外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类。
interface:接口
[]:数组
enum:枚举
annotation:注解@interface
primitivetype:基本数据类型
void
类的加载与ClassLoader的理解
1.加载
2.链接
1.验证
2.准备
3.解析
3.初始化
执行类构造器()方法的过程。类构造器()方法是由编译期自动收集类中所有类变量的赋值动作和静态,代码块中的语句合并产生的。(类构造器是构造类信息的,不是构造该类对象的构造器)
当初始化一个类的时候,如果发现其父类还没有进行初始化,则需要先触发其父类的初始化。
虚拟机会保证一个类的()方法在多线程环境中被正确加锁和同步。
什么时候发生类的初始化
类的主动引用(一定会发生类的初始化)
当虚拟机启动,先初始化main方法所在的类
new一个类的对象
调用类的静态成员(除了final常量)和静态方法
使用java.lang.reflect包的方法对类进行反射调用
当初始化一个类,如果其父类没有被初始化,则先会初始化它的父类
类的被动引用(类的被动引用)
当访问一个静态域时,只有真正声明这个域的类才会被初始化。如:当通过子类引用父类的静态变量,不会导致子类初始化
通过数组定义类引用,不会触发此类的初始化
引用常量不会触发此类的初始化(常量在链接阶段就存入调用类的常量池中了)
Method
invoke(user,"姜嘉航");
存在重载,也需要写参数的类型
Filed
set(user,"姜嘉航);
Construct
new Instance();
获取的时候需要传递参数的Class类型
破坏私有关键字
setAccessible(true);
性能分析
正常>检测关闭的反射》默认的反射
反射获得注解,泛型......
ForkJoin效率对比
0 条评论
下一页