static详解
非静态方法可以直接调用当前类中的静态方法
匿名代码块
静态代码块(赋初始值)
构造器
执行顺序
静态代码块只执行一次
静态导入包
抽象类就是有abstract修饰符,子类继承父类比需要重写父类的方法除非子类也是抽象类。
注意:不能new这个抽象类,只能靠子类去实现它;约束 !抽象类里可以写正常方法;抽象方法必须在抽象类中。
思考:抽象类是否存在构造器?
抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。在继承了抽象类的子类中通过super()或super(参数列表)调用抽象类中的构造方法。示例代码如下:
package ahu;
abstract class Base{
int a=7;
public Base(){
a=8;
}
public Base(int i){
a=i;
}
}
public class Demo01 extends Base {
public Demo01(){
super();
}
public Demo01(int i){
super(i);
}
public static void main(String[] args) {
Demo01 demo=new Demo01();
System.out.println(demo.a);
Demo01 demo1=new Demo01(9);
System.out.println(demo1.a);
}
}
运行结果: 8 9
抽象类存在的意义 把共有的东西抽象出来;提高开发效率;
接口(可以继承多个,用,隔开)
接口中的所有定义其实都是抽象的默认为public abstract。在其中你可以定义方法可以带参数可以不带参数。在接口里定义字段都是默认为常量,public static final 在其中你可以定义方法可以带参数可以不带参数。
接口都有实现类,实现了接口的类就需要重写接口里的方法;如图
接口和抽象类的区别在于,接口中是不允许实现方法的而抽象类是可以的
接口总结:
内部类:
内部类可以获得外部类的私有属性,和方法
一个Java类中可以有多个class类,但是只能有一个public class类;可以在里面写main方法
局部内部类:
没有名字初始化类,不用将实例保存在变量中:
这里其实会返回一个userService对象 :
蓝色的地方就是一个实现了接口的匿名类,下图:
异常体系
exception:
异常处理机制:抛出异常;捕获异常
异常处理五个关键字
try、catch、finally、throw、throws
异常处理演示:
package exception;
public class Test {
public static void main(String[] args) {
int a = 1;
int b = 0;
try {//监控区域
System.out.println(a/b);
}catch (ArithmeticException e){//捕获异常
System.out.println("程序出错,b不能为零");
}catch(){}
catch(){}//这里规则和if else 一样;范围从小到大
finally {//处理善后工作、、、//这里finally可以有可以没有
System.out.println("finally");
}
//finally 可以不要finally,假设IO,资源,关闭!
}
}
这里是可以捕获多个异常的;
快捷键:Ctrl+alt+t
自己加入逻辑:System.exit(status:1);
throw 主动地抛出异常:
throws:抛到更高的异常
主动的抛出异常,一般在方法中使用
自定义异常:
catch后可以加一些处理逻辑,不要仅仅是打印出来