java中static作用_java中static作用详解

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以修饰静态static代码块,但是Java语言中没有全局变量的概念。

被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。

只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。

用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。

static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用,这样就容易理解多了。static前面加上其它访问权限关键字的效果也以此类推。

static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为:

类名.静态方法名(参数列表...)

类名.静态变量名

用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块(用处非常大,呵呵)。1、static变量

按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。

两者的区别是:

对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。

对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。但是多个线程使用静态变量注意同步的问题!!

所以一般在需要实现以下两个功能时使用静态变量:

 在对象之间共享值时

 方便访问变量时2、静态方法

静态方法可以直接通过类名调用,任何的实例也都可以调用,

因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。

因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!!

因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。

例如为了方便方法的调用,Java API中的Math类中所有的方法都是静态的,而一般类内部的static方法也是方便其它类对该方法的调用。

静态方法是类内部的一类特殊方法,只有在需要时才将对应的方法声明成静态的,一个类内部的方法一般都是非静态的3、static代码块

static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,

如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。4、static和final一块用表示什么staticfinal用来修饰成员变量和成员方法,可简单理解为“全局常量”!

对于变量,表示一旦给值就不可修改,并且通过类名可以访问。

对于方法,表示不可覆盖,并且可以通过类名直接访问。

有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,

而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,

而不必引用任何对象。你可以将方法和变量都声明为static。static成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。

声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制:

它们仅能调用其他的static 方法。

它们只能访问static数据。

它们不能以任何方式引用this 或super(关键字super 与继承有关,在下一章中描述)。

如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static 块仅在该类被加载时执行一次。

下面的例子显示的类有一个static方法,一些static变量,以及一个static 初始化块://Demonstrate static variables,methods,and blocks.

classUseStatic {static int a = 3;static intb;static void meth(intx) {

System.out.println("x = " +x);

System.out.println("a = " +a);

System.out.println("b = " +b);

}static{

System.out.println("Static block initialized.");

b= a * 4;

}public static voidmain(String args[]) {

meth(42);

}

}

一旦UseStatic 类被装载,所有的static语句被运行。首先,a被设置为3,接着static 块执行(打印一条消息),最后,b被初始化为a*4或12。然后调用main(),main()

调用meth() ,把值42传递给x。3个println ( ) 语句引用两个static变量a和b,以及局部变量x 。

注意:在一个static 方法中引用任何实例变量都是非法的。

下面是该程序的输出:

Static block initialized.

x= 42a= 3b= 12在定义它们的类的外面,static方法和变量能独立于任何对象而被使用。

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

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

相关文章

(0.3)HarmonyOS鸿蒙开发工具DevEco Studio 模拟器使用

1、登录华为账号 2、打开模拟器 3、选择模拟器 4、将程序运行在模拟器 5、当下面的building进度条完成后

(1.1)HarmonyOS鸿蒙中Ability概念及意义

1、简单理解:在鸿蒙中,可以简单理解为,打开APP后一个页面为一个Ability,而一个页面里面又有很多子页面(切片、片段)为AbilitySlice。 2、意义 一个Ability对应一个Hap包,一个APP则是由多个Hap包…

堆栈跟踪 堆栈跟踪_寻找缺少的堆栈跟踪

堆栈跟踪 堆栈跟踪我们最近在博客中发表的一篇评论带回了有关特定体验的一些回忆。 我希望我没有经历过的那种经历。 在创建Plumbr之前很长一段时间,我正在调试一个应用程序,该应用程序每次在蓝月亮时都会给我一个例外。 详细程度令人震惊: …

Java实现冒泡排序动画展示

原理:每次比较两个相邻的元素,将较大(较小)的元素交换至右边。 思路:每次冒泡排序操作都会将相邻的两个元素进行比较,看是否满足大小关系要求,如果满足,就根据需要(从小…

使用Zipkin和Sleuth进行SpringBoot微服务跟踪

在本文中,我们将了解使用Zipkin和Spring cloud sleuth框架的微服务分布式跟踪。 尽管微服务具有自身的挑战,但微服务是出色的架构。 复杂的微服务架构具有与其他微服务的下游和上游依存关系,并且一切都是相互联系的。 在大多数情况下&#x…

空指针异常NullPointerException解决

只需要根据出现空指针异常的情况进行相应更改即可解决。 情况①:一维数组在栈空间中的变量没有指向堆空间中数组元素实体的首地址信息 int[] arr1 new int[]{1,2,3}; arr1 null; System.out.print(arr1[0]);解决方法就是注意让数组不为空null,即它存有数组首地址…

log4j性能 slf4j_Log4j 2:性能接近疯狂

log4j性能 slf4j最近,Apache社区中一位受人尊敬的成员尝试了Log4j 2并在Twitter上写道: TheASF #log4j2摇摇欲坠 ! 性能接近疯狂^^ http://t.co/04K6F4Xkaa — Mark Struberg(struberg) 2013年5月7日 &a…

计算机二级web题目(6)--动态网页技术概述

1 [单选题] 下列不属于动态网页格式的是(D)。 A. ASP B. JSP C. ASPX D. VBS 2 [单选题]相对比较早出现的服务器端动态网页技术是(B)。 A. ASP B. CGI C. JSP D. JavaScript 3 [单选题] PHP中采用的模板技术是(A&#…

java 输入人名_Java 读取控制台输入

Java 提供了我们两种读取控制台输入的方法:一、传统方法public class ReadConsoleOld {public static void main(String[] args) throws IOException {BufferedReader reader new BufferedReader(new InputStreamReader(System.in));while(true){String line read…

JVM体系结构:JVM和JVM体系结构概述

各位读者好! 在本教程中,我们将了解和学习Java虚拟机(JVM)及其体系结构。 本教程将帮助您正确回答以下问题: Java中的JVM是什么? JVM的不同组件 JVM,JRE和JDK之间的区别 1.简介 Java虚拟机&…

java option请求_java – 如何说服spring 4.2将OPTIONS请求传递给控制器

我们在控制器上使用带有RestController注释的spring mvc,我们正在处理控制器中的授权.我们使用相同的代码来设置响应CORS飞行前请求的允许方法.为实现这一目标,我们有:在调度程序servlet的配置中,然后我们有:RequestMapping(value"/some/collection…

计算机二级web题目(7.1)--综合选择题1

(1)程序流程图中带有箭头的线段表示的是(C)。 A、图元关系 B、数据流 C、控制流 D、调用关系 解析:①长方形表示要处理执行的步骤。②菱形表示条件判断。③平行四边形表示输入或输出。 (2)结构化程序设计的基本原则不包括(A&#…

java8 javafx_Java 8的新增功能(第1部分– JavaFX)

java8 javafx免责声明:我不为Oracle工作,也不以任何方式代表Oracle。 此功能列表不是官方的。 作为“局外人”,这只是我研究的一部分。 Java 8已在大约两个月前完成了功能,并且开发者预览版即将到来(两周后&#xff0…

Java面向对象(1)--对象的创建使用类的实例化

1、类与对象 类是对一类事物的描述,是抽象的、概念上的定义。 对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。 通常都是将类实例化,也就是对象的创建 可以理解为:类 抽象概念的“人”;对象 实实在…

java ee 下载 安装配置_JavaEE下载安装及配置.doc

JavaEE下载安装及配置Apache Tomcat下载安装及配置下载Tomcat6.X最新版本官网下载地址:/tomcat/tomcat-6/v6.0.35/bin/右键迅雷下载即可。安装怎样在windows下安装tomcat步骤/方法双击.exe安装程序,显示如下图所示的欢迎页面。点击next按扭出现如下图所示…

Java简单内存解析

堆(Heap),此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。 通常所说的栈(Stack)&…

servlet3异步_Servlet 3的异步Servlet功能

servlet3异步在深入了解什么是异步Servlet之前,让我们尝试了解为什么需要它。 假设我们有一个Servlet,处理时间很长,如下所示。 LongRunningServlet.java package com.journaldev.servlet;import java.io.IOException; import java.io.Prin…

计算机二级web题目(7.2)--基本操作题1

前些天发现了一个巨牛的人工智能学习电子书,通俗易懂,风趣幽默,无广告,忍不住分享一下给大家。(点击跳转人工智能学习资料) 1、在考生文件夫下的Web1目录中,存有1.htm和label2.htm文件&#xff…

java矩阵连乘算法_使用java写的矩阵乘法实例(Strassen算法)

Strassen算法于1969年由德国数学家Strassen提出,该方法引入七个中间变量,每个中间变量都只需要进行一次乘法运算。而朴素算法却需要进行8次乘法运算。原理Strassen算法的原理如下所示,使用sympy验证Strassen算法的正确性import sympy as sA …