JavaSE学习笔记

164 阅读2分钟

final

  • final: 不可改变,最终的含义。可以用于修饰类、方法和变量。
    • 类:被修饰的类,不能被继承。

      修饰符 final class 类名 { }
      

      例如 public final class String

    • 方法:被修饰的方法,不能被重写。

    • 变量:被修饰的变量,有且仅能被赋值一次。

      修饰符 final 返回值类型 方法名(参数列表){
          //方法体
      }
      
      修饰符 final 数据类型 变量名 = 值;
      

      在声明的时候必须赋值!

被final修饰的常量名称,一般都有书写规范,所有字母都大写

  • final的应用场景:
    • 定义一个可供使用但不可被修改的类,如 public final class Stringpublic final class Mathpublic final class Scanner 等。
    • 定义常量,如final double PI = 3.14;

接口

  • 接口的定义
    • 方法:抽象方法,默认已加上public abstract,无需手动写。
    • 成员变量:常量,默认加上public static final修饰,无需手动书写。
    public interface 接口名{
        // 成员变量: 常量
        int AGE = 12;
        String SCHOOL_NAME = "黑马程序员";
        // 方法:抽象方法
        void run();
    }
    
    

instanceof关键字

格式

变量名 instanceof 数据类型 
如果变量属于该数据类型或者其子类类型,返回true。
如果变量不属于该数据类型或者其子类类型,返回false

代码例子

public class Test {
    public static void main(String[] args) {
        // 向上转型  
        Animal a = new Cat();  
        a.eat();               // 调用的是 Cat 的 eat

        // 向下转型  
        if (a instanceof Cat){
            Cat c = (Cat)a;       
            c.catchMouse();        // 调用的是 Cat 的 catchMouse
        } else if (a instanceof Dog){
            Dog d = (Dog)a;       
            d.watchHouse();       // 调用的是 Dog 的 watchHouse
        }
    }  
}

匿名内部类

  • 匿名内部类:定义一个没有名字的内部类,必须继承一个父类或者实现一个父接口

  • 格式:

    new 类名或者接口名() {
         重写方法;
    };
    

    以上伪代码包含了1. 继承/实现 2. 方法重写 3. 创建对象(new关键字)

    例子

    new Swim() {
            @Override
            public void swimming() {
                System.out.println("蝶泳...");
            }
        };
        
        
    interface Swim {
    public abstract void swimming();
    }
    
    • 这个没有名字的类想要实现Swim接口,把Swim写在了大括号前,表示这个没有名字的类实现了Swim接口,所以需要在类中重写接口里面所有的抽象方法。{}里面的是真正的匿名内部类。而上面的整个部分应该叫做匿名内部类的对象。
    • 定义匿名内部类类型的变量:多态
      Swim s = new Swim() {
                  @Override
                  public void swimming() {
                      System.out.println("蝶泳...");
                  }
               };
      
  • 使用场景

    • 当方法的参数是接口或者类时,以接口为例,可以传递这个接口的实现类对象,如果实现类对象只要使用一次,就可以用匿名内部类简化代码。

反编译

terminal输入 $javap xxx.class