一、什么是static修饰符

1.static是静态意思,可以修饰成员变量和成员方法
2.static修饰成员变量表示该成员变量在内存中只存储一份,可以被共享访问,修改。

二、成员变量,成员方法的分类和访问分别是什么样的形式?

1.静态成员变量(有static修饰符修饰,属于类,只加载一次,可以共享访问)
访问格式:①类名.静态成员变量
                  ②对象.静态成员变量(不推荐写法)

2.静态成员方法(有static修饰,属于类和对象共享)
访问格式:①类名.静态成员方法
                  ②对象.静态成员方法(不推荐)

public class User{private static String name;//定义静态成员变量public static int getMax(int age1,int age2){return age1 > age2 ? age1:age2;}public static void main(String[] args) {//1.类名.静态成员变量System.out.println(User.name);//2.调用静态方法访问静态变量System.out.println(User.getMax(19,11));//通过类名.方法名访问System.out.println(getMax(12,20));//同一个类中 可以不写类名直接访问}
}

3.实例成员变量(无static修饰符修饰,属于对象)
访问格式:对象名.实例成员变量
4.实例成员方法(无static修饰符修饰,属于对象)
访问格式:对象名.实例成员方法

  Student s = new Student();s.name = "孙悟空";//3.对象.实例变量System.out.println(s.name);/*实例方法 属于对象 只能用对象进行访问*/public void study(){System.out.println(name+"正在打妖怪");}//4.对象.实例方法进行访问s.study();//对象名.实例方法//5、对象.静态方法(不推荐写法)System.out.println(s.getMax(13,15));

三、两种成员变量,成员方法各自在什么情况下定义?

1、静态成员变量:表示在线人数等需要被共享的信息
2、静态成员方法:表示对象自己行为的,且方法中需要直接访问实例成员,则该方法必须申明成实例方法

3、实例成员变量:属于每个对象,且每个对象的该信息不同
4、如果该方法是以一个通用功能为目的,或者需要方便访问,则可以申明成静态方法

四、static访问修饰注意事项

 /*静态成员 包括静态成员方法和静态成员变量*/public static int onlineNumber = 3;//静态成员变量public static void test2(){System.out.println("我是静态方法test2");}//静态成员方法/*实例成员 包括实例成员方法和实例成员变量*/private String name; //实例成员变量public void run(){  //实例成员方法System.out.println(name+"跑的很快");}
1.静态方法只能访问静态的成员,不可以直接访问实例成员
 //1.静态方法只能访问静态成员变量 不能 ”直接“ 访问实例成员(实例成员方法和实例成员变量)public static void test(){System.out.println(Test3.onlineNumber);//通过类名.方法名访问System.out.println(onlineNumber);//同一个类中 可以不写类名直接访问test2();//静态方法也可以访问另一个静态方法//        Test3 t = new Test3();//创建对象可以访问
//        System.out.println(name); //不能 ”直接“ 访问,可以间接访问 对象名.静态成员变量 但是不推荐
//        run();//同上 可以间接访问 对象名.静态成员方法}
2.实例方法可以访问静态的成员,也可以访问实例成员
//2.实例方法可以访问静态成员,也可以访问实体成员public void go(){System.out.println(Test3.onlineNumber);//访问的静态成员变量System.out.println(onlineNumber);//访问的静态成员变量test2();//访问的静态成员方法System.out.println(name);//访问的实体成员变量run();//访问的实体成员方法}
3.静态方法中不能出现this关键字
 //3.静态方法中不可以存在this关键字public static void to(){//        System.out.println(this);//this只能戴白当前对象 可以出现在实例方法中}

五、static工具类

1、工具类是什么?有什么好处?

static工具类概念: 内部都是一些静态方法,每个方法完成一个功能
好处:一次编写,处处使用,提高了代码复用性

2、工具类有什么要求?

由于工具类不需要创建对象 ,故建议把其构造器私有化 显得专业严谨

六、static代码块

1、代码块概述

1.代码块是类的五大成分之一(成员变量,构造器,方法,代码块,内部类,定义在类中且在方法外,与方法平级
2.在Java类下,用{ }括起来的代码被称为代码块

2、代码块分类

1.静态代码块
格式:static{ }
特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发,只执行一次
使用场景:在类加载的时候做一些静态数据的初始化操作,以便后续使用

public class StaticDemo1 {public static String schoolName;public static ArrayList<String> list = new ArrayList<>();/*静态代码块:有static修饰,属于类 与类一起优先加载一次,自动触发执行作用:可以用于初始化静态资源*/static {System.out.println("静态代码块被执行了");schoolName = "黑马";list.add("1");list.add("2");}public static void main(String[] args) {//目标:理解静态代码块System.out.println("main方法被执行调用了");System.out.println(schoolName);System.out.println(list);}
}

2.构造代码块(使用较少)
格式:{ }
特点:每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并且在构造器执行前执行
使用场景:初始化实例资源

public class StaticDemo2 {private String name;public StaticDemo2(){System.out.println("无参构造器被触发了");}
/*实例代码块(构造器代码块):无static修饰 不属于类 每次构建对象时都会触发一次作用:初始化实例资源*/{name = "张三";System.out.println("实例化代码块被触发了");}public static void main(String[] args) {//目标:理解实例化代码块(构造器代码块)System.out.println("main方法被触发了");StaticDemo2 s = new StaticDemo2();System.out.println(s.name);StaticDemo2 s1 = new StaticDemo2();System.out.println(s1.name);}}
3、静态代码块作用?

如果要在启动系统时对静态资源进行初始化,则建议使用静态代码块完成数据的初始化操作

七、单例模式

单例模式概念:可以保证系统中,应用该模式的这个类永远只有一个实例,即一个类永远只能创建一个对象
单例模式的实现方式:饿汉单例模式,懒汉单例模式

饿汉单例实现步骤:

①定义一个类,把构造器私有化
②定义一个静态变量存储一个对象

/*使用饿汉单例实现单例类*/
public class SingleInstance {/*2.饿汉单例是在获取对象前 对象已经提前准备好了一个这个对象只能是一个 所以定义静态成员变量*/public static SingleInstance instance = new SingleInstance();/*1.必须把构造器私有化 对外不能随意构建对象*/private SingleInstance(){}public static void main(String[] args) {SingleInstance s1 = SingleInstance.instance;SingleInstance s2 = SingleInstance.instance;System.out.println(s1 == s2);}
}
懒汉单例实现步骤:

①定义一个类,把构造器私有化
②定义一个静态变量存储一个对象
③提供一个返回单例对象的方法

/*2.定义一个静态成员变量负责存储一个对象只加载一次,只有一份注意:最好私有化,避免给别人挖坑这样别人就不能用 类名.静态成员变量 进行访问,以免访问到的数据为null*/private static SingleInstance2 instance;/*3.提供一个方法 返回一个单例对象*/public static SingleInstance2 getInstance(){if (instance == null){//如果是第一次来拿对象 此时需要创建对象instance = new SingleInstance2();}return instance;}public static void main(String[] args) {SingleInstance2 s1 = SingleInstance2.getInstance();SingleInstance2 s2 = SingleInstance2.getInstance();System.out.println(s1);System.out.println(s2);//s1和s2的地址是一样的}/*1.私有化其构造器*/private SingleInstance2(){}

什么是static修饰符?相关推荐

  1. java static修饰方法_浅析Java中static修饰符

    1.概述 static关键字的中文意思是静态的,该修饰符可以修饰字段.方法.内部类.使用该关键字修饰的内容,在面向对象中static修饰的内容是隶属于类,而不是直接隶属于对象的,所以static修饰的 ...

  2. c++ static修饰符浅析

    c++ static修饰符浅析 下面一段是引用自effective c++ 中的一句话: 所谓的static对象,其寿命是从构造出来到程序结束为止(以下文章不再赘诉).因此stack和heap-bas ...

  3. java(5)---static修饰符

    static修饰符 static修饰符的特点: 1):static修饰的成员(字段/方法),随着所在类的加载而加载. 当JVM把字节码加载进JVM的时候,static修饰的成员已经在内存中存在了. 2 ...

  4. java反编译工具gd gson,浅谈Android中static修饰符,及Gson转String实例

    肯定会很奇怪,为什么要把Gson和Static放一起去讲,因为在开发中,json这个东西是很常用的,不管是格式,还是数据的传递,还是我们与后台之间的交互,都离不开JSON,而今天,是在帮一个同行用ts ...

  5. static修饰符和final修饰符

    static修饰符,修饰方法我们就可以不建立对象之久通过方法名调用. static修饰符,修饰属性属性就成了公共数据,并且数据只有一个.就像一个粉笔,A对象用完了粉笔B对象在用这跟粉笔就是A用剩下的那 ...

  6. 10.0_[Java 封装]-抽象/封装/构造/重载/ static 修饰符

    ################################################## 目录 抽象编程 面向对象设计的过程 类和对象的关系 为什么使用面向对象 this 关键字 类的成员 ...

  7. 面向对象通识14(static修饰符)

    面向对象通识14(static修饰符) static并不是字面意义上"静态"的意思,而是类的意思-- 有static的成员是类成员 没有static的成员是实例成员 //在C语言中 ...

  8. Java中static修饰符的作用

    近日在做网络通信服务器和客户端的Java语言开发,碰到了获取客户端长连接Channel对象,利用唯一对象Client的获取方法getSingleClientInstance(),以为可以得到,但是显示 ...

  9. C++ static 修饰符

    C++ static 修饰符 概述 静态数据成员 引用静态数据成员 用类名访问数据成员 静态成员函数 综合案例 概述 static (静态) 修饰符是用来控制变量的存储方式和可见性的. 静态局部变量存 ...

最新文章

  1. PCL:最小特征值与特征向量为什么可以表示法向量??
  2. mysql5.6创建用户并授予指定数据库或表权限
  3. 移动WEB前端开发资源整合
  4. go goroutine主死从随
  5. 《程序员面试金典》输出单层节点
  6. 产品经理需要懂技术吗?懂到什么程度?
  7. “国家科学数据中心”联合专刊征稿
  8. 第十九节:终于,JavaScript也有了类(class)的概念
  9. 面向对象程序设计要考虑的7个原则
  10. 数据结构之查找算法:顺序查找
  11. 机器学习算法平台alink_机器学习-逻辑回归算法
  12. 2019年5月1日起,南京调整社保缴费比例
  13. 微服务中什么是熔断?什么是服务降级?
  14. 【解锁】Pandoc——Pandoc安装、使用、快速上手
  15. wps在线编辑梳理(此处整理了对接过后容易出错的地方)
  16. 开源项目 - 收藏集 - 掘金
  17. C语言字符串的组包解包
  18. 搜狗输入法自定义短语使用小技巧
  19. 使用Cajviewer打开pdf文档的一个发现
  20. 漫谈广告机制设计 | 广告与自然结果的价值评估与利益分配

热门文章

  1. 【浅析】冯诺依曼体系
  2. php传智视频,PHP视频教学之Mysql视频教学下载传智播客-韩忠康
  3. (学习日记)2023.04.24
  4. conan使用(二)--conan环境搭建
  5. 红帽中国研发中心揭幕 好戏还在后头
  6. sockaddr_in结构体的说明(成员:sin_family、sin_addr、sin_zero)
  7. 解决 Syntax Error: Error: PostCSS received undefined instead of CSS string
  8. 老年人计算机培训信息,铁四社区开展老年人计算机培训班
  9. 学校开展计算机培训活动,市计算机学校:培训大会促成长
  10. 游住在他乡,选择好住处