Java
2021-06-11 17:33:30 29 举报
AI智能生成
思维导图
作者其他创作
大纲/内容
1.Java历史简介
计算机语言历史
第一代计算机语言
机器语言:00010110101
第二代计算机语言
汇编语言
第三代计算机语言
高级语言
面向过程
C
面向对象
Python/Java/php/C++/C#
核心优势
跨平台
JDK/JRE/JVM
JDK
Java Development Kit
太阳微系统针对Java开发人员发布的免费软件开发工具包(SDK,Software development kit)
JRE
Java Runtime Environment
Java运行环境的简称。JRE由JVM和Java程序中所需的核心类库组成。
JVM
Java Virtual Machine
Java虚拟机的简称,人类如果想和计算机交流,那JVM就是这两者交流中的介质
2.变量
数值类型
基本数据类型
数值类型
整型0
byte
-128~127
short
-2^15~2^15-1
65535
int(default )
-2^31~2^31-1
+-2.1GB
long
-2^63~2^63-1
浮点型0.0
float
double(default)
布尔类型(false)
boolean
true
false
字符类型('\u0000')
char
0~65535
引用类型
默认值为null
数组
数据类型的转化
自动转化(隐藏转化)
小转大
long num =10;
强制数据类型转化(显示转化)
大转小
byte b =(byte) 129;//会溢出,损失精度
运算符
算数运算符
+、-、*、/、%
比较运算符
>、>=、<、<=、==、!=
逻辑运算符
&& || !
& | ~
如果两边为逻辑判断,则是逻辑运算符,否则为位运算符
位运算符
& | ~
一个数,先化为二进制,表示每一位都用该运算符比较,然后再转化为十进制
"&&" 和 “&”的区别
1.运算符性质不同。 &是一个位运算符。 &&是一个逻辑运算符。
2.作用不同。 &是将两个二进制的数逐位相与,结果是相与之后的结果。 &&就是判断两个表达式的真假性,只有两个表达式同时为真才为真,有一个为假则为假,具有短路性质。
3.用途限制。 &除了是一个位运算符,也是取地址符。 &&就是一个单纯的逻辑运算符,没有任何其他含义。&&逻辑与,只要有一个不满足,后面就不会执行 &按位与,都会执行,效率低.
1.运算符性质不同。 &是一个位运算符。 &&是一个逻辑运算符。
2.作用不同。 &是将两个二进制的数逐位相与,结果是相与之后的结果。 &&就是判断两个表达式的真假性,只有两个表达式同时为真才为真,有一个为假则为假,具有短路性质。
3.用途限制。 &除了是一个位运算符,也是取地址符。 &&就是一个单纯的逻辑运算符,没有任何其他含义。&&逻辑与,只要有一个不满足,后面就不会执行 &按位与,都会执行,效率低.
三目运算符
布尔表达式 ?表达式1 :表达式2
移位运算符
>>、<<、>>>
钻石运算符
<>
钻石操作符是在 java 7 中引入的,可以让代码更易读,但它不能用于匿名的内部类。
在 java 9 中, 它可以与匿名的内部类一起使用,从而提高代码的可读性。
在 java 9 中, 它可以与匿名的内部类一起使用,从而提高代码的可读性。
赋值运算符
=
运算符的优先级
算数>比较>逻辑>赋值
3.方法
方法的声明
方法的重载规则(背)
方法的重载定义
* 1.同一个类中
* 2.方法名相同
* 3.参数列表不同
* (1)参数个数
* (2)参数的数据类型
* (3)参数的顺序
* (4) 只有返回值类型不同,不能构成方法的重载
* */
* 1.同一个类中
* 2.方法名相同
* 3.参数列表不同
* (1)参数个数
* (2)参数的数据类型
* (3)参数的顺序
* (4) 只有返回值类型不同,不能构成方法的重载
* */
流程控制
顺序流程
控制流程
if()
if(){
}else{
}
}else{
}
if(){
}else if(){
}else{
}
}else if(){
}else{
}
switch...case
switch(int、自动转化为int、枚举类型、字符串)
支持的有:char、byte、short、int 和 Character、Byte、Short、Integer 和 String,枚举
表达式的值不能是null,否则会在运行时抛出NullPointerException。
在case子句中也不能使用null,否则会出现编译错误。
JAVA中switch为什么不能使用long的根本原因是long转化成int会丢失精度,导致数据不准确,
表达式的值不能是null,否则会在运行时抛出NullPointerException。
在case子句中也不能使用null,否则会出现编译错误。
JAVA中switch为什么不能使用long的根本原因是long转化成int会丢失精度,导致数据不准确,
循环流程
while
for
break
跳出并结束语句块
continue
跳出本次循环,继续执行后面的语句
do...while
死循环
不是代码错误,是一种循环结构
JDK常用引用类型
java.lang
String
length()
charAt(int)
根据下标返回对应字符,拿完是个字符,如果是数字必须转化为对应数字类型ASCII码
A-Z 65-90
a-z 97-122
'0'-'9' 48-57
a-z 97-122
'0'-'9' 48-57
indexOf(char):int
根据字符返回下标
lastIndexOf( char):int
返回字符最后出现的下标
substring(int index)
截取指定下标(包括)后的字符串
substring(int beginIndex,int endIndex)
截取字符串,前包括,后不包括
replace(char oldChar,char newChar)
字符串替换
trim():String
去首尾空格
Integer.valueOf(string)
字符串转为整数,如果原字符串不是数字字符串,则报错
String.valueOf(Object)
将object转化为字符串
System
out.print()
out.printIn()
in
arrraycopy(src,srcPos,dest,destPos,length)
数组的复制,底层代码是C++写的,调用底层,没有返回值(native)
Conparable
compareTo(T)
作用一般是看两个数组是否一样
java.util
Scanner
nextInt()
nextDouble()
nextLine()
Arrays(数组的工具类)
toString(T [] arr)
copyOf(T[] arr,newLength)
数组的扩容,缩容
sort(T [])
equals(T[],T[])
判断两个数组是否相等
Random
//获得0~9随机数
Random r =new Random();
int rd = r.nextInt(10);
Random r =new Random();
int rd = r.nextInt(10);
Date
yyyy-MM-dd HH:mm:ss
年月日时分秒(毫秒.SSS)
小写的hh代表12小时制,大写的HH代表24小时制
new Date() 当前系统时间
String str = df.format(date)
将日期转化为字符串
DateFormat df = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);
String StrNow = df.format(now);
String StrNow = df.format(now);
Date date = df2.parse(str)
DateFormat df = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);
Date d = df2.parse(str);
Date d = df2.parse(str);
将字符串转化为日期
getTime() 1970-01-01 00:00:00.000到时间的毫秒数
Java.text
abstract DateFormat
不能直接new()实例,只能通过赋值多态去定义
SimpleDateFormat
DateFormat df = new SingleDateFormat("yyyy-MM-dd HH:mm:ss")
4.数组
数组的初始化
静态初始化
动态初始化
数组的长度
arr.length
数组的遍历
数组的特点
数据类型相同的数组
不可改变长度
5.排序算法
选择排序
每一个元素与第一个元素比较,如果小,则交换
i:第一个元素的位置
0~arr.length-1
j:后面那个元素的位置
i+1~arr.length
冒泡排序
两两比较,如果后面的小,交换
i:比较的轮数
0~arr.length-1
j:比较的位置
0~arr.length-i-1
a[j] a[j+1]
快速排序*
其他排序
JDK提供的排序方法
Arrays.sort(arr[]
底层实现使用的排序算法中的快速排序
递归算法
在方法体内调用自身的方法
递归头
递归循环体
6.面向对象
构造方法(构造器)
没有返回值类型
类名相同
使用new关键字创建对象
JVM有一个默认的构造方法
根据需求重载构造方法
this关键字
指代当前对象的关键字
根据本类其他构造方法,必须写到第一行
NPE
null值调用属性或者方法会出现NullPointerExption
三大基本特征
继承(extends)
extends关键字继承父类除了构造方法以外的所有的属性和方法
子类的构造方法默认调用父类构造方法
super关键字
指代当前类的直接父类
super()必须放到构造方法的第一行,且不能与this()并存
子类继承父类语句的执行顺序
父类的静态代码块
子类静态代码块
父类的普通代码块
父类的构造方法
子类的普通代码块
子类的构造方法
说明:静态方法(有静态先加载静态) > 普通代码块> 方法(其他)
先加载用到的所有静态方法,然后按运行顺序加载普通代码块和方法
先加载用到的所有静态方法,然后按运行顺序加载普通代码块和方法
重写的规则
父子类中,必须要有继承的概念
相同的签名
相同的方法名+参数序列
方法的访问权限不能比父类的方法更严格
垃圾回收机制GC*
封装
访问权限修饰符
在编程规约中所有的非特殊成员变量不允许外部直接访问成员变量,必须将其私有,且提供对外公开的方法
多态
赋值多态
Shape shape = new Circle();
传参多态
存在于声明方法
声明:public void a(Shape n){};
Circle circle = new Circle();
使用:a(circle);
Circle circle = new Circle();
使用:a(circle);
构成Java多态的规则
1.要有继承(直接继承)
2.要有方法的重写
3.父类的引用指向子类的对象
static关键字
从属类
静态属性使用 类名.静态变量名
静态方法使用 类名.静态方法
在JVM中仅初始化一次
存储于常量池
Object类
所有类的父类
equals()
==和equals()的区别
==比较的是地址
如果“==”两边是基本数据类型或者字符串常量,比较的是常量池中的数值
equals()方法在没有重写父类方法时比较的也是地址
在重写equals()后比较的是引用类型属性的值是否相等
在实际应用中必须重写equals()方法
hashcode()
调用本地操作系统的C++库哈希地址
toString()
由完全限定名 + “@”+十六进制的哈希地址组成
子类按需求重写父类的toString()方法
引用类型直接输出对象名,默认调用toString()方法
Java实体类编程规约
类必须实现可序列化接口
成员变量私有化
必须提供无参的构造方法
对外提供公开的方法访问和设置成员变量
必须重写toString(),equals(),hashcode()方法
final关键字
修饰变量,常量,不能被二次赋值
修饰方法,不能被子类重写,但可以被重载
修饰类,不能被子类继承
抽象类
由abstract关键字修饰的类
有抽象方法的类必须定义为抽象类
抽象类不一定有抽象方法,也可以有普通方法
抽象方法不可以有方法体,
即不能有{}
即不能有{}
抽象类不能创建对象
抽象类中定义子类共有的属性
定义子类必须要重写的方法
作用:让子类继承
接口
比抽象类还抽象的抽象类 interface
在接口中定义的属性全为常量
public static final int a = 10;
接口中的方法必须全为抽象方法
类与接口的关系是实现的关系
implements
类与类之间的关系继承的关系
extends
接口与接口的关系继承
extends
如果你是。。。就必须得会。。。
定义类某些规范
与抽象类的区别
1.抽象类只能单继承,接口可以多实现
2.接口中的变量全是常量,方法全是抽象方法,抽象类可以有普通变量,方法可以有非抽象方法
3.接口存在的意义就是为了定义规范,让子类去继承
7.Collection(集合)
面试,笔试中,Sting,StringBuilder,StringBuffer的区别
StringBuilder线程非安全,效率较高,StringBuffer线程安全
String和StringBuilder和StringBuffer的区别(背)
1.String 不可变长
2.StringBuilder和StringBuffer可变长
3.用StringBuilder代替StringBuffer,因为效率高
4.大量字符串操作时,用StringBuilder代替String
List
ArrayList
底层数据结构为线性表,添加、修改、删除比较慢,查询快,线程非安全
add(Object)
List list = new ArrayList();
list.add(1);
list.add(1);
size()
list.size()
get(index)
remove(index) remove(Object)
contains(Object)
toArray() E[]
返回E[]
iterator() Iterator<E>
返回Iterator<E>
LinkedList
底层数据为双向链表,添加修改删除比较快,查询慢,线程非安全
Vector
线程安全,效率低,不经常用
Set
HashSet<Object>
add()
HashSet中添加元素,输出结果是无序的
List、Set、Map的区别
List、Set同属于Collection接口
List添加有序,Set添加无序
List、Set可以使用Iteration遍历,而Map不行
List里面的元素可以重复,Set里面的元素不可以重复
Map使用put<K,V>添加元素,K唯一
8.多线程
继承Thread类,重写run()
实现Runnable接口
0 条评论
下一页