网站首页 > java教程 正文
把对象相关的变成类相关的,它可以修饰属性、方法、代码块和内部类。
static修饰属性(类变量)
那么这个属性就可以用“类名.属性名”来访问,也就是使这个属性成为类的变量,为本类对象所共享。
类加载的过程,类本身也是保存在文件中(字节码文件保存着类的信息)的,Java会通过I/O流把类的文件读入JVM(Java虚拟机),这个过程称为类的加载。JVM会通过类途径(CLASSPATH)来找字节码文件。需要的时候才会进行类加载,生成对象时是先加载后构造。
类变量,会在加载时自动初始化,初始化规则和实例变量相同。
注意:
类中的实例变量是在创建对象时被初始化的。
static修饰的属性,是在类加载时被创建并进行初始化,类加载的过程中只进行一次,也就是类变量只会创建一次。
static修饰方法(静态方法)
会使这个方法成为整个类所公有的方法,可以用“类名.方法名”访问。
static修饰的方法,不能直接访问本类中的非静态成员,但是本类的非静态方法可以访问本类的静态成员。
在静态方法中不能出现this关键字。
父类中是静态方法,子类中不能覆盖为非静态方法,在符合覆盖规则的前提下,在父子类中,父类中的静态方法可以被子类中的静态方法覆盖,但是没有多态。(在使用对象调用静态方法时其实是调用编译时类型的静态方法)
Java中的main方法必须写成static的原因:在类加载时无法创建对象,而静态方法可以不通过对象调用,所以在类加载时就可以通过main方法入口来运行程序。
static修饰初始代码块
这时这个初始代码块就叫做静态初始代码块,这个代码块只在类加载时被执行一次。
可以用静态初始代码块初始化一个类。
动态初始代码块,写在累体重的“{ }”,这个代码块是在生成对象时运行,这种代码块叫动态初始代码块。
下面的例子显示的类有一个static方法,一些static变量以及一个static初始化块:
一旦UserStatic类被装载,所有的static语句被执行。首先a被设置为3,接着static块执行(打印一条消息),最后b被初始化为a*4或12。然后调用main( ),main( )
调用meth( ),把值42传递给x。3个println( )语句引用两个static变量a和b,以及局部变量x。
注意:在一个static方法中引用任何实例变量都是非法的。
下面是该程序的输出:
在定义它们的类的外面,static方法和变量能独立于任何对象而被使用。这样,你只要在类的名字后面加点号运算符即可。例如,如果你希望从类外面调用一个static方法,你可以使用下面通用的格式:
classname.method( );
这里,classname是类的名字,在该类中定义static方法。可以看到这种格式与通过对象引用变量调用非static方法的格式类似。一个static变量可以以同样的格式来访问——类名加点号运算符。这就是Java如何实现全局功能和全局变量的一个控制版本。
下面是一个例子。在main( )中,static方法callme( )和static变量b在它们的类之外被访问。
下面是该程序的输出:
解释的很透彻,还想补充点,就是static成员是不能被其所在class创建的实例访问的。
通俗点的解释如下:
1.如果不加static修饰的成员是对象成员,也就是归每个对象所有的。
2.加static修饰符的成员是类成员,就是可以由一个类直接调用,为所有对象共有的。
猜你喜欢
- 2024-10-04 Java中static关键字用法小结(java中static的基本用法)
- 2024-10-04 java中的static、方法、成员变量和局部变量
- 2024-10-04 关于Java中static和final关键字的用法总结
- 2024-10-04 教你如何在Java中更好的定义常量(java定义常量用什么关键字)
- 2024-10-04 Java入门:static关键字和静态属性、方法
- 2024-10-04 Java关键字:final,static,this,super
- 2024-10-04 附带正反案列,Java中final和static关键字总结
- 2024-10-04 static特点——java(java的static有什么用)
- 2024-10-04 Java中的static关键字和静态变量、静态方法
- 2024-10-04 Java开发中的static关键字的功能及用法
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)