java中的static和单例模式

同一个类中,访问其类成员,可以省略类名不写

static:叫静态,可以修饰成员变量,成员方法。

成员变量按照有无static修饰,分为两种:


类变量:有static修饰,属于类;在计算机中只有一份,会被类的所有对象共享;

类名.类变量

实例变量(对象的变量):无static修饰,属于每个对象,每个对象都会一份;

实例变量只能通过对象访问

创建一个学生类:

public class student {static String name;//类变量int age;//实例变量(对象变量)
}

 进行操作:
 

public class test1 {public static void main(String[] args) {//1:类变量的用法//类名.类变量student.name="hhh";//对象名.类变量student s1=new student();s1.name="xxx";student s2=new student();s2.name="aaa";类变量在计算机中只有一份System.out.println(s1.name);//aaaSystem.out.println(student.name);//aaa}}

类变量的应用场景:
在开发中,如果某个数据只需要一份,且希望能够被共享,则该数据可以定义类变量记住。

成员方法:

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

实例方法:无static修饰的成员方法,属于对象。

类方法的使用场景:

用来做工具类。

工具类就是一些类方法,每个方法都是用来完成一个功能的。

这是我写了一个生成任意数验证码的工具类:
 

public class myutil {private  myutil() {}//别人不能创建对象public static String createCode(int n){String tmp="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWSYZ1234567890";String code="";Random ra=new Random();for (int i = 0; i < n; i++) {int index=ra.nextInt(tmp.length());code+=tmp.charAt(index);}return code;}
}

类方法不用生成对象占用内存。

static的注意事项:

1 类方法可以直接访问类成员(变量和方法),不可以直接访问实例成员;

2 实例方法可以直接访问类成员,也可以直接访问实例成员;

3 类方法中不可以出现this关键字,但是实例方法中可以出现this;

代码块:

静态代码块:

格式:static {}

特点:类加载会自动执行,由于类只会加载一次,所以静态代码块只会加载一次1;

作用:完成类的初始化,例如:对类变量的初始化赋值

使用:
定义了一个学生类:
 

public class student {public static int number=10;static//静态代码块{System.out.println("静态代码块执行");}
}

使用:
 

public class test {public static void main(String[] args) {System.out.println(student.number);/*静态代码块执行10*/System.out.println(student.number);//10;}
}

可以发现静态代码块只执行了一次

实例代码块:
格式:{}

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

作用:和构造器一样,都是用来完成对象的初始化的。例如:对实例对象进行初始化赋值

单例设计模式:

确保类只有以一个对象;

写法:

  1. 把类的构造器私有化
  2. 定义一个类变量记住类的一个对象
  3. 定义一个类方法,返回对象

创建一个类:

public class sin {
//1:私有化无参构造器private sin(){}
//2:定义一个类变量记住类的一个对象private static sin a=new sin();
//定义一个类方法,返回对象public static sin getsin(){return a;}
}

操作:
 

public class test {public static void main(String[] args) {//只能通过sin.getsin获取对象,且此对象是static静态的,只有一份,所以是单例模式//sin a=new sin()//error:'sin()' has private access//可见不能通过无参构造器创建对象sin a1 = sin.getsin();sin a2 = sin.getsin();System.out.println(a1);System.out.println(a2);//结果:/*com.he.static3.sin@2f4d3709com.he.static3.sin@2f4d3709*/}
}

上面这个单例设计模式叫饿汉式单例:返回对象时,对象已经创建好

懒汉式单例设计模式:
写法:

  1. 把类的构造器私有化
  2. 定义一个类变量,用于存储对象
  3. 提供一个类方法,保证返回的是同一个对象 
public class lan {private lan(){}
//2定义一个类变量,先不初始化,用于存储对象。private static lan b;
//3提供一个类方法,保证返回的是同一个对象 public static lan getlan(){if(b==null){b=new lan();}return b;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模型训练----加载自己的数据集,train.txt包含“路径,类别”

今天想训练一个restnet&#xff0c;之前我是会用文件夹的方式加载数据集&#xff0c;但是师兄给我的数据是用.txt文件划分的训练集和验证集&#xff0c;知道是要把路径和标签提取出来&#xff0c;搞了半天没搞成&#xff0c;后边找到咋搞了。 点击查看 纯真丁一郎博客点击访问…

产品经理的6个关键职责

1. 前言 本文深入探讨了产品经理的六个关键职责,全面解析了产品经理在产品开发与市场运营中的核心作用。首先,市场调研是产品经理的基础工作,通过对市场趋势、用户需求及竞争态势的深入研究,为产品决策提供有力支持。其次,产品定义及设计是产品经理的核心能力,他们需精准…

蓝桥杯:Python基础学习一

目录 一、遍历列表 1.使用for 循环和 enumerate()函数实现 2.案例代码 二、对列表进行统计和计算 1.统计数值列表的元素和 2.案例代码 三、对列表进行排序 1.使用列表对象的sort()方法 2.使用内置的 sorted()函数实现 四、列表推导式 1.从列表中选择符合条件的元素组…

小程序上线操作流程

目录 1.客户进入小程序后台,依次进入:用户身份->管理员->修改。 2.填写原来管理员的身份证号码和使用绑定了原管理员本人银行卡的微信,扫描二维码。 4.设置服务器配置信息 5.打开”微信web开发者工具” ,扫码登录。调试类型选择”本地小程序项目” 6

Matlab|计及电池储能寿命损耗的微电网经济调度

目录 1 主要内容 储能寿命模型 负荷需求响应 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《考虑寿命损耗的微网电池储能容量优化配置》模型&#xff0c;以购售电成本、燃料成本和储能寿命损耗成本三者之和为目标函数&#xff0c;创新考虑储能寿命损耗约…

【Java跳槽面试必备】2024年最新八股文

Java基础面试题 Java的特点 Java 与 C 的区别 JDK/JRE/JVM三者的关系 Java程序是编译执行还是解释执行&#xff1f; 面向对象和面向过程的区别&#xff1f; 面向对象有哪些特性&#xff1f; 数组到底是不是对象&#xff1f; Java的基本数据类型有哪些&#xff1f; 为什么不能用…

【python由站点数据插值到网格数据方法对比】

文章目录 1、前言2、结果对比2.1 原始散点站位图2.2 griddata插值2.3 krige插值2.4 RBF插值2.5 IDW插值 3、总结 1、前言 气象海洋中空间数据类型有站点数据、格点数据。站点数据空间分布不连续&#xff0c;不利于进行时空分析&#xff1b;有时需要将站点数据插值到网格中。本…

GEC6818开机自动加载驱动与更改开发板的RTC时钟

GEC6818开机自动加载驱动与更改开发板的RTC时钟 本文主要涉及&#xff1a; 1.GEC6818开机自动加载驱动 2.更改开发板的RTC时钟 文章目录 GEC6818开机自动加载驱动与更改开发板的RTC时钟一、开机自动加载驱动或运行程序**STEP1&#xff1a;** 使用vi打开文件profile.命令如下**S…

Day35 贪心 part04

Day35 贪心 part04 860.柠檬水找零 我的思路: 只要逐个考虑bills数组可能的数字 5/10/20&#xff0c;分别考虑 解答&#xff1a; class Solution {public boolean lemonadeChange(int[] bills) {int fivecount 0;int tencount 0;for(int bill : bills) {if(bill 5) {fiv…

116道网络安全面试题目总结

1、Burpsuite常用的功能是什么&#xff1f; 2、reverse_tcp和bind_tcp的区别&#xff1f; 3、拿到一个待检测的站或给你一个网站&#xff0c;你觉得应该先做什么&#xff1f; 4、你在渗透测试过程中是如何敏感信息收集的&#xff1f; 5、你平时去哪些网站进行学习、挖漏洞提…

“智慧食堂”设计与实现|Springboot+ Mysql+Vue+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文&#xff08;设计&#xff09;学生选题参考合集推荐收藏&#xff08;包含Springboot、jsp、ssmvue等技术项目合集&#xff09; 目录 1. 功…

智能电表怎么偷电?

大家好&#xff0c;今天我们要聊的是一个关于智能电表的小疑惑——智能电表是否能被“偷电”。可能你听过这样的说法&#xff0c;有人声称通过某些方法可以让电表不准确计费&#xff0c;甚至可以“偷电”。但事实真的是这样吗?让我们一起来科普一下。 首先&#xff0c;智能电表…

面经总结1

锁 数据库中事务的隔离性就是通过锁和mvcc&#xff08;多版本并发控制&#xff09;来实现的。锁分为悲观锁和乐观锁两种&#xff0c;悲观锁是指在数据并发访问中会发生冲突&#xff0c;因此在操作数据的时候会进行加锁&#xff0c;防止其他事务对其修改&#xff0c;通过SELECT …

全球首位AI程序员诞生,技术革新还是职业威胁?

目录 导语&#xff1a; 一、2024年的第一丝凉意 二、AI在编程领域的应用现状 三、关于Devin的现状 四.未来展望 五.面对未来挑战&#xff0c;我们应该 结语&#xff1a; 导语&#xff1a; 时间回调到两周前的3月13号&#xff0c;世界上第一位AI程序员Devin诞生&#xff…

人工智能的决策树介绍

决策树模型 决策树基于“树”结构进行决策 每个“内部结点”对应于某个属性上的“测试”每个分支节点对应于该测试的一种可能结果&#xff08;即属性的某个取值&#xff09;每个“叶结点”对应于一个“预测结果” 学习过程&#xff1a;通过对训练样本的分析来确定“划分属性”…

记录echarts各种地图json文件下载地址

今日绘图需要用到echarts的地图json文件&#xff0c;但是github上已经找不到了&#xff0c;后发现伟大的网友提供了地址如下&#xff1a;Index of /examples/data/asset/geohttps://echarts.apache.org/examples/data/asset/geo/ 免费下载实时更新的geoJson数据、行政区划边界…

如何解决Modbus转Profinet网关通信不稳定或数据丢失问题

接到现场反映&#xff0c;在配置Modbus转Profinet网关时&#xff0c;出现Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;通信不稳定或数据丢失的问题&#xff0c;就这个问题特做出答疑。 解决Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;通信不稳定或数据…

【Linux进阶之路】理解UDP,成为TCP。

前言 学了TCP 和UDP之后&#xff0c;感觉UDP就像是初入职场的年轻人&#xff0c;两耳不闻 “窗外事”&#xff0c;只管尽力地把自己的事情做好&#xff0c;但收获的却是不可靠&#xff0c;而TCP更像是涉世极深的"职场老油条"&#xff0c;给人的感觉就是 “城府极深&a…

Arduino中引脚的数字与真实引脚的对应关系

我们使用arduino开发时&#xff0c;最长遇到的是对端口管脚的拉高拉低&#xff0c;代码如下 void setup() {pinMode(13,OUTPUT); }void loop() {digitalWrite(13,HIGH); }上面还最简单io控制代码&#xff0c;其中引脚我们使用了数字13&#xff0c;但是这个13对应着哪个引脚呢&a…

老壁灯带你入门动态规划

1. 什么是动态规划 动态规划(dynamic programming)是运筹学的一个分支&#xff0c;是求解决策过程(decision process)最优化的数学方法。 从字面意义上来理解&#xff0c;就是走一步看一步&#xff0c;边解决问题&#xff0c;边对问题进行整体规划。 其实&#xff0c;动态规…