Java 笔记(全)
1. Java 程序的语法
1.1 标识符的命名规范
标识符:给类或者变量类的方法属性命名都是标识符
组成必须是:字母、数组、_、$、#、-
首字母不能是数字
1.2 约定
- 类:首字母大写
- 变量、方法名、属性首字母小写
- 包全部小写(包 Package: 相对于操作系统文件夹)
- 驼峰式命名
- 见名知意
2. Java 的输入输出
System.in
(输入)
System.out
(输出)
3. 基本类型(8大)
3.1 整数:
数据类型 | 占用字节 | 数据范围 |
---|---|---|
byte | 占一个字节(8bit) | -2^7(-10111 1111=127) - 2^7 (1111 1111=-128) |
short | 占两个字节(16bit) | -2^15 - 2^15-1 |
int | 占四个字节(32bit) | -2^31 - 2^31-1 |
long | 占八个字节(64bit) | -2^63 - 2^63-1 |
3.2 小数:
数据类型 | 占用字节 | 数据范围 |
---|---|---|
float | 占四个字节(32bit) | -3.410^38 - 3.410^38 |
double | 占八个字节(64bit) | -1.710^308 - 1.710^308 |
3.3 字符:
数据类型 | 占用字节 | 数据描述 |
---|---|---|
char | 占两个字节(16bit) | 采取 Unicode 编码,可以存放中文 char c = '中'; |
3.4 布尔:
数据类型 | 占用字节 | 数据值 |
---|---|---|
boolean | 占1个字节(8bit) | true false |
4. 数据类型的转换
4.1 自动类型转换
- 数据类型兼容
- 低的数据类型赋值给高的数据类型
4.2 强制类型转换
高的数据类型赋值低的数据类型
- 溢出
- 精度的丢失
5. 操作符
- 算术运算:
+ - * / % ++ --
(不建议 byte,short,char 进行操作,如果一定要操作,都默认转换成 int 操作) - 比较运算符:
== != > < >= <=
- 逻辑运算符:
&& || ! & |
(返回 Boolean) - 位运算:
& | 《 》
- 三目运算:
条件 ? 值1 : 值2
(条件成立,返回值1,否则返回值2)
6. Java 流程控制语句
6.1 顺序结构
forEach
:(加强型 for 循环)
for(String string : array)
:for(数据类型 变量名 : 数组)
6.2 分支结构
/**
if else 主要用在区间段判断
switch 主要用在定值判断,switch 一般是与 break 配合使用
*/
if(条件) {
条件true要执行的代码
} else if(表达式语句) {
} else {
条件false要执行的代码
}
switch(变量) {
// 变量的数据类型:只能是byte short int 或者 enum
case 值1: 操作1;
......
// String 只能是仅代表1.7与以后的版本才可以放在switch中
case 值n: 操作n;
default:其他情况的操作;
}
6.3 循环结构
/**
while 与 do while 的区别:
一般 while 能做的操作do while 也能够实现
while 可能执行0次或者多次,但是 do while 至少执行一次
*/
while(条件) {
循环语句
}
do{
}while(条件);
/**
中断循环:
break 中段本层循环,不能中断外一层
continue 中断本次循环
this 代表当前对象
*/
7. Java 面向对象
7.1 计算机语言发展
- 机器语言:0 1
- 汇编语言
- 初级编程语言:passic,vb,vc,dephi,PHP,ASP
- 高级语言:C#,C++,Java,Object-C
7.2 语言又分为两种
-
面向过程:vc
-
面向对象:Java,C++
面向过程是面向对象的基础,面向对象依赖于面向过程,他们之间不存在冲突
面向对象(OO),面向对象的编程(OOP),面向对象的分析(OOS),面向对象的设计(OOD)
面向过程 → 侧重于业务流程的实现,算法的本身
面向对象 → 侧重于实现业务的事物,调用着程序的指挥官
面向对象:编程最小单位
8. Java 定义
8.1 Class(类)
把具有相同属性与行为的一系列事物统称为一个类。例如:动物,鱼 <・)))><<
8.1.1 定义类的语法:
class 类名{
属性
数据类型 属性名;
......
数据类型 属性名;
// 行为也叫方法
返回值类型 方法名(参数列表){
方法体
}
}
/**
类体:抽象的概念,具体相同属性与行为的一系列事物的总称;
类体 → 属性与行为
*/
8.2 引用类型
类,接口,数组
8.3 属性的定义
类的属性也可以称为类的成员变量,类的成员属性,域;Java 的数据类型 属性名
类的属性如果不赋值,会有默认值,基本类型默认值都与0相关,引用类型默认值都是 null
8.4 方法(函数)
是具有特定功能的封装
8.4.1 方法的定义:
返回值的类型 方法名(参数列表 形式参数){
方法体
}
8.5 返回值类型
可以是 Java 的数据类型:基本类型,引用类型,void
8.6 对象
是客观存在的,是类的实例;类是对象的模版(万物皆对象)
创建对象:类名 对象名 = new 类名();
调用对象的属性或者行为: .
代表引用
对象名.属性,对象名.行为(参数列表);
8.7 类的属性
成为类的成员属性,全局变量会有默认值
默认值规则:byte,short,int,long 默认值:0
8.8 package(包)
相当于操作系统里面的文件夹
包主要是为了解决开发过程中类的命名冲突问题
一般把完成特定功能的代码放在同一个包里
Java.lang
:Java 核心类包,默认都已经导入,不需要手工导入
Java.util
:Java 的工具类包
9. Java 面向对象
面向过程:注重程序的流程,数据结构与算法,参与者就是它本身
面向对象:注重的事物的属性与行为,参与者更多是一个指挥者
9.1 extends(继承)
继承是单继承:一个类只能有一个直接父类,但一个父类可以有多个子类
Java 中没有多继承,但是有多重继承,所有类的顶级父类是 Object 类
9.2 继承关系中,类的初始化顺序
- 父类的静态 static
- 子类的静态
- 父类的普通(属性与方法) 代码
- 父类的构造
- 子类的普通
- 子类的构造
9.3 overload(方法的重载)
- 发生在同一个类中
- 方法名相同
- 参数列表不同(个数不同,参数数据类型不同,个数与数据类型都不相同)
- 与返回值类型无关,与访问修饰符无关
9.4 override(继承方法的覆盖 / 重写)
在继承关系中,子类对父类的方法的重新实现
- 方法名与父类相同
- 参数列表也相同
- 返回值类型也相同,或者可以隐式转换成父类的返回值类型
9.5 继承转型
- 向上转型:把子类对象转换成父类对象(是安全的,但子类对象的自身属性会被隐藏)
- 向下转型:把父类对象转换成子类对象
- 不允许直接 new 父类赋值给子类的向下转型
- 可以向上转型,再向下转型
9.6 混合类型转型
只能骗过编译器,运行会发生转换异常
9.7 访问修饰符
修饰符:控制别的类对本类的属性与方法的访问权限
面向对象的封装,就是通过访问修饰符来控制访问权限
- 修饰符 数据类型 属性名;
- 修饰符 返回值类型 方法名(参数列表)
- 修饰符 class 类名{}
修饰符 | 本类 | 同包下的类(子类与非子类) | 不同包的子类 | 不同包的其他类 |
---|---|---|---|---|
public | T | T | T | T |
protected | T | T | T | F |
default | T | T | F | F |
private | T | F | F | F |
- public:公共权限
- protected:受保护的
- default / 不写:默认
- private:私有的
9.8 instanceof(判断对象类型)
对象名 instanceof 类名:用来判断对象是否是类的实例
10. Java 中的常用方法
10.1 构造方法
Object() {}
toString()
:返回类的类路径 + @+hascode对应的16进制数equals(Object obj)
:对象(Object)的比较 equals与==相同hascode()
: 返回内存地址的整数
10.2 字符串序列(String)
构造:String() String(String s) String(byte s[]) String(char s[])
10.3 构造字符串对象
String s = "hello";
10.4 字面量值赋值
String s = new String("hello");
10.5 常用方法
方法 | 描述 |
---|---|
boolean equals(Object anObject) |
重写了Object equals 比较字符串内容 |
boolean equalsIgnoreCase(Object anObject) |
忽略大小写比较字符串内容 |
int length() |
获取字符串长度 |
char charAt(int index) index → 0-length()-1 |
获取字符串中 index 位置的字符 |
indexOf("要查找的字符串") |
返回第一次出现要查找的字符串的位置,如果查找不到返回-1 |
indexOf("要查找的字符串",int index) |
跳过 index 位置,开始查找第一次出现要查找的字符串的位置 |
lastIndexOf("要查找的字符串") |
返回最后一次出现要查找的字符串的位置 |
lastIndexOf("要查找的字符串",int index) |
跳过 index 位置,返回最后一次出现要查找的字符串的位置 |
substring(int begin) |
截取字符串从 begin 开始到末尾 |
substring(int begin,int end) |
截取字串,从 begin 开始到 end 不包含 end |
replaceAll("原串","新串") |
把字符串中的所有原字符串替换成新串 |
split("分隔符") |
分割符把字符串分割成若干个字符,返回分割后的字符串数组 |
concat("xxx") | 相对于 "原串" + "xxxxx",字符串追加 |
10.6 Object 类
Object 是 Java 的祖先类,基类,金字塔最顶端的类,最小的细胞类
-
如果是基本类型(byte short int long char float double boolean)
== 比较的内容(值) -
如果比较是引用类型(类 接口 数组)
== 比较的是内存地址
-
equals 只能用于引用类型的比较
比较的时候看当前对象的类里面有没有重写 equals 方法,如果没有重写 equals 方法,默认调用 Object 里面的 equal 方法
如果重写 equals 方法,那么按照当前类中 equals 方法的逻辑进行比较
-
如果两个对象 equals() 返回true,那么 hashCode() 值会相同,但是两个对象 hashCode() 相同,两个对象未必能 equals() 相等
10.7 Java 重写
- 继承关系中,子类对父类的方法重写实现
- 方法名相同
- 参数列表也相同
- 返回值类型也相同或者可以隐式转换成父类的返回值类型
- 访问修饰符的权限不能低于父类
10.8 final 关键字
final 修饰变量:就变成常量,不可以变
final 修饰方法:就变成最终方法,不可以被重写 override
final 修饰类:类就不可以被继承 (太监类)
10.9 StringBuffer 可变的字符串序列
append()
:往字符串追加内容
insert(位置,"内容")
:往字符串指定位置追加内容
delete(int start,int end)
:删除字符串从 start 开始到 end - 1 位置上的字符串
reverse()
:让里面的内容反转
10.10 System
System.in
:输入流
System.out
:输出流
10.11 获取控制台的输入对象
Scanner in = new Scanner(System.in);
// 遇到空格就不往后取内容
in.next();
// 遇到换行符才不往后取内容
in.nextLine();
10.12 GC(garbage Collect) 垃圾回收器
Java 程序垃圾是不需要程序员去手工回收,系统(JVM)在后台启动一个线程(守护线程) 每隔一定的时间,自动调用System.gc()
方法,扫描系统中长时间
未使用对象,或者对象指向null,自动回收这些对象。
调用该对象的finalize()
方法来释放占用的内容空间,当然程序员也可以手工调用System.gc()
10.13 java.util.Date 时间类
SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类
10.13.1 Date 时间格式
yyyy:四位年
MM:月
dd:日
hh:12进制时
HH:24进制时
mm:分
ss:秒
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss")
new SimpleDateFormat("yy年MM月dd日 HH时:mm分:ss秒 ")
10.14 Math 数学工具类
10.15 基本类型的包装类
基本类型的包装类里面都提供了操作该基本类型的属性与方法
基本类型 | 包装类 |
---|---|
byte | java.lang.Byte |
short | java.lang.Short |
int | java.lang.Integer |
long | java.lang.Long |
float | java.lang.Float |
double | java.lang.Double |
char | java.lang.Character |
boolean | java.lang.Boolean |
10.16 数组
Java 数组用来存储具有相同数据类型的若干个数据的集合,数组长度不可变
10. 16.1 一维数组的定义
一个一维数组里面每个元素都是一个一维数组
int nums[] = {1,2,3,4,5,6,7,8,9};
-
动态定义
-
申明: 数据类型[] 变量名(数组名);
-
初始化:数组名 = new 数据类型[length];
-
数据类型[] 变量名(数组名) = new 数据类型[length];
-
-
静态定义
- 数据类型[] 数组名 ={数据1,......数据n}
10.16.2 二维数组的定义
int nums = {{1,2,3},{4,5,6},{7,8}};
易出现异常
ArrayIndexOutOfBoundsException
:数组下标越界异常
11. 排序算法
11.1 冒泡排序
# 排序数字
8,7,6,3,5,2,4,1
# 首轮
7,8,6,3,5,2,4,1
7,6,8,3,5,2,4,1
7,6,3,8,5,2,4,1
7,6,3,5,8,2,4,1
7,6,3,5,2,8,4,1
7,6,3,5,2,4,8,1
7,6,3,5,2,4,1,8
# 第二轮
6,7,3,5,2,4,1,8
6,3,7,5,2,4,1,8
6,3,5,7,2,4,1,8
6,3,5,2,7,4,1,8
6,3,5,2,4,7,1,8
6,3,5,2,4,1,7,8
# 末轮
8,7,6,3,5,2,4,1
11.2 选择排序
'''
首轮
max=8
index=0
'''
8,7,6,3,5,2,4,1
'''
第二轮
max=7
index=1
'''
8,7,6,3,5,2,4,1
'''
第三轮
max=6
index=2
'''
8,7,6,3,5,2,4,1
'''
末轮
max=1
index=7
'''
8,7,6,5,4,3,2,1
11.3 查找算法
- 全部遍历
- 二分查找(折半查找):适合已经排好序的数组
12. abstract 抽象
12.1 抽象方法
一个方法没有方法体{}
访问修饰符 abstract
返回值类型 方法名(参数列表);
这个时候方法就必须申明为抽象方法(用关键字 abstract 修饰)
12.2 abstract 抽象类
访问修饰符(default protected public)
abstract class 类名{}
12.3 抽象类
- 可以有抽象方法,也可以没有抽象方法
- 抽象类可以有构造方法,但是不能 new 操作
- 抽象类中可以有成员变量(属性)成员方法
- 抽象类中可以有常量
- 抽象类可以继承其他的类
- 如果一个类继承一个抽象的类,要不继续声明为抽象类,要么重写抽象类中的所有抽象方法
- 抽象类用来被继承的,只能单继承,抽象类与子类存在 instanceof 关系
12.4 接口(interface)
- 接口是一种特殊的抽象,接口中的方法全部都是抽象的
- 接口中方法默认都是 public abstract 都是抽象的
- 接口中不能有成员变量方法
- 接口中可以有常量,默认都是public final
- 接口没有构造,不能实例化
- 接口不能继承类
- 接口可以继承接口,接口与接口的继承多继承
- 接口是用来被实现的,一个类可以实现多个接口,一个类可以实现多个接口主要是为了弥补 Java 单继承缺陷
12.5 抽象类与接口对比
比较点 | 抽象类 | 接口 |
---|---|---|
定义 | abstract class 类名{} | interface 接口名{} |
构造器 | 有 | 无 |
成员属性方法 | 有 | 无 |
常量 | 有 | 有 |
抽象方法 | 可以有,可以没有 | 有 |
继承exends | 抽象类可以继承其他类,只能单继承 | 接口只能继承接口,可以多继承 |
实现implements | 抽象类可以实现接口,可以多实现 | 接口不能实现接口 |
关系 | 抽象类是用来被继承的,与后代存在 instanceof 关系 | 接口是用来被实现的,与实现接口的类不存在任何关系 |
13. Java 的集合类框架
13.1 数组
数组定长的定义后大小不可以变化的
13.2 Collection:集合类框架的顶端接口
13.2.1 常用方法
方法 | 描述 |
---|---|
add(Object obj) | 追加元素 |
addAll(Collection c) | 追加另外一个集合 |
size() | 集合里面的元素个数 |
remove(Objecr obj) | 删除元素 |
removeAll(Collection c) | 删除外一个集合里面存在的所有元素 |
clear() | 清空集合 |
isEmpty() | 判断集合是否没有元素 |
iterator() | 迭代集合里面的元素 |
13.2.2 Collection 子接口
List 接口:有序的,可以重复的集合接口
13.2.3 常用实现类
-
ArrayList,LinkedList,Stack,Vector
- ArrayList 取数据块,插入慢
- LinkedList 取数据慢,插入快
- ArrayList 与 Vector:Vector多线程安全的
-
Set:无序的,不可以重复的集合
-
常用实现类 HashSet,TreeSet,HashSet
-
去重:先调用当前对象的 hashCode 去集合里面找,如果没有相同的就会放入集合,如果有相同的继续调用 equals(),如果有 equals 就不放入,如果没有相同的就放入
-
-
Map 接口: 键值对存储
- key(键)是一个 Set 集合,不可以重复值;value(值) 是一个可重复的集合
- 常用实现类:HashMap,HashTable,TreeMap
13.2.4 List 常用的方法
get(index,Object obj)
:在指定位置上添加元素toArray()
:把集合转换成数组
14. Java 泛型
指定参数或者集合的数据类型
-
用法
List<数据类型> list = new ArrayList();
-
泛型好处
- 指定存放的数据类型,提升安全性
- 指定存放的数据类型,取数据时候减少强制类型的转换,减少出错的概率,同时提升程序的运行效率
15. Java 的异常处理(Exception)
15.1 Throwable 类
子类 Error 是程序错误,不可以运行或者内存溢出,断电,程序是无法捕获的
Exception 程序运行过程中输入输出计算结果不当发生
15.2 异常处理五大关键字
关键字 | 描述 |
---|---|
try | 尝试运行某段代码 |
catch | 捕获异常 |
finally | 最终要执行的一段代码,在程序中用来释放资源,关闭打开的资源 特殊情况:finally 之前 try 或者 catch 中遇到 System. |
thorw | 抛出异常 |
throws | 声明异常 |
15.3 自定义异常处理
- 声明一个异常类(
写一个类 extends Exception{}
) - 可能发生异常的方法都声明可能抛出自定义类
- 再调用抛出的异常
本文来自博客园,作者:Schieber,转载请注明原文链接:https://www.cnblogs.com/xiqingbo/p/java-28.html