如图所示,java中的静态属性肯定是公有属性,定义格式:stataic 数据类型 <属性名>。访问静态属性用类名.属性名访问,存储在方法区中。但普通属性可以是任意的,调用访问:对象名.属性名。存储在堆中。
静态方法也是公有方法,定义格式:static 返回值类型 <函数名>。访问时格式:类名.方法名。静态方法只能访问静态属性和静态方法。但普通方法全部都可以访问。
Java中有一些static块和普通块。static格式:static{}。普通块格式:{}。static块一般类构建完成就调用一次。假如static块在Student类中,java中的JVM 构造Student类完成,就会调用一次static块。普通块创建几个对象就会被调用几次。比如Student 类中有一个普通块,我再这个类中创建了两个对象,执行程序时就会调用两次普通块。
java中的final表示唯一的,不变的。如果用final修饰属性,这个属性肯定是常量,而且必须赋初始值,属性的字母为大写。若用final修饰属性,这个属性的值不能被更改。一般的话如果用final修饰属性,需要把用static修饰。因为如果创建多个对象,太占用内存。
final如果修饰方法,这个方法就不能被重写了。
final如果修饰类,这个类就不能被继承。
java中一般也可以用import导入静态属性和方法,使用时可以不写类名直接调用。
package www.lyc;
public class Student {
//静态块 构造类完成调用一次
static {
System.out.println("ddd");
}
//初始化块,每创建一次对象就调用一次
{
System.out.println("eee");
}
public static String classname;
private int id;
private String name;
public Student() {
}
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public static void staticmethod1(){}
public static void staticmethod(){
//静态的只能调用静态的
classname="117";
staticmethod1();
}
public void method(){
//普通的可以调用全部
name="zhangsan";
id=1;
staticmethod();
staticmethod1();
classname="117";
}
}
package www.lyc;
public class Test {
public static void main(String[] args) {
//调用静态属性 类名.属性名
Student.classname ="2007";
Student s1 =new Student(1,"zhangsan");
//调用普通方法,对象名.属性名
Student s2 =new Student(2,"lisi");
}
}
package www.lyc;
import static www.lyc.Student.*;
import static www.lyc.Student.classname;
import static www.lyc.Student.staticmethod1;
public class Teacher {
public void sayHello(){
staticmethod1();
classname="2007";
Student.staticmethod();
}
}
package com.lyc;
public class Father {
public final float PI =3.14f;
}
package com.lyc;
public final class Father1 {
}
package com.lyc;
public class Test1 {
public static void main(String[] args) {
Father S1 = new Father();
final int a =14;
//a =13;final 是常量,不能改变值
}
}
package www.lyc;
import com.lyc.Father;
public class Son extends Father {
}
package www.lyc;
import com.lyc.Father1;
//final 定义的类不能被继承
//public class Son1 extends Father1 {
//}