java的面向对象编程(oop)——static概述及初始单例设计模式

前言:

过了入门阶段,开始学习进阶语法了。每天进步一点点,打好基础,daydayup!

什么是面向对象编程(oop),可以看这篇

java的面向对象编程(oop)概述及案例

static概述

static的意思为静态,用于修饰成员变量及成员方法。

成员变量根据有无static可以分为两种------类变量及实例变量

复制代码
public class demo {

            static  String name;//类变量
                    int age ;//实例变量


}
1,类变量

类变量属于类,与类一起加载一次,在内存中只有一份,可以被类和类的所有对象共享。

使用方法:

1,加载类,使用变量引用

复制代码
类名 变量名 = new 类名();
变量名.类变量=赋值;

例:根据上述demo类,编写如下

复制代码
  demo sc = new demo();
        sc.name = "lala";
        System.out.println(sc.name);

2,通过类名直接引用类变量

复制代码
类名.类变量=赋值;

例:编写如下

复制代码
  demo.name= "qingwa";
        System.out.println(demo.name);
使用注意:

由于只与类加载一次,所以当赋值后,新值会替换原来的值

2,实例变量

实例对象属于对象,每个对象都有一份,只能用对象访问

使用方法:

加载类,使用变量引用

复制代码
类名 变量名 = new 类名();
变量名.类变量=赋值;

例:如下

复制代码
  demo sc = new demo();
         sc.age = 17;
使用注意:

每次生成类就会加载一次,所以每次赋值都会生成新的数字

方法根据有无static可以分为类方法及实例方法

复制代码
public class demo {
    public static void student(){//类方法

        System.out.println("hhhhhh");
    }


    public void student1(){//实例方法

        System.out.println("aaaaaaa");
    }
}
1,类方法:

有static修饰的成员方法,属于类方法

使用方法:

1,通过类名直接引用

复制代码
类名.方法名

例:如下

复制代码
 demo.student();

2,通过加载类再使用变量引用

复制代码
类名 变量名 = new 类名();
变量名.方法名;

例:如下

复制代码
 demo sc = new demo();
        sc.student();

例:两种方式都能输出方法

2,实例方法:

无static使用的成员方法,属于对象

使用方法:

通过加载类再使用变量引用

复制代码
类名 变量名 = new 类名();
变量名.方法名;

例:如下

复制代码
        demo sd = new demo();
        sd.student1();

注:main方法也是一种类方法

static使用场景

static方法可用来做工具类

什么是工具类

工具类是一种类方法,每一个类方法都是一种功能;提高了代码的复用性,提高了开发效率

为什么用类方法创建工具类,而不是实例方法

实例方法需要创建对象来调用,会浪费内存

工具类定义时有什么要求

由于工作类不需要创建对象,所以需要把构造器私有化

代码块中static的作用

代码块分为两种:静态代码块及实例代码块

1,静态代码块

格式:

复制代码
static{}

特点:

类加载时会自动执行,由于类只加载一次,静态代码块也只执行一次

作用:

完成类的初始化

2,实体类代码块

格式:

复制代码
{}

特点:

每次创建对象时,执行实例代码块,并在构造器前执行

作用:

和构造器一样,用来完成对象初始化的

设计模式

什么是设计模式

问题的最优解解决方案称为设计模式,设计模式有很多种,先了解单例设计模式。

设计模式之一单例设计模式

把类的构造器私有;定义一个类变量储存类 的一个对象:提供一个类方法返回对象。其特点为:在获取类的对象时,对象已经创建好了。

注:频繁使用对象时用饿汉式单例;不频繁使用对象用懒汉式单例(可以节省内存)

例1:如下(饿汉式单例:先创建出了对象)

复制代码
public class car {
   private static car a = new car();
//定义一个类,储存一个对象
    private car(){
//私有化构造器
    }
    public static car use(){
        return a;//返回对象
    }
}

例2:如下 (懒汉式单例:使用时在创建对象)

复制代码
public class moive {
    private static moive a;//创建对象
    private moive(){
        
    }//私有化构造器
    private static moive use(){
        if (a==null){
            a=new moive();//当使用时再创建对象
        }
        return a;//返回值
    }
    
}

整理结束,撒花!!!!

相关推荐
郝亚军6 分钟前
manifest 中 `sha256` 与 `signValue` 的作用
java·开发语言·数据结构
譕痕21 分钟前
stripe 实例
java·开发语言·stripe·checksession
墨子夕29 分钟前
设计模式——Java × Python 双语言精讲 · 23 个经典模式 + 现代演进(前言篇)
java·开发语言·设计模式
骇客野人34 分钟前
Linux 全套实操方案(含目录详解、文件传输、日志、文件规范、环境变量、Java 应用部署运维)
java·linux·运维
_菜鸟果果35 分钟前
高德地图 JS API 2.0 在国产 Linux/ARM 电脑上渲染失败 的排查与解决
linux·开发语言·javascript
.Bryce.1 小时前
MCP+A2A+ANP,Agent通信协议的完整知识地图
java·人工智能·后端·agent·通信协议
SL_staff1 小时前
规则引擎选型陷阱:为什么QPS不是JVS-Rules对比Drools的核心指标
java·开源·全栈
LMT流氓兔1 小时前
第五单元——第4课:给工具参数加校验
java·前端·算法·ai·langchain
昂好的day1 小时前
VisionMaster(VM) 标定工具详解(上):为什么必须标定 + 九点标定手眼标定
开发语言·数码相机·c#
eleven_4u1 小时前
RocketMQ相关问题
java·运维·中间件