在类中定义的数据成为类的数据成员,例如字段,常量等。而函数的成员方法则提供操作类的数据的功能,函数成员方法、属性、构造函数等。对象中的数据成员和方法一般都是对象私有的,即只有对象本身才能访问,其他对象不能直接对其操作。但是,如果在多个地方调用就需要产生多个实例。有些时候被调用的方法与实例的多少没有任何关系,该方法可能只是帮助方法。在这种情况下,不需要多个实例, java 引入了static,先看一个实例:
public static void main(String[] args) {System.out.println(Math.random());}
在jdk中Math的random方法的作用是提供一个产生随机数的功能,它只是一个帮助方法,与Math中的实例变量没有任何关系,所以不需要调用一次产生一个实例,只通过类直接调用就可以了,在此JDK中就提供了random这static(静态)方法。
Static 不仅可以修饰方法还可以修饰属性,由于Static 修饰的方法或者属性与实例的多少没有任何的关系,可以理解为static 的方法和属性是可以在多个实例之间共享的。
看以下实例:
public class Text {static int count=0;public StaticCount(){count ++;}
public static void main(String[] args) {StaticCount count1 = new StaticCount ();StaticCount count2 = new StaticCount ();System.out.println("count="+ count);}
}
运行结果:count=2从以上实例可以看出,count1所指向的对象和 count2指向的对象共享了static变量。实际上我们经常提到的入口函数也是个static静态方法,静态方法与实例没有任何的关系,它可以直接调用静态变量。 也可以通过实例的引用调用静态属性或者方法,效果是相同,只是不需要而已。
可以把某段代码直接通过static修饰,看以下实例:
public class Text{int count;static {System.out.println("in the static segment...");}
public Text (){System.out.println("in the constuctor segment...");}
public static void main(String[] args) {Text sd0 = new Text();}
}
运行结果:
in the static segment...
in the constuctor segment...
大家注意到,通过static修饰的代码块在构造函数之前就执行了,实际上静态代码块是在程序加载(load)的时候执行的,而构造函数是在运行的时候执行的。静态代码块只加载一次,看以下实例:
public class Text {static {System.out.println("in the static segment...");public Text (){System.out.println("in the constuctor segment...");}
public static void main(String[] args) {Text sd0 = new Text ();Text sd1 = new Text ();Text sd2 = new Text ();}
}
运行结果:
in the static segment...
in the constuctor segment...
in the constuctor segment...
in the constuctor segment...
从运行结果可以看出static 代码只执行了一次,构造函数执行了三次,也就是静态代码块会在加载的时候执行,而且只执行一次。
原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/database/334/12131334.shtml
分享到:
相关推荐
以上是Java中static的用法详解,我们可以通过static关键字来将对象层级的成员变量或方法提升为类层级,从而提高程序的运行效率。同时,static代码块也可以在类加载时执行一次,提高程序的启动速度。希望这篇文章能够...
常量池在Java的动态链接中起到关键作用,因为它是解析类、方法和字段引用的依据。 5. **代码段(Code Segment)**:这部分内存用于存储从硬盘上读取的源代码。 6. **数据段(Data Segment)**:存放由`static`...
Java语言支持两种主要的数据类型:**值类型**和**引用类型**。值类型主要包括基本数据类型(如`int`, `float`等)及其对应的包装类(如`Integer`, `Float`)。引用类型则通常指类、数组或接口等对象类型。 ##### 1....
Java中的`static`关键字是Java语言中的一个重要特性,它用于定义类级别的成员,包括变量、方法、块和内部类。本文将深入解析`static`关键字的五个主要用途:静态成员变量、静态方法、静态初始化块、静态内部类以及...
本文将深入探讨几种Java播放音频的技术,并通过实例解析它们的使用方法。 1. Java Sound API(Java声音API) Java Sound API是Java提供的一套全面的声音处理框架,它包括了音频输入/输出、混音、处理等功能。要使用...
Java中的`Date`类是Java开发工具包(JDK)的一部分,自1.0版本就已经存在。`Date`类最初设计用于表示特定日期和时间,但随着时间的推移,其功能逐渐被`Calendar`类和`java.time`包中的新类所替代。在Java 1.1中,`...
在Java语言中,`Number`类作为所有基本数值类型的包装类的基础类,它提供了一系列用于处理数值的方法。这些包装类包括`Integer`、`Long`、`Byte`、`Double`、`Float`和`Short`等。理解`Number`类以及它的子类如何...
Java类加载原理是Java虚拟机(JVM)的重要组成部分,它负责将类的.class文件从磁盘或网络中加载到内存,并转化为运行时的数据结构,以便执行程序代码。本文将深入探讨类加载机制,包括加载、连接、初始化三个主要...
Java Scanner 类的用法详解 JavaScanner 类是 Java 5 中引入的新特征,通过它可以获取用户的输入。在 Java 中,Scanner 类是 java.util 包下的一个类,用于从输入流中读取数据。 创建 Scanner 对象 创建 Scanner ...
《12306售票算法解析(Java版)》 12306是中国铁路客户服务中心的官方网站,其售票系统采用了一种独特的算法来处理庞大的购票需求。本文将重点探讨12306售票算法的Java实现,以及如何在实际操作中确保公平性和效率...
在Java编程语言中,`Scanner`类是用于从各种输入源读取基本类型的数据和字符串的。`next()`和`nextLine()`是`Scanner`类中的两个重要方法,它们在处理用户输入时有着显著的不同。这里我们将深入探讨这两个方法的区别...
Java实现数据加密问题详解 Java是最流行的编程语言之一,在数据加密问题方面,Java提供了多种解决方案,本文将通过实例代码详细介绍Java实现数据加密问题的解决方案。 加密算法的选择 在加密算法的选择中,需要...
Java中的单例模式是一种设计模式,它限制一个类只能创建一个实例,并提供全局访问点,以确保所有对象共享同一份资源。单例模式在许多场景下非常有用,比如管理资源(如数据库连接池)、实现缓存、配置信息类以及控制...
Java常用API(Scanner、Random)匿名对象详解 Java中封装了许多API供用户使用,Scanner和Random便是其中之一。API实际就是类,我们只需按照其语法编写即可,无需了解其根本源代码。 Scanner类 Scanner类是Java中的...
Android.mk是Android Native Development Kit (NDK) 中的关键文件,用于构建C/C++原生代码,通常是用于实现Java平台上的本地方法(JNI)。通过编写Android.mk,开发者能够控制如何编译、链接和打包本地库,使其能与...