base
Java 特点
- 跨平台 依靠JVM 每个系统安装不同的虚拟机实现
- 没有指针 单继承 多实现 垃圾回收机制GC
- 完全面向对象 封装 继承 多态
开发环境
JDK = JRE + 开发工具 javac编译 Java运行 jar打包 doc文档
JRE = JVM + 基本类库
过程 .Java文件编译为.class字节码文件加载进内存 由jvm解释运行
关键字 保留的 goto const 命名不用关键字
语法 由26字母数字_和$ 不能以数字开头 不能有空格
命名规范 见名知意 驼峰命名
变量 variable
byte(-128到127) short int long boolean char float double
出了作用域不能用 使用前要赋值assign
运算符 参与运算时 ++在前 先自增再运算 ++在后 先运算再自增 –同理
1int a1 = 10;2int a2 = a1++;3System.out.println(a1+".."+a2);//a1=11,a2=104int a3 = 10;5int a4 = ++a1;6System.out.println(a3+".."+a4);//a3=11,a4=11
%符号只与左边有关
1int a1 = 10;2int a2 = -3;3System.out.println(a1%a2);//结果为1除法得到的是整数
System.out.println(a1/a2)//结果是-3;&和&& &&有短路效果 遇到false就不执行了
+=系列 会自动类型提升
三元运算符 条件?a:b 条件为true返回a false返回b
位运算符操作的都是整型的数据
2*8 可以用2<<3 8<<1
<< :在一定范围内,每向左移1位,相当于 * 2>> :在一定范围内,每向右移1位,相当于 / 2
流程控制 if 条件为Boolean 多个判断配合else
- switch case 注意case没有breaker 会有穿透效果 default最后执行
- case后面只能是常量 不声明范围 , switch 可以有byte short char int 枚举(1.5) String(1.7)
1 | for(初始条件;循环条件(Boolean);迭代条件){ |
2 | 循环体; |
3 | } |
1 | 初始化条件; |
2 | while(循环条件(Boolean)){ |
3 | 循环体; |
4 | 跌代条件; |
5 | } |
死循环 for(;;) while(true)
关键字 break在循环跳出循环 也可以在switch中
continue终止本次循环 继续下次循环
break 和 continue后面不能接语句
数组 多组相同数据按一定顺序排列的集合
int[] arr = new int[2]; int[] arr = {1,2};
一旦初始化长度不能改变 索引以0开始
是引用数据类型 默认值为null
基本数据类型 byte int short long 默认值为0 浮点float double 0.0
字符\u0000 布尔Boolean 为false
数组排序 冒泡
1 | for(int i = 0;i < arr.lengte - 1;i++){ |
2 | for(int j = 0;j < arr.length-i-1;j++){ |
3 | if(arr[j] > arr[j+1]){ |
4 | int temp = arr[j]; |
5 | arr[j] = arr[j+1]; |
6 | arr[j+1] = temp; |
7 | } |
8 | } |
9 | } |
数组常见异常 NullPointerException 空指针异常
ArrayIndexOutOfBoundsException 下标越界异常
面向对象 Object Oriented Programming
在程序中以对象来描述现实中的事物 以对象的关系来描述事物之间的联系
面向对象强调让谁做 面向过程强调让谁做怎么做
面向对象 三大特征 封装 封装 多态 (抽象)
类是一类具有相同属性和行为的集合
成员变量 类中方法外 有默认初始值 可以用修饰符修饰 在堆中
局部变量 方法上或方法内 没有初始值 不可以用修饰符修饰 在栈中
方法 修饰符 返回值类型 方法名(参数){方法体}
关键字 return 当方法没有返回值 结束方法 有就返回数据
方法重载 同一个类 方法名相同 参数类型.参数个数不同 例如println
值传递 基本数据是传递保存的数据 引用类型是传递地址值
递归 方法内调用本身
封装 隐藏具体的实现属性 仅对外提供公共的访问方式
提高了安全性 可维护性 可扩展性
4种修饰符从大到小 public protected 默认/缺省 private
例如私有化属性 就是封装的一种体现
构造器 每个类都有一个 用于创建对象和初始化对象信息
this 指当前对象 package 包 import导包
*继承 *
也是多态的前提 类和类只能单继承 接口可以多继承
没有显示说明 父类就是Object
子父类 子类可以拥有父类的属性和方法 提供代码的复用 扩展性
重写是方法名参数不变 方法体改变 也是多态的前提
super 调用父类的结构 要写在第一行 不能和this一起出现
多态 事物有多种形态 通用性
使用前提 继承关系 重写方法
是代码具有通用性 常用的就是父类引用指向子类对象
例如Object 的 equals 方法 形式参数是 Objece obj 我们使用的时候
其实要比较子类的属性
JDBC 获取连接的方法也是声明的一个父类方法 其他数据库来使用就用哪个数据库的方法 接口和抽象类的使用体现多态
instanceof关键字判断是否同一类型
Object类 所有类的父类
equals方法里做比较用的是==号 toString是显示地址值 需要重写
== 可以用于基本数据类型和引用数据类型
比较基本数据类型是比较数据值
比较引用数据类型是比较地址值 即引用是否同一对象
重写equals是为了比较实际内容
重写toString方法是显示对象的实体内容
包装类 Integer Character 其余首字母大写
基本数据类型/包装类—->String 使用 ValueOf();
String—>基本数据类型/包装类 使用parseXxx();
static关键字 都与类相关 随着类的加载而加载
共同属性用static修饰 静态只能调用静态
静态方法中不能有this和super 工具类基本就是静态方法
单例模式 只生成一次对象
分为饿汉式(线程安全) 懒汉式(线程不安全)
私有化构造器 在类里实例化对象 私有和用static修饰
提供公共的方法来返回对象 用static修饰
final关键字 修饰类不能被继承 修饰的变量为常量
abstract关键字 修饰方法或类 就是抽象的了
抽象方法只有声明 包含抽象类一定是抽象类 抽象类
用abstract修饰 不能实例化 可以没有抽象方法
可以有构造器 子类有extends继承
只能单继承 设计表示的是”is a”
接口
用interface修饰 不能实例化 全是抽象方法
不能有构造器 子类用implements实现
接口可以多实现 设计表示的是”like a” 规范
代理模式proxy
例如两个类实现一个接口 代理内构造器传入接口的引用
内部类创建线程
1.将Runnable的子类对象传递给Thread的构造方法
2.重写run方法
3.将执行的代码写在run方法中,最后我们开启线程
1 | new Thread(new Runnable() { |
2 | public void run() { |
3 | for (int i = 0; i < 10; i++) { |
4 | System.out.println("bbbbbbbbb"); |
5 | } |
6 | } |
7 | }).start();//开启线程 |
异常 Exception
捕获用try catch 可以配合finally
finally中一定执行 例如关闭数据库连接和流等
throw抛异常在方法内部
throws抛异常在方法上
父类没有抛 子类就不能抛
执行的方法a中,先后又调用了另外的几个方法,
这几个方法是递进关系执行的。
我们建议这几个方法使用throws的方式进行处理。
而执行的方法a可以考虑使用try-catch-finally方式进行处理。
自定义异常
1. 继承RuntimeException 或者Exception
2. 提供全局常量:serialVersionUID 提供重载的构造器