OOP——高级

OOP——大纲
1.类变量、类方法、static
2.main()
3.{} 和 static{}
4.单例设计模式
5.abstract、interface
6.内部类

1.类变量、类方法

class Person {
  public static int count;

  public static void walk() {
    System.out.println("散步");
  }
}
  类中使用static修饰的属性或方法(还有代码块),可直接通过 类名.属性/方法 调用,隶属类
  当调用时,会在方法区加载类信息加载完成,即可调用,无需创建对象,static修饰属性归类所有
  也同时是所有对象共享的(也可使用 对象.属性/方法 调用),主要使用在共享数据方面

  Java8以前类变量存储在方法区的静态域
  Java8以后类变量存储在堆空间

OOP——高级

类方法,同理直接使用 类名.属性/方法 调用,或 对象.属性/方法 调用
---具体调用机制,同普通方法调用机制相同

2.main() 方法

  public static void main(String[] args) {
    //...
  }
  声明为public,是为了JVM有权限调用
  声明为static,JVM调用main()方法时不必创建对象
  main(String[] args)也是可以传入参数的,args可以直接在main中使用
    ---1.DOS 直接在命令行输入运行命令时在其后加上参数列表 
    ---2.使用IDEA直接Edit Configurations中的Program arguments出输入即可
    ----均使用空格隔开参数即可

示例:

DOS中传参运行

OOP——高级


IDEA中传参运行

OOP——高级
OOP——高级
OOP——高级

3.代码块

两种代码块 {} 和 static{}
可以理解是一种对构造器的补充
1.类 
  一旦使用到类成员或者创建对象时,就会加载类,加载过程就会执行static修饰的代码块----从根父类开始执行
2.对象
  类加载完后,创建对象就会调用构造器,会在构造器中隐式的调用代码块----从父类开始

OOP——高级

OOP——高级

4.单例设计模式

OOP——高级

  //懒汉式
  //只能有一个女朋友
  
class Girlfirend {
    //成员
    private static GirlFriend gf = new GirlFriend("老婆"); //加载类时即可创建对象,且私有化,只能在加载时创建,仅一次
    private Girlfriend() {
      //私有化构造器,外界无法new  
    } 
    public static GirlFriend getInstance() { 
      return gf;  //声明static方法,直接返回对象
    } 
}  

  //饿汉式
class Girlfirend {
    //成员
    private static Girlfriend gf; //默认是 null,加载类时,先不创建对象
    private Girlfriend() {
      //私有化构造器,外界无法new  
    } 
    public static GirlFriend getInstance() { //声明static方法,直接调用返回对象
      if (gf == null) { //第一次调用则,创建
        gf = new Girlfriend("老婆");  
      }
      return gf; //已创建则直接返回对象
    } 
} 

5.abstract、interface

接口---指定规范
接口可以看做是对java单继承的一种弥补
接口制定规范的体现---见下图,只需统一对访问数据库的功能实现制定接口,就可统一明明等规范
而后具体定义类去实现接口的功能的具体实现
使用功能时只需要使用定义接口类型接收传入对应具体实现功能的对象即可---多态体现

OOP——高级

  public interface DBInterface { 
    //项目经理 
    public void connect();//连接方法 
    public void close();//关闭连接 
  }

  //A 程序员MySQL
  public class MysqlDB implements DBInterface { 
    @Override 
    public void connect() { 
      System.out.println("连接 mysql");  
    }
    @Override 
    public void close() {
     System.out.println("关闭 mysql"); 
    } 
  }

  //B 程序员Oracle 
  public class OracleDB implements DBInterface{ 
    @Override 
    public void connect() {
       System.out.println("连接 oracle"); 
    }

    @Override 
    public void close() { 
      System.out.println("关闭 oracle"); 
    } 
  }

  public class Main { 
    public static void main(String[] args) { 
      MysqlDB mysqlDB = new MysqlDB(); 
      t(mysqlDB); 
      
      OracleDB oracleDB = new OracleDB(); 
      t(oracleDB);
    }
    public static void t(DBInterface db) { //统一按接口类型传入即可,具体功能实现,传入实现类的对象即可 ---向上转型的体现 
      db.connect(); //动态绑定 
      db.close();  //动态绑定
    } 
  }

6.内部类

内部类,技术分水岭(重点!!!),深入理解OOP
----重点 匿名内部类

OOP——高级

重点:理解语法

OOP——高级

public class InnerClass { 
  public static void main(String[] args) { 
    //当做实参直接传递,简洁高效 
    f1(new IL() { 
      @Override 
      public void show() { 
        System.out.println("这是一副名画~~..."); 
      } 
    }); 
}

OOP——高级

上一篇:一维随机变量及其分布


下一篇:list变量和dict变量前面加*号