instanceof关键字可以检测类与对象是否有父子关系。
    例子代码如下:

    1. package com.codeday14.demo01;
    2. public class Person {
    3. public void run(){
    4. System.out.println("可以跑");
    5. }
    6. }
    1. package com.codeday14.demo01;
    2. import org.w3c.dom.ls.LSOutput;
    3. public class Student extends Person{
    4. }
    1. package com.codeday14.demo01;
    2. public class Teacher extends Person{
    3. }
    1. package com.codeday14.demo01;
    2. public class Application {
    3. public static void main(String[] args) {
    4. Object object = new Student();
    5. //Object > String
    6. //Object > Person > Teacher
    7. //Object > Person > Student
    8. System.out.println(object instanceof Student);//true
    9. System.out.println(object instanceof Person);//true
    10. System.out.println(object instanceof Object);//true
    11. System.out.println(object instanceof Teacher);//false
    12. System.out.println(object instanceof String);//false
    13. }
    14. }

    在application中,如果输入

    1. Person person = new Student();
    2. System.out.println(person instanceof String);

    会直接编译报错,因为这两个类是两个分支,没关系。
    这里其实是new了一个Student对象。
    父类不能调用子类的方法,但是可以强制把父类转换成子类。
    例如:

    1. Person obj = new Student();
    2. Student student = (Student) obj;
    3. student.run();

    上面的代码和((Student) obj).run();效果一致。
    Java就是抽象!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    static:
    类的静态属性

    1. package com.codeday14.demo02;
    2. public class Student {
    3. private static int age;
    4. private double score;
    5. public static void main(String[] args) {
    6. Student s1 = new Student();
    7. System.out.println(Student.age);
    8. System.out.println(Student.score);//非静态的变量不能直接通过类调用
    9. System.out.println(s1.age);
    10. System.out.println(s1.score);
    11. }
    12. }

    static属性在内存中只有一个,类中可以公用,但是非static属性不行。
    还有静态方法,不想听,后面学。

    静态代码块:
    调用构造器后自动执行一次,后面再new就不执行,匿名代码块每次都执行。

    1. package com.codeday14.demo02;
    2. public class Person {
    3. {
    4. System.out.println("匿名代码块");//匿名代码块
    5. }
    6. static {
    7. System.out.println("静态代码快");
    8. }
    9. public Person(){
    10. System.out.println("构造器");
    11. }
    12. public static void main(String[] args) {
    13. Person person = new Person();
    14. System.out.println("=================");
    15. Person person1 = new Person();
    16. }
    17. }

    image.png
    还可以通过static关键字静态导入包

    1. package com.codeday14.demo02;
    2. //静态导入包
    3. import static java.lang.Math.random;
    4. public class test {
    5. public static void main(String[] args) {
    6. System.out.println(Math.random());
    7. }
    8. }

    final:
    final修饰的类不能被继承,断子绝孙喽。

    abstract(抽象类):
    抽象类用abstrct修饰,可以被单继承,不能new
    抽象类中可以有普通方法。
    抽象方法也用abstract修饰,该类方法只有约束,没有实现。
    抽象方法所在的类必须为抽象类。
    抽象类有构造器。
    继承了抽象类的子类,必须实现抽象类的方法,除非它也是抽象类(套娃)。
    为啥要搞一个抽象类,没搞懂,后面实际操作留意一下。

    接口:
    接口只有规范,自己无法写方法 —> 约束和实现分离。
    接口用interface定义。
    接口中的所有定义都是抽象的(public abstract)。
    接口都有实现类,类通过Implements来实现接口,实现类必须实现所有方法才可以。
    接口中定义的属性是常量(public static)。
    在实现类中,按alt+insert快捷键可以一键重写。
    例:

    1. package com.codeday14.demo03;
    2. // 接口
    3. public interface UserService {
    4. void add(String name);
    5. void delete(String name);
    6. void update(String name);
    7. void query(String name);
    8. }
    1. package com.codeday14.demo03;
    2. public interface TimeService {
    3. void timer();
    4. }
    1. package com.codeday14.demo03;
    2. //类 可以实现接口,通过implements,可以多继承
    3. public class UserServiceImpl implements UserService,TimeService {
    4. @Override
    5. public void add(String name) {
    6. }
    7. @Override
    8. public void delete(String name) {
    9. }
    10. @Override
    11. public void update(String name) {
    12. }
    13. @Override
    14. public void query(String name) {
    15. }
    16. @Override
    17. public void timer() {
    18. }
    19. }

    内部类:
    内部类可以调用外部类的private属性。
    内部类可以分为内部类,静态内部类,局部内部类。
    太操蛋了,不想听。

    异常:
    Error:虚拟机崩了,JVM会中止运行。
    Exception:一般是由程序逻辑错误引起的。

    异常处理的五个关键字:
    try\catch\finally\throw\throws

    1. package com.codeday14.demo05;
    2. public class ErrorTest {
    3. public static void main(String[] args) {
    4. int a = 1;
    5. int b = 0;
    6. try {
    7. System.out.println(a/b);
    8. }catch(ArithmeticException e) { //捕获异常,括号里是想要捕获的异常类型
    9. System.out.println("程序出现异常,变量b不能为零");
    10. }catch (Throwable t){ //catch可以写多个
    11. System.out.println("Throwable");
    12. }finally { //处理善后工作
    13. System.out.println("finally");
    14. }
    15. // finally可以不用,catch是必要的
    16. }
    17. }

    ctrl+Alt+T可以快捷生成语句。

    主动抛出异常:throwthrows,一般用在方法中。

    1. if (b == 0){
    2. throw new ArithmeticException(); // 主动抛出异常
    3. }

    ended at No.79
    to be continued…