java什么是静态_什么是java静态

9927860f2a2cf7c9f3273a919724a9fd.png

什么是java静态

java静态包括静态变量、静态方法、静态初始化块,以下是静态的详解。(推荐教程:java教程)

1. 什么是静态变量

大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立。

然而在某些时候,我们更希望该类所有的对象共享同一个成员。此时就是 static 大显身手的时候了!

Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。

静态成员可以使用类名直接访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问

使用 static 可以修饰变量、方法和代码块。public class Test1 {

// static修饰的变量为静态变量,所有类的对象共享hobby

static String hobby = "Tedu";

public static void main(String[] args) {

// 静态变量可以直接使用类名来访问,无需创建对象

System.out.println("通过类名访问hobby:" + Test1.hobby);

// 创建类的对象

Test1 t1 = new Test1();

// 使用对象名访问静态变量

System.out.println("使用对象名访hobby:" + t1.hobby);

// 使用对象名的形式修改静态变量的值

t1.hobby = "cjj";

// 再次使用类名访问静态白变量,值已经被修改

System.out.println("通过类名访问hobby:" + Test1.hobby);

}

}

运行结果:通过类名访问hobby:Tedu

使用对象名访hobby:Tedu

通过类名访问hobby:cjj

注意:

静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收!

2. static 使用之静态方法

与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法。

其实之前我们一直写的 main 方法就是静态方法public class Test01 {

//使用static关键字声明静态方法

public static void print() {

System.out.println("欢迎你:Cjj!");

}

public static void main(String[] args) {

//直接使用类名调用静态方法

Test01.print();

//也可以通过对象名调用,当然更推荐使用类名调用

Test01 t1 = new Test01();

t1.print();

}

}

复制代码欢迎你:Cjj!

欢迎你:Cjj!

注意:

1、 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如:

如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。如:

2、 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量,如:

3、 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。如:public class Test01 {

String name = "Cjj"; //静态成员变量

static String hobby = "study"; //非静态成员变量

//普通成员方法

public void print1() {

System.out.println("普通成员方法~~~");

}

//静态成员方法

public static void print2() {

System.out.println("静态成员方法~~~");

}

public static void main(String[] args) {

//普通成员方法必须通过对象来调用

Test01 t1 = new Test01();

t1.print1();

//可以直接调用静态方法

print2();

}

}

3. static 使用之静态初始化块

Java 中可以通过初始化块进行数据赋值。如:public class Test02 {

String name; // 定义一个成员变量

//通过初始化块为成员变量赋值

{

name = "cjj";

}

}

依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。

注意:

静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。

我们来看一段代码:public class Test02 {

int num1;

int num2;

static int num3;

public Test02() {// 构造方法

num1 = 11;

System.out.println("通过构造方法为变量num1赋值");

}

{ // 初始化块

num2 = 22;

System.out.println("通过初始化块为变量num2赋值");

}

static {// 静态初始化块

num3 = 33;

System.out.println("通过静态初始化块为静态变量num3赋值");

}

public static void main(String[] args) {

Test02 t1 = new Test02(); //创建对象

System.out.println("num1:" + t1.num1);

System.out.println("num2:" + t1.num2);

System.out.println("num3:" + num3);

}

}

运行结果:通过静态初始化块为静态变量num3赋值

通过初始化块为变量num2赋值

通过构造方法为变量num1赋值

num1:11

num2:22

num3:33

通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。

类是在第一次使用的时候才加载,加载之后就不会移除。

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

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

相关文章

如何在 .NET 程序万种死法中有效的生成 Dump (上)

一:背景相信很多人都知道通过 任务管理器 抓取dump,虽然简单粗暴,但无法满足程序的无数种死法,比如:内存膨胀,程序爆炸CPU爆高,程序累死应用无响应,用户气死意外退出,和人…

74款app源码,值得你拥有的干货

最近,小编一直在整理一些app的源码,如:BiliClient(仿bilibili客户端)、WeChat高仿微信、知乎专栏App、Compass(MIUI指南针的社区开源版)等。现在小编打算将这些资料免费分享给大家!&…

监控系统简介:使用 Prometheus 与 Grafana

注:本文虽以 Docker 进行演示,但 Docker 并不是必须的,相关软件也可以直接安装到计算机上背景如果我们是Web应用的开发者,会对响应时间、接口的稳定性等比较敏感,在站点尚未部署到生产环境时,我们有充足的时…

7500 cpuz跑分 i5_核心硬盘 i5 7500性能测试_DIY攒机酷品测试-中关村在线

下面我们进入CPU测试环节。为保测试性准确可靠,以下测试均采用Windows 10 1周年版 64位正版系统,且不对操作系统进行任何优化,用以获取最大的系统稳定性与兼容性。Intel 酷睿i5 7500i5 7500 CPU-ZFritz Chess BenchmarkFritz Chess Benchmark…

Android Ap 开发 设计模式第七篇:生成器模式

Builder Pattern 模式解读 生活在深圳这所高速发展的城市,高楼大厦林立。所谓万丈高楼平地起,在我们感慨楼层的高耸之外,更要配服楼层的建造者和设计者。大楼首先得打稳地基、搭建骨架,再由下往上一层层盖上去。而这样的架构从程序…

MySQL 创始人:写代码比打游戏还爽,程序员应该多泡开源社区

编者按:根据StackOverflow的最新调查,MySQL仍然是全世界最流行的数据库,受访的开发者中有44.3%的人在使用,超过了第二位的SQL Server 10多个百分点。可是你知道MySQL是怎么诞生的吗?openocean 的一篇有关MySQL开发者Mi…

tomcat如何修改java版本_Java程序员必备——Tomcat配置技巧Top10

一、配置系统管理(Admin Web Application)大多数商业化的J2EE服务器都提供一个功能强大的管理界面,且大都采用易于理解的Web应用界面。Tomcat按照自己的方式,同样提供一个成熟的管理工具,并且丝毫不逊于那些商业化的竞争对手。Tomcat的Admin …

祝福!微软 46 周年生日快乐!

46 年前的今天,即 1975 年 4 月 4 日,比尔盖茨(Bill Gates)和保罗艾伦(Paul Allen)共同创立了微软公司。他们是小时候认识的朋友及高中同学,并对电脑编程充满激情。1975 年 1 月,MIT…

荐书 | 没有数学思维的程序员不是好的问题解决者

今天小木给大家推荐以下五本关于数学历史或数学思维的名家著作。读者推荐:01《这才是最好的数学书》[日] 笹部贞市郎55.00赠:《谁谋杀了希尔伯特教授》数学漫画随机一本《神笔涂绘》内容简介:有人曾请教笹部贞士郎,是如何引领近代…

java反射sethaha_Java反射深度测试

通过反射API构造对象,并使用反射调用方式访问对象的public/private方法和字段。package lavasoft.test;/*** 测试的业务类** author leizhimin 2010-5-6 20:16:10*/public class MyService {private String msg;public MyService() {System.out.println("log: …

监控系统简介(二):使用 App Metrics 在 ASP.NET Web API 中记录指标

回顾在《监控系统简介:使用 Prometheus 与 Grafana》一文中,我们了解了什么是监控系统,Prometheus 这一监控工具及它提供的数据类型、PromQL 以及 Grafana 可视化工具的基本用法。今天这一篇我们将在 ASP.NET Web API 项目中进行实战&#xf…

剧透人生!你什么时候结婚换工作甚至狗带,Facebook都知道

来源:大数据文摘即将换工作?要结婚了?有亲人朋友要去世了?你关心的这些人生重大节点,有人希望比你提前知道它们何时发生,并基于此对你精准投放广告。惊悚?这是Facebook在2010年以来提交的一系列…

如何在 NET 程序万种死法中有效的生成 Dump (下)

一:背景 上一篇我们聊到了如何通过 procdump 抓取 cpu爆高 和 内存暴涨 两种情况,这一篇再聊聊如何去抓程序 挂死 和 意外退出。二:程序挂死 1. 定义程序挂死 简单的说就是程序没有响应,既然没响应了,可能 死锁, 可能 …

C++程序运行时内存布局之--无继承情况下的虚函数

2019独角兽企业重金招聘Python工程师标准>>> 虚函数是C实现多态的关键,没有虚函数,C只能是OB,不能完成OO。 本文介绍的是没有继承情况下,带有虚函数的类在内存中布局,以及其实例(对象&#xff0…

纠结学哪种编程语言?请看这个回答

各位童鞋,如果最近/未来几年有人还纠结学习哪种编程语言,那你可以请他/她参考一下这个 Quora 帖子的最高赞回答:> 能找一份工作:Java> 能找一份高薪工作:C> 啥样工作都能找到:Python> 总能找到…

NET问答: 有最干净利落的读写文件方式吗?

咨询区 ApprenticeHacker:在 C# 中有很多种读写文件的方式 (文本文件,非二进制)。为了践行 do more, write less 的思想,现寻找一种最简单最少代码量的方式,因为在我的项目中有太多的功能需要读写文件了。回答区 vc 74&#xff1a…

写好一份数据分析报告的13个要点

先说说写一份好的数据分析报告的重要性,很简单,因为分析报告的输出是你整个分析过程的成果,是评定一个产品、一个运营事件的定性结论,很可能是产品决策的参考依据,既然这么重要那当然要写好它了。我认为一份好的分析报…

oracle11g安装和基本的使用,手把手看图教你用起来。

前面技术架构和系统选型说到了使用oracle,看到园友们一些评论。我也不想卖弄,不想争论什么数据库好。喜欢就是理由,用了多年了为何不可。 我可以想象,大家没有使用oracle的原因可能有以下几点: 被oracle价格吓破胆的有…

java高并发类_Java 高并发之魂

前置知识了解Java基本语法了解多线程基本知识知识介绍Synchronized简介:作用、地位、不控制并发的后果两种用法:对象锁和类锁多线程访问同步方法的7种情况:是否是static、Synchronized方法等Synchronized的性质:可重入、不可中断原…

.NET 开源配置组件 AgileConfig 初体验

介绍在微服务大行其道的今天,系统会被拆分成多个模块,作为单独的服务运行,同时为了集中化管理,我们还需要日志中心,配置中心等,很多开发人员可能更熟悉 ApolloConfig,这个组件功能也很完善&…