static
静态变量随着类的加载而加载。可以通过"类.静态变量"的方式进行调用
静态变量的加载要早于对象的创建。
①由于类只会加载一次,则静态变量在内存中也只会存在一 份:存在方法区的静态域中。
类变量 实例变量
类 yes no
对象 yes yes
3.3静态属性举例: System.out; Math.PI;*
4.使用static修饰方法,静态方法
①随着类的加载而加载,可以通过"类.静态方法"的方式进行调用
静态方法 非静态方法
类 yes no
对象 yes yes
①静态方法中,只能调用静态的方法或属性非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性
5. static注意点:在静态的方法内,不能使用this关键字、super关键字。
关于静态属性,静态方法的使用多从生命周期去考虑理解。
6.开发中如何确定一个属性是否需要声明为静态。
> 属性可以被多个对象共享,不会随着对象的不同而不同
开发中如何确定一个方法是否需要声明为静态。
> 操作静态属性的方法,必需要设置为static
> 工具类方法习惯声明为静态。比如Math,Arrays,Collections
package com.oop.Demo06;
//static
public class Student {
private static int age; //静态的变量 多线程
private String name; //非静态的变量
public void run(){
System.out.println("pao");
go();//非静态方法可以调用静态方法
}
public static void go (){
System.out.println("qu");
}
public static void main(String[] args) {
Student s1 = new Student();
//s1.name.sout快捷键
System.out.println(s1.name);
System.out.println(s1.age);
System.out.println(Student.age);
// System.out.println(Student.name); 报错因为非静态不能这样使用
//所以有静态变量我们一般使用类名去调用
System.out.println("=============");
Student.go();//静态可以通过类名加方法调用甚至可以之间使用方法名
go();
}
}
```
```java
package com.oop.Demo06;
public class Person {
//假如Person被final修饰了,Student就不能继承
//final之后断子绝孙
{
//代码块()匿名代码块,不建议这样写
System.out.println("匿名代码块");
}
static {
//静态代码块,永久且只执行一次
System.out.println("静态代码块");
}
public Person(){
System.out.println("无参构造器(构造方法)");
}
public static void main(String[] args) {
Person p1 = new Person();
//输出 静态代码块
// 匿名代码块
// 无参构造器(构造方法)
Person p2 = new Person();
// 只有两个是因为静态代码块只会运行一次
// 输出 匿名代码块
// 无参构造器(构造方法)
}
}
```
```Java
package com.oop.Demo06;
//import static java.lang.Math.rondom;
//import static java.lang.Math.Pi;
public class Text {
public static void main(String[] args) {
System.out.println(Math.random());//Math类,可以导入包之后就不用在写Math
System.out.println();
}
}
```