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无参空构造执行
原文地址:https://www.cnblogs.com/crzhang/p/9967029.html
时间: 2024-10-07 05:02:03