一、类型转换
1.instanceof
-
作用:判断其左边对象是否为其右边类的实例
-
语法:
result = object instanceof class 返回一个布尔值
Result :布尔类型
Object : 任意对象表达式
Class : 任意已定义的对象类
- object 是 class 的一个实例,则 instanceof 运算符返回 true。
- 如果 object 不是指定类的一个实例,或者 object是 null,则返回 false。
- class可以是类,可以是接口。
2.类型转换
- 父类与子类装换
- 直接上代码:
person(高) obj = new Student()(低);
强制转换:
父 类想调用子类中的方法,高转低
Student stu = (Student) obj;
或者:((Student) obj).方法();
//这样 就能调用 student中的方法了
子类想调用父类
可能会丢失一些方法
小结
- 父类指向子类对象
- 子类转换为父类 向上转型
- 父类转换成子类 向下转型 强制转换
- 目的为了让代码更加 简洁
二、静态(static)关键字
1.静态变量特点
a.内存分配 : 静态方法和变量因为初始化就被分配内存空间,因此是连续的
b.生命周期 :静态变量存活周期 初始化----程序结束
c.调用方法:类.静态变量名
d.共享方式:是全局变量,因此所有类的实例对象可共享
e.访问方式:静态成员不能访问非静态成员
语法: static int i;
- 静态代码块 (只执行一次) : static{ }
- 匿名代码块 (赋初始值) {}
- 构造方法
- 静态导入包
- public final 【name】{ }
被final修饰过的类就不能被子类继承
三、抽象类(abstract)
-
通过 abstract修饰 的就是修饰类、修饰方法
- 在一个类上面 使用abstract 就变成了抽象类
例子:
- 在一个类上面 使用abstract 就变成了抽象类
public abstract class Action{
}
特点:
-
不能new这个抽象类,只能考子类实现; 约束
抽象类中可以写不同的方法抽象方法必须在抽象类中
抽象的抽象; 约束~
四、接口
- 普通类:只有具体实现
- 抽象类:具体实现和规范(抽象方法)都有!
- 接口:只要规范 ,自己无法写方法。约束和实现分离
- 接口就是规范,定义一组原则
- 接口的本质就是契约
- 申明接口的关键字 : interface
- 语法: public interface [name]{ }
作用:
- 约束
- 定义了一些方法,让不同的人实现
- public abstract 默认的方法
- public static final 静态常量
- 接口不能被实例化
- 通过 implement 可以实现多继承,切需要“重写”
//interface 定义的关键字,接口都是需要有实现类
public interface Demo10_UserService { //定义了一个Demo10_UserService的接口
//接口中的所有定义都是抽象的 public abstract ,所以void不用加修饰符
//其中有四个对象
void add(String name);
void delete(String name);
void update(String name);
void query(String name);
}
-------------------------------------------------
public interface Demo10_TimeService { //再定义一个接口,其中有一个对象
void timer();
}
-------------------------------------------------
public class Demo10_UserSericempl implements Demo10_UserService,Demo10_TimeService {
//定义一个实现类, 一般命名为:[name]impl
//public class [name]impl implements name1,name2{ }
@Override //进行方法重写
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void query(String name) {
}
@Override
public void timer() {
}
}
五、内部类
一个类的内部再定义一个类
- 成员内部类
- 静态内部类
- 局部内部类
- 匿名内部类
六、异常(Exception)
1.定义
- 指程序在运行 出现不期而至的各种情况
java把异常当做对象来处理,并定义了一个基类 java.lang.Throwable作为所有的异类的超类
-
error 虚拟机运行错误
-
exception —runtime exception 运行异常
-
try监控异常区域 、catch捕获异常、finally 善后工作、 throw(抛出)、throws(捕获)
例子:
public static void main(String[] args) {
int a =10;
int b =5;
try { //监控区域
System.out.println(a/b);
}catch (ArithmeticException e){ //报错反馈
System.out.println("报告错误为·····");
}catch(Throwable){
System.out.println("sadasdsadasda")
}finally { //横竖都得输出的
System.out.println("善后工作");
}
七、自定义异常
- 字面意思自己定义报错
public class Demo12_MyException extends Exception {
private int detail;
public Demo12_MyException(int a){
this.detail = a;
}
@Override
public String toString() {
return "Demo12_MyExceotion{"+ detail +"}";
}
}
------------------------------------------------------------
static void text(int a) throws Demo12_MyException {
System.out.println("传递的参数为:"+a);
if(a>10){
throw new Demo12_MyException(a);
}
System.out.println("ok");
}
public static void main(String[] args) {
try {
text(20);
}catch (Demo12_MyException e){
System.out.println("Demo12_MyException" + e);
}
}
实际应用经验总结
- 处理异常时 采用逻辑合理规避同时辅助 try-catch 来处理
- 多个catch时 在最后可以加一个大型的异常报错(Exception)来处理可能遗漏的异常
- 对于不确定的代码 可以加个try-catch 来处理潜在异常
- 添加finally 语句块去释放占用的资源
参考1
自学内容,来源“kuangstudy.com”