• Java笔记7-多态父类静态


    多态的应用-面向父类编程
    1.对象的编译时类型写成父类
    2.方法的返回类型写成父类
    3.方法的参数类型写成父类

    编译时类型:对象的声明时类型,在于编译期间
    运行时类型:new运算符后面的类型

    编译时类型决定了对象的访问能力
    运行时类型决定了对象真正的行为能力
    --------------------------------------------------------------------------------
    将打印图形面积和周长的业务方法封装到一个业务类当中ShapeBiz.java

    //输出圆的周长
    public void circleGirth(Circle c){
    System.out.println(c.girth());
    }

    //输出矩形的周长
    public void rectGirth(Rect r){
    System.out.println(r.girth());
    }

    .....

    采用面向父类编程-方法的参数类型可以写成父类
    只需要在业务类当中定义一个方法,就可实现输出任意图形的周长或者面积

    public void girth(Shape s){//此处可以传入Shape的任意一个子类对象
    System.out.println(s.girth());
    }

    public void area(Shape s){
    System.out.println(s.area());
    }

    练习:把输出Employee员工的工资的方法封装到输出员工工资的业务类中
    --------------------------------------------------------------------------------------
    传入一个参数,返回某一个父类的具体的子类的实例

    培训师父类 Trainer.java
    ->会计培训师 AccountTrainer.java
    ->游泳培训师 SwimmingTrainer.java
    ->程序员培训师 ProgrammingTrainer.java

    定义一个方法:返回某一个类的具体的实例

    public static AccountTrainer getInstance(){
    return new AccountTrainer();
    }

    java.util.Calender

    定义一个类:TrainerFactory.java


    public class TrainerFactory{
    //定义一些静态常量属性
    public static final int ACCOUT = 0;
    public static final int SWINM = 1;
    public static final int PROGRAM = 2;

    //面向父类编程-方法的返回类型写成父类
    public static Trainer getInstance(int type){
    Trainner t = null;
    switch(type){
    case ACCOUNT:
    t = new AccountTrainer();
    break;

    case SWINM:
    t = new SwinmmingTrainer();
    break;

    case PROGRAM:
    t = new ProgrammingTrainer();
    break;
    default:

    }
    return t;
    }
    }
    以上就是简单工厂设计模式!!!
    ------------------------------------------------------------------------------
    static:静态的

    属性:静态属性,它是类拥有的,是所有的对象共享的
    语法:
    普通变量前面加上一个static

    static int id;

    注意:static是不能够来修饰局部变量的

    public void method(){
    int id = 10;

    static int id = 20;//error

    }
    静态属性初始化的时机:
    JVM加载类的时候,就会优先对静态属性分配空间并且进行初始化工作
    非静态属性,是在每次创建对象的时候才会进行空间分配以及初始化工作!

    普通域

    int id = 10;

    static id = 100;

    static应用之:可以生成自增的整数型id

    方法:
    static修饰的方法叫做静态方法

    静态方法的调用:
    1.静态方法中可以直接调用静态方法,但是不能够直接调用非静态方法
    如果非要调用非静态方法,则需要先创建对象

    2.静态方法的调用可以直接通过类名.方法名

    为什么main是定义成静态的?
    1.因为main是主线程,程序的主入口,由JVM来调用的
    根据JVM规范,要将main设置成静态的

    一般工具类当中的方法要定义成static,方便调用
    java.util.*
    java.lang.Math


    为什么我们不将所有的资源都定义成静态的呢?
    因为静态资源在类加载的时候就会被加载进内存,如果静态资源过多
    肯定会占用大量的内存空间,而这部分的资源并不一定都是经常用到的!

    静态导入:import static xxx.xxx.xxx;

    可以直接使用静态导入的类中的静态常量
    而不需要使用类名.常量名

    静态内部类[以后再说]


    代码块(block)

    普通代码块:
    {
    //每次创建对象的时候都会优先执行
    //但是注意一般在程序当中不会出现普通代码块
    //它一般都会被移植到构造块中

    }

    静态代码块:

    static{
    //是类加载的时候就会立即优先加载

    }

    类进JVM活动过程:
    1.JVM加载需要执行的类
    2.给所有的静态成员分配空间
    3.对静态成员进行初始化工作
    4.调用静态代码块
    5.如果创建了对像
    5-1 给所有的非静态成员分配空间
    5-2 初始化所有的非静态成员
    5-3 调用普通代码块
    5-4 调用构造方法
    -----------------------------------------------------------------------
    static应用之单例模式(Simple Pattern)
    作用:在应用程序当中,保证某个类的具体实例有且只有1个

    三个步骤:
    1.私有化构造-不让外界new
    2.提供这个类的本身的唯一实例作为该类的静态属性存在着
    3.提供一个公开的静态的方法来返回这个类的唯一实例

    单例模式:
    1.饿汉模式
    2.懒汉模式


    public class Singleton{
    //1.私有化构造
    private Singleton(){
    System.out.println("构造方法被调用!");
    }
    //2.提供这个类的本身的唯一实例作为该类的静态属性存在着
    private static Singleton instance= new Singleton();

    //3.提供一个公开的静态的方法来返回这个类的唯一实例
    public staitc Singleton getInstance(){
    return instance;
    }
    }

    Test.java

    Singleton s1 = Singleton.getInstance();
    Singleton s2 = Singleton.getInstance();
    s1==s2;//true
    -----------------------------------------------------------------------------
    Final关键字:
    1.final修饰的方法不能够被重写

    2.final修饰的类不能够被其他类继承
    我们可以用final关键字来阻断继承

    3.final修饰的局部变量叫做常量

    1.命名由大写字母以及_组成

    2.可以先声明一个常量,然后再对该常量进行赋值
    但是一旦赋值成功将不能够再改变!

    3.在声明的时候同时进行赋值

    4.一旦赋值成功,将不能够改变

    4.修饰属性:final修饰的属性叫做常量属性
    一般会结合static public一起使用

    称之为:公开的静态的常量属性

    1.声明的时候要同时进行赋值

    2.不可先声明,然后再进行赋值,除非使用静态代码块进行赋值

    3.命名也是同上

    4.一旦赋值成功将不再改变!!!
    ==================================================================================================

  • 相关阅读:
    RTMP、RTSP/OVIF、GB/T28181视频流媒体服务器的视频传输方式有哪几种?
    RTSP/ONVIF互联网直播服务器录像回看接口调用时查询到超出指定时间段录像文件
    RTSP/onvif网络摄像头直播时网页流媒体视频服务器可以查看所有在线视频流吗?
    安防网络摄像头互联网直播录像设置永久储存却只能播放一半问题解决
    海康大华网络摄像头视频直播流媒体服务器视频广场显示暂无快照的问题解决
    国标GB28181摄像头直播视频流媒体服务器获取视频流失败问题分析
    安防网络摄像头互联网直播流媒体服务器EasyNVR云终端断电重启后无法登录问题解决
    视频管理平台连接EasyNVR在公网IP下通过域名访问报错“请求服务不存在或停止”问题的解决
    安防/互联网直播点播系统在特种车用车安全行车辅助中的应用
    目前视频监控领域高清化的关键技术有哪些?
  • 原文地址:https://www.cnblogs.com/tarek/p/5415794.html
Copyright © 2020-2023  润新知