zoukankan      html  css  js  c++  java
  • 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.一旦赋值成功将不再改变!!!
    ==================================================================================================

  • 相关阅读:
    【数据结构】线性表&&顺序表详解和代码实例
    【智能算法】超详细的遗传算法(Genetic Algorithm)解析和TSP求解代码详解
    【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)
    【智能算法】迭代局部搜索(Iterated Local Search, ILS)详解
    10. js时间格式转换
    2. 解决svn working copy locked问题
    1. easyui tree 初始化的两种方式
    10. js截取最后一个斜杠后面的字符串
    2. apache整合tomcat部署集群
    1. apache如何启动
  • 原文地址:https://www.cnblogs.com/tarek/p/5415794.html
Copyright © 2011-2022 走看看