Java基础(二)----------Java中Static修饰符和final关键字

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会对方法、变量、和类进行优化。

扫描二维码关注公众号,回复: 4903917 查看本文章

 

 

猜你喜欢

转载自blog.csdn.net/qq_36004677/article/details/86358578