• 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.一旦赋值成功将不再改变!!!
    ==================================================================================================

  • 相关阅读:
    Elasticsearch学习之基本核心概念
    Kudu,支持快速分析的新型Hadoop存储系统
    npm命令
    git相关命令
    Linux下Nodejs安装(完整详细)转
    数据库删除discuz 部分数据操作
    用tcping检查网站开放的端口
    Mybatis各种模糊查询
    抱歉,当前存在网络问题或服务器繁忙错误代码:20003问题解决方法
    win7下python2.7安装 pip,setuptools的正确方法
  • 原文地址:https://www.cnblogs.com/tarek/p/5415794.html
Copyright © 2020-2023  润新知