版权声明:欢迎转载 https://blog.csdn.net/qq_37875585/article/details/88116047
static
static 静态的
属于对象的属性和方法是动态的,相反属于类的就是静态的。
静态的用途
-
修饰类的成员变量,称为静态变量,
-
静态变量是属于类的变量,可以使用“类名.变量名”访问, 在类的内部可以省略类名。
-
静态变量只有一份,可以被全体对象共享!软件中只有一份的数据应该使用static修饰。
-
静态变量在类加载期间,随着类在方法区中初始化,只有一份属于类。
public class Demo04 { public static void main(String[] args) { /* * 测试静态变量 */ Hoo h1 = new Hoo(); Hoo h2 = new Hoo(); h1.a = 5; h2.a = 8; Hoo.b = 11; System.out.println(h1.a +","+h1.b); System.out.println(h2.a +","+h2.b); System.out.println(Hoo.b); } }
class Hoo{ int a; //只有一份,被全体类的实例共享 static int b; }
-
-
修饰方法,称为静态方法:
- 静态方法是属于类的方法
- 一般使用“类名.方法”
- 相对于对象方法(非静态方法),静态方法可以不创建对象直接使用类名调用。
- 静态方法的好处就是:直接使用类名就可以调用方法。
- 一般请情况下当方法计算时候用到当前对象(this)的属性(数据)时候,使用非静态方法。 相反方法在计算时候没有用到当前对的属性,则应该定义为静态方法。
- 非静态方法中,包含默认的局部变量 this 引用当前 的对象,静态方法中没有 this这个变量!
public class Demo05 { public static void main(String[] args) { /* * 静态方法 */ //静态方法: 不用创建对象,直接使用类名就可以调用 Person.add(8, 9); //非静态方法也就是对象的方法,需要先创建对象, //再使用对象的引用调用 Person p = new Person("Tom"); p.whoru(); //一般和对象无关的工具方法,使用静态方法。 //Arrays.toString(a) //Arrays.sort(a); System.out.println(Math.sin(Math.PI/2)); System.out.println(Math.cos(Math.PI/2)); //sqrt 计算平方根 System.out.println(Math.sqrt(2)); } }
class Person{ String name; public Person(String name) { this.name = name; } public static void add(int a, int b) { System.out.println(a+b); } public void whoru() { System.out.println("我是"+name); } public String toString() { return "Person [name=" + name + "]"; } }
-
修饰代码块,称为静态代码块: 在类中使用static修饰的代码块。
- 在类加载期间按照顺序执行
- 一般用于初始化静态资源(静态属性)
public class Demo06 { public static void main(String[] args) { /* * 测试静态代码块执行一次 */ Circle c1 = new Circle(); Circle c2 = new Circle(); System.out.println(Circle.n); } }
class Circle{ static double n; //在类加载期间执行,由于类只加载一次,所以静态代码 //只执行一次, 经常用于加载 图片,配置文件等静态资源 static { System.out.println("HI"); //利用静态代码块初始化了变量n n = Math.PI*2; } }
-
修饰内部类,称为静态内部类
- 用静态关键字修饰的内部,一般用于在静态方法中使用
- 静态方法只能访问静态资源: 静态方法中没有this,不能使用当前对象的属性,不能使用当前对象的方法,也不能使用成员内部类!