Java面向对象进阶之static

news/2025/1/15 21:52:11/

目录

  • static静态关键字
    • static:修饰成员变量,内存机制
      • static是什么、修饰成员变量的方法
        • 总结
      • static修饰成员变量的内存原理
    • static:修饰成员方法、内存机制
      • static修饰成员方法的基本用法
        • 总结
      • static修饰成员方法的内存原理
    • static的注意事项
  • static应用知识:工具类
    • 总结
    • 练习
  • static应用知识:代码块
    • 代码块的分类、作用
    • 静态代码块的应用案例
      • 总结
  • static应用知识:单例设计模式
    • 设计模式、单例模式介绍、恶汉单例模式
      • 总结
    • 懒汉单例模式
      • 总结

static静态关键字

static:修饰成员变量,内存机制

static是什么、修饰成员变量的方法

在这里插入图片描述
在这里插入图片描述

package com.zixin.d1_static;public class User {public static int onlineNumber = 161;private String name;private int age;public static void main(String[] args) {System.out.println(User.onlineNumber);User u =new User();u.name="张三";u.age=21;System.out.println(u.name);System.out.println(u.age);u.onlineNumber++;System.out.println(u.onlineNumber);User u2 =new User();u2.name="张三2";u2.age=22;System.out.println(u2.name);System.out.println(u2.age);u.onlineNumber++;System.out.println(u.onlineNumber);System.out.println(User.onlineNumber);System.out.println(onlineNumber);}
}

总结

在这里插入图片描述

static修饰成员变量的内存原理

在这里插入图片描述

static:修饰成员方法、内存机制

static修饰成员方法的基本用法

在这里插入图片描述

package com.zixin.d1_static;public class Student {private String name;public static int getMax(int age1,int age2){return age1 > age2 ? age1 :age2;}public void study(){System.out.println(name +"在好好学习,天天向上");}public static void main(String[] args) {System.out.println(Student.getMax(10,3));System.out.println(getMax(10,32));Student s = new Student();s.name = "猪八戒";s.study();System.out.println(s.getMax(13,14));}
}

在这里插入图片描述

总结

在这里插入图片描述

static修饰成员方法的内存原理

在这里插入图片描述

static的注意事项

在这里插入图片描述

package com.zixin.d1_static;public class Test3 {public static int onlineNumber = 10;public static void test2(){System.out.println("=====test2=====");}private String name;public void run(){System.out.println(name+"跑得快~");}public void go(){System.out.println(Test3.onlineNumber);System.out.println(onlineNumber);test2();System.out.println(name);run();}public static void test(){System.out.println(Test3.onlineNumber);System.out.println(onlineNumber);test2();
//        System.out.println(name);
//        run();}public static void main(String[] args) {}
}

static应用知识:工具类

在这里插入图片描述

package com.zixin.d2_static_util;import java.util.Random;public class zixinUtil {public static String createVerifyCode(int n){String code = "";String data = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";Random r =new Random();for(int i =0;i<n;i++){int index = r.nextInt(data.length());code +=data.charAt(index);}return code;}
}
package com.zixin.d2_static_util;import java.util.Random;public class Login {public static void main(String[] args) {System.out.println(zixinUtil.createVerifyCode(6));}
}

在这里插入图片描述

package com.zixin.d2_static_util;import java.util.Random;public class zixinUtil {private zixinUtil(){}public static String createVerifyCode(int n){String code = "";String data = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";Random r =new Random();for(int i =0;i<n;i++){int index = r.nextInt(data.length());code +=data.charAt(index);}return code;}
}

总结

1.工具类是什么,有什么好处?

  • 内部都是一些静态方法,每个方法完成一个功能
  • 一次编写,处处可用,提高代码的重用性。
    2.工具类有什么要求?
  • 建议工具类的构造器私有化处理。
  • 工具类不需要创建对象。

练习

在这里插入图片描述

package com.zixin.d2_static_util;public class ArrayUtil {private ArrayUtil(){}public static String toString(int[] arr){if(arr == null){return null;}String result = "[";for (int i = 0; i < arr.length; i++) {result += (i == arr.length-1 ? arr[i] : arr[i] +",");}result +="]";return result;}
}
package com.zixin.d2_static_util;public class TestDemo2 {public static void main(String[] args) {int [] arr = null;int [] arr1 = {};int [] arr2 ={12,23,44,88};System.out.println(ArrayUtil.toString(arr));System.out.println(ArrayUtil.toString(arr1));System.out.println(ArrayUtil.toString(arr2));}
}

static应用知识:代码块

代码块的分类、作用

在这里插入图片描述

package com.zixin.d3_static_code;public class StaticDemo1 {public static String schoolName;static {System.out.println("------静态代码块被触发执行了------");schoolName = "黑马";}public static void main(String[] args) {System.out.println("------main方法执行------");System.out.println(schoolName);}
}
package com.zixin.d3_static_code;public class StaticDemo2 {private String name;public StaticDemo2(){System.out.println("===无参构造器被触发执行===");}{name = "张三";System.out.println("===实例代码块被触发执行===");}public static void main(String[] args) {StaticDemo2 s1 = new StaticDemo2();System.out.println(s1.name);StaticDemo2 s2 = new StaticDemo2();System.out.println(s2.name);}
}

静态代码块的应用案例

在这里插入图片描述

package com.zixin.d3_static_code;import java.util.ArrayList;public class StatucTest3 {public static ArrayList<String> cards = new ArrayList<>();static {String[] sizes ={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};String [] colors ={"♥","♠","♦","♣"};for (int i = 0; i < sizes.length; i++) {for (int j = 0; j < colors.length; j++) {String card = sizes[i]+colors[j];cards.add(card);}}cards.add("小🃏");cards.add("大🃏");}public static void main(String[] args) {System.out.println(cards);}
}

总结

1.静态代码块的作用是什么?

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

static应用知识:单例设计模式

设计模式、单例模式介绍、恶汉单例模式

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

package com.zixin.singleinstance;public class SingleInstance {public static SingleInstance instance = new SingleInstance();private SingleInstance(){}
}
package com.zixin.singleinstance;import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;public class Test1 {public static void main(String[] args) {SingleInstance s1 = SingleInstance.instance;SingleInstance s2 = SingleInstance.instance;System.out.println(s1==s2);}}

总结

1.饿汉单例的实现步骤?
定义一个类,把构造器私有。
定义一个静态变量存储一个对象

懒汉单例模式

在这里插入图片描述

package com.zixin.singleinstance;public class SingleInstance2 {private static SingleInstance2 instance;public static SingleInstance2 getInstance(){if(instance==null){instance = new SingleInstance2();}return instance;}private SingleInstance2(){}
}
package com.zixin.singleinstance;public class Test2 {public static void main(String[] args) {SingleInstance2 s1 = SingleInstance2.getInstance();SingleInstance2 s2 = SingleInstance2.getInstance();System.out.println(s1==s2);}
}

总结

1.懒汉单例的实现步骤?

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

http://www.ppmy.cn/news/11132.html

相关文章

后端人眼中的Vue(四)

七、Vue生命周期 ​ Vue的生命周期指的是Vue实例在页面中创建到销毁整个过程。Vue提供了在各个生命周期的钩子&#xff0c;钩子也叫Vue生命周期函数。这些生命周期函数是伴随着Vue实例创建、销毁的过程中自动触发的&#xff08;不需要人为手动触发&#xff09;。Vue实例生命周期…

ffmpeg图片转视频

视频转图片 ffmpeg -i test.mp4 -r 25 path_to_image/%05d.jpg有序图片转视频 ffmpeg -f image2 -i dirname/%05d.jpg -vcodec libx264 -r 25 -b:v 5969k test.mp4-f image2&#xff1a;图像转视频 -i dirname/%05d.jpg&#xff1a;输入 -vcodec libx264&#xff1a;采用264编…

MySQL高级【锁】

1&#xff1a;锁的概述锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、 RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有 效性是所有数据库必…

C#文件操作

首先需要创建一个文件对话框对象&#xff1a;OpenFileDialog ofd new OpenFileDialog();获取该对话框的结果&#xff1a;DialogResult result ofd.ShowDialog();如果用户单击确定则返回 DialogResult.OK 否则返回DialogResult.Cancel。获取该文件路径&#xff08;包括文件名) …

16、Java并发 Java ThreadLocalRandom

随机数生成是一个非常常见的操作&#xff0c;而且 Java 也提供了 java.util.Random 类用于生成随机数&#xff0c;而且呢&#xff0c;这个类也是线程安全的&#xff0c;就是有一点不好&#xff0c;在多线程下&#xff0c;它的性能不佳。 为什么多线程下&#xff0c;Random 的性…

嵌入式 LINUX 驱动开发 day02 字符设备驱动 字符设备驱动 虚拟串口, 一个驱动支持多个设备

1. 驱动开发 字符设备驱动 代码&#xff1a; vser.c #include <linux/init.h> #include <linux/kernel.h> #include <linux/module.h>#include <linux/fs.h> /***** 设备相关信息 ******/ static unsigned int VSER_MAJOR 256; //主设备号…

Redis哨兵模式搭建

以下配置机器部署ip为 a、b、c&#xff0c;其中a为master节点 需提前创建 /app/user/oms/redis/data 目录 1.1上传 redis-5.0.5.zip 到对应目录&#xff0c;解压 unzip redis-5.0.5.zip # 生成 redis-5.0.5 目录 1.2 修改配置文件 maxclients 10000 #20000 &#xff0…

MATLAB-样条插值运算

MATLAB中不仅提供了一维插值、二维插值和三维插值方法&#xff0c;还提供了样条插值的方法。其主要思想是:假定有一组已知的数据点&#xff0c;希望找到该组数据的拟合多项式。在多项式的拟合过程中&#xff0c;对于每组相邻的样本数据点&#xff0c;存在一条曲线&#xff0c;该…