java中的static
表示静态方法:
在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法
一旦使用statice修饰成员方法,那么这就成为静态方法,静态方法不属于对象,而是属于类。
没有statice关键字,必须首先创建对象,然后通过对象才能使用他。
对于奔雷的静态方法,可以省略类名称
它们仅能调用其他的static 方法。
它们只能访问static数据。 · 它们不能以任何方式引用this 或super。因为this是指当前对象,但是静态和对象没有关系
调用一个静态方法就是“类名.方法名”
静态方法常常为应用程序中的其它类提供一些实用工具所用
package com.company.tobe; class QuanName{ private static String name = "QQ" private int age = 11; public static void showName(){ System.out.println("quan"+name ); // System.out.println("age"+age);因为age不是静态变量,所以不能访问 } } public class StaticTest { public static void main(String[] args) { // 不需要实例化QuanName就能调用静态函数 QuanName.showName(); } }
表示静态变量
声明为static的变量实质上就是全局变量。
当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量
所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间
表示静态类
只有一个内部类才可以设置为静态类
为静态的内部类可以直接作为一个普通类来使用,而不需实例一个外部类。
package com.company.tobe; class QuanName{ private static String name = "QQ"; private int age = 11; public static class QQ{ public static void showQQ(){ System.out.println("QQQ1"); } } } public class StaticTest { public static void main(String[] args) { // 也是不需要实例化QuanName就可以使用内部静态类QQ QuanName.QQ.showQQ(); } }
结合final
static final修饰变量:表示一旦给值就不可修改,并且通过类名可以访问。
statice final修饰方法:表示不可覆盖,并且可以通过类名直接访问。
package com.company.tobe; class QuanName{ static final String name = "QQ"; private int age = 11; // public void setName(String n){ // name = n;但是不能修改,因为final // } //} public class StaticTest { public static void main(String[] args) { // 直接通过类名访问不是私有的变量, System.out.println(QuanName.name); } }
静态代码块:
package com.company.statice; /**\ * 特点:当第一次用到本类的时候,静态代码块执行唯一一次 * 静态内容总时优先于非静态,所以静态代码比构造方法先执行 * * 静态代码块的典型用途:用来一次性对静态变量进行赋值. */ public class StaticeBlock { static { System.out.println("静态代码执行"); } public StaticeBlock(){ System.out.println("构造函数执行"); } }
package com.company.statice; public class StaticeTest { public static void main(String[] args) { StaticeBlock sb = new StaticeBlock(); StaticeBlock sb2 = new StaticeBlock(); } } 结果: 静态代码执行 构造函数执行 构造函数执行