1.Static静态修饰符
在程序中任何变量或者代码都是在编译时,由系统自动分配内存来存储的,而所谓静态就是指在编译后分配的内存会一直存在,直到程序退出时才会释放内存空间。Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。鉴于他作用的特殊性更推荐用类名访问。
public class StaticTest {
static String name="张三" ;
String sex="男";
String age="20";
public void getAge() {
System.out.println(age);
}
public void getSex() {
System.out.println(StaticTest.name); //在普通成员方法中可以直接访问静态成员
StaticTest.getAdress();
System.out.println(sex); //在普通成员方法中也可以直接访问访问非静态成员
getAge();
}
public static void getAdress() {
System.out.println(StaticTest.name);
}
public static void main(String[] args) {
System.out.println(StaticTest.name); //1.静态方法可以直接调用同类中的静态成员
StaticTest.getAdress();
StaticTest test=new StaticTest(); // 2静态方法只能通过创建对象可以调用非静态成员
test.getSex();
System.out.println(test.sex);
}
}
(1)静态方法可以直接调用静态成员,静态方法只可以通过创建对象的方式调用非静态成员。
(2)普通成员方法可以直接访问同类的非静态变量和静态变量。
2.final终态关键字
(1)final声明的成员变量方法、类以及本地变量不可更改。final变量经常和static关键字一起使用,作为常量,通常常量名要大写。
public class FinalTest {
static final String NAME="张三"; // final变量经常和static关键字一起使用,作为常量,通常常量名要大写
public static void main(String[] args) {
System.out.println(NAME);
}
}
(2)final变量定义的时候可以先声明不赋初始值称为final空白,final空白使用之前必须初始化,一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。
public class FinalTest {
public final String SEX; // final变量定义的时候可以先声明不赋初始值称为final空白,
public FinalTest(String x) { //final空白使用之前必须初始化
SEX=x;
}
public static void main(String[] args) {
FinalTest test=new FinalTest("李四"); // 一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。
System.out.println(test.SEX);
FinalTest test1=new FinalTest("王五");
System.out.println(test1.SEX);
}
}
(3)final方法不能被重写。
public class FinalTest1 {
public final void printName() {
System.out.println("张三");
}
public final void printName2() {
System.out.println("李四");
}
}
public class FinalTest2 extends FinalTest1{
public void printName1() {
System.out.println("张三三");
}
public void printName2() {//final修饰的方法无法被重写
System.out.println("李四四");
}
}
(4)final类不能被继承。final类通常功能是完整的,它们不能被继承。Java中有许多类是final的,譬如String, Interger以及其他包装类。
public final class FinalTest3 {
}
public class FinalTest4 extends FinalTest3{
}
(4)final方法比非final方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定。final关键字提高了性能。JVM和Java的应用都会缓存变量。final变量可以安全的在多线程环境下共享,而不需要额外的同步开销。使用fial关键字,JVM会对方法、变量、和类进行优化。