Java static变量与代码块
Posted crzhang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java static变量与代码块相关的知识,希望对你有一定的参考价值。
static是用来修饰成员变量和成员方法,也可以形成静态static代码块。
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。
只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
它方便了在没有创建对象的情况下使用,如math类的使用,main方法的使用。
特点:
package com.company; /* case_01被所有使用的关键字共享 case_02:可以使用类名调用 case_03可以调用静态的成员方法 case_04不可以调用非静态成员变量 case_05不可以调用非成员方法 */ public class StudentDemo02 { public static void main(String[] args) { Student1.graduateFrom = "xxx";//case_02 Student1.study(); } } class Student1 { String name; int age; static String graduateFrom; public static void study(){ System.out.println(graduateFrom); sleep();//case_03 //System.out.println(name); case_04 //eat(); case_05 } public static void sleep() { System.out.println("sleep"); } public void eat() { System.out.println(graduateFrom); } }
相关说明:由于静态方法不需要依赖任何对象就可以访问,所以在静态方法中不能使用非静态成员变量和方法,静态方法中也没有this关键字,因为它们都需要依赖对象而存在。
代码块:
它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。
该类不管创建多少对象,静态代码块只执行一次。
package com.company; public class BlockDemo { static { System.out.println("BlockTest静态代码块执行"); } { System.out.println("BlockTest构造代码块执行"); } public BlockDemo(){ System.out.println("BlockTest无参构造执行了"); } public static void main(String[] args) { System.out.println("BlockTest的主函数执行了"); Coder c = new Coder(); Coder c2 = new Coder(); } } class Coder { static { System.out.println("Coder静态代码块执行"); } { System.out.println("Coder构造代码块执行"); } public Coder() { System.out.println("Coder无参空构造执行"); } }
执行结果:
BlockTest静态代码块执行
BlockTest的主函数执行了
Coder静态代码块执行
Coder构造代码块执行
Coder无参空构造执行
Coder构造代码块执行
Coder无参空构造执行
以上是关于Java static变量与代码块的主要内容,如果未能解决你的问题,请参考以下文章
Java面向对象(OOP)--static修饰符(static变量static方法代码块和静态代码块创建和初始化对象的过程静态导入)
final与static关键字的区别?(skycto JEEditor)