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

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号