• 【幻化万千戏红尘】qianfengDay07-java基础学习:static、设计模式之单例模式


    课程回顾:

    面向对象:是一种思想

    类:方法和属性,抽象的、模板、概念上的定义

    对象:类的实例化,实实在在的具体的实例

    this

    1、代表本类对象

    2、可以调用构造方法

    属性的封装

    1、私有的属性

    2、并且提供公有的getset方法

    今日内容:

    方法的参数传递

    1、基本数据类型:传递的是数据的本身

    2、引用数据类型:传递的是对象的地址

    总而言之:参数传递的是栈内存中记录的内容

    只是基本数据类型栈内存记录的数据的本身

    而引用类型栈内存中记录的是对象的地址

    构造代码块(空代码块)

    格式:{代码块}

    构造代码块的执行会根据创建对象的时候执行

    而且先于构造方法执行

    static:关键字 静态

    1、修饰属性:静态属性

    可以通过类名.属性名直接使用

    注意:静态属性为类属性,所有对象共享

    类被加载的时候,被初始化

    2、修饰方法:静态方法

    可以通过类名.方法名直接调用

    注意:可以直接使用静态属性,不能直接使用非静态属性

    在静态方法中不能直接使用非静态的属性和方法

    但是在非静态方法中,可以使用静态的属性和方法

    3、修饰代码块:静态代码块

    常常被用来初始化静态属性

    格式:static{代码块}

    类被加载的时候执行,只执行一次

    对象第一次创建时:

    先执行静态代码块

    再执行构造代码块

    最后执行构造方法

    4、修饰内部类

    类中可以出现的:

    1、属性[0,n]

    2、静态属性[0,n]

    3、方法[0,n]

    4、静态方法[0,n]

    5、构造方法[0,n]

    6、构造代码块[0,n]

    7、静态代码块[0,n]

    8、成员内部类[0,n]

    9、静态内部类[0,n]

    10、内部接口[0,n]

    package com.qianfeng.demo2;

    public class TestMain01 {

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    Animal animal=new Animal();

    animal.price=10;

    animal.type="";

    //静态属性,可以通过类名.属性名直接使用

    Animal.type="";

    System.out.println("类型:"+animal.type+",价格:"+animal.price);

    Animal animal2=new Animal();

    System.out.println("类型:"+animal2.type+",价格:"+animal2.price);

    }

    }

    package com.qianfeng.demo2;

    public class Animal {

    //1static修饰属性,类属性,所有对象共享

    public static String type;//类型

    public int price;//价格

    //构造代码块

    {

    System.out.println("我是构造代码块");

    }

    public static void show() {

    type="";//静态属性可以直接被使用在静态方法中

    // new Animal().price=12;

    }

    public void test() {

    type="";//在非静态方法中,我们可以直接使用静态属性

    show();

    }

    }

    思考:如何保证一个类的唯一实例

    设计模式之单例模式:

    保证类的唯一实例

    规则:

    1、私有的构造方法

    2、私有的静态本类对象

    3、公有的静态方法

    单例模式的实现方式:

    1、懒汉式:不安全(线程不同步)

    在声明本类的对象的时候没有实例化

    2、饿汉式:安全

    在声明本类对象的时候就完成实例化

    练习:请自己动手体会static关键字的用法

    包:就是存放java源文件的文件夹

    包的作用:

    1、避免类名冲突

    2、隐藏类

    3、通过合适的包名表达不同的意思

    包名要求不能有大写,多级关系使用.连接

    包名中的.其实就是相当于一层目录

    package:声明包,必须出现在源文件的第一行

    格式:package 包名;

    说明对应的类属于当前声明的包

    使用命令进行编译带包的源文件:

    编译:javac -d . 文件名.java

    执行:java 包名.类名

    import:导入包,必须出现在类声明的上方

    JDK5.0之后,支持静态导包

    格式:import static 包名.类名.方法名/属性名

    只能导入静态方法或静态属性

    由于java.lang包,日常开发使用最为频繁,所有官方默认导入该包

    思考:一个类怎么拥有另一类的信息?

    1、聚合关系

    就是将另一个类的对象作为本类的一个属性

    2、继承

    父类:超类---被继承的类

    子类:基类、派生类---实现继承的类

    子类可以拥有父类的部分(全部)属性和方法

    构造方法不能被继承

    java只能单继承,也就是说:一个类只能继承一个类

    但是java允许继承的传递性

    extends:实现继承关系

    格式:[修饰符] class 子类名称 extends 父类名称

    {

    属性

    方法

    }

    一个父类可以有多个子类,但是一个子类只能拥有一个父类

    练习:自己创建有继承关系的类并体会继承的作用

    package com.qianfeng.demo5;

    public class Father {

    public String name;//名字

    public int age;//年龄

    private int money;

    public void showInfo() {

    System.out.println("名字:"+name+",今年:"+age+"");

    }

    }

    package com.qianfeng.demo5;

    //继承Father

    public class Son extends Father{

    public String like;//爱好

    }

    package com.qianfeng.demo5;

    public class TestMain01 {

    public static void main(String[] args) {

    //创建子类对象

    Son son=new Son();

    son.name="儿子";

    son.age=12;

    son.like="LOL";

    //son.money=120;//子类只能拥有父类非私有的属性和方法

    son.showInfo();

    //创建父类对象

    Father father=new Father();

    father.name="";

    father.age=32;

    //father.like="学习";//父类不能拥有子类新增的属性或方法

    //

    Grill grill=new Grill();

    grill.age=18;

    grill.showInfo();

    }

    }

    父类中:

    静态代码块

    构造代码块

    构造方法

    子类中:

    静态代码块

    构造代码块

    构造方法

    在第一次创建子类对象的时候,执行过程:

    父类静态代码块

    子类静态代码块

    父类构造代码块

    父类构造方法

    子类构造代码块

    子类构造方法

    类加载的条件:

    1、第一次调用静态属性

    2、第一次调用静态方法

    3、第一次创建类的对象

    super:关键字 应用在子类中

    用法:

    1、调用父类中的属性或方法

    2、调用父类中的构造方法

    要求:必须在子类的构造方法中,而且只能是第一行

    super不能出现在static方法中

    thissuper的区别?

    this:

    用在本类中

    可以指代本类对象

    可以调用属性和方法

    可以调用自己的构造方法

    super:

    用在子类中

    调用父类中的属性和方法

    可以调用父类的构造方法

    thissuper都不能出现在static方法中

    明天内容:

    访问修饰符

    重写

    Object

    抽象类

    递归

    设计模式之单例模式:

    懒汉式、饿汉式

    思考:如何保证一个类的唯一实例

    设计模式之单例模式:

    保证类的唯一实例

    规则:

    1、私有的构造方法

    2、私有的静态本类对象

    3、公有的静态方法

    单例模式的实现方式:

    1、懒汉式:不安全(线程不同步)

    在声明本类的对象的时候没有实例化

    2、饿汉式:安全

    在声明本类对象的时候就完成实例化

    包:

    cmd中如何编译运行带带包的源文件

    如何导进第三方的包:看下面;

    如何把自己的包导出来,,原来是这样:

  • 相关阅读:
    前端PHP入门-001-为什么学习PHP?
    PowerDesigner逆向生成
    Tomcat7项目迁移到Tomcat8中文乱码问题
    通过反射获取T.class代码片段
    pdf预览-js版本
    一般处理程序下载
    .net预览功能
    资源整理
    二、编译安装LAMP之httpd-2.4.4
    HTTP之缓存
  • 原文地址:https://www.cnblogs.com/weigongcheng/p/5688573.html
Copyright © 2020-2023  润新知