关键字final和static

一、final 的概念

 继承的出现提高了代码的复用性,并方便开发。但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写。

可是当子类继承了这些特殊类之后,就可以对其中的方法重写,那怎么解决呢?

  要解决上述这些问题,需要一个关键字final,final的意思为最终,不可变。Final是个修饰符,它可以用来修饰类,类的成员,以及局部变量。

二、final 的特点

final修类类不可以被继承,但是可以继承其他类

 final public class A {
	 public void show(){
		 System.out.println("A类show");
	 }
    public static void main(String[] args) {
		new A();
	}
}


public class B extends A{

}//编译时会报错


final 修饰的方法不可以被覆盖

  public class A {
	final  public void show(){
		 System.out.println("A类show");
	 }
    public static void main(String[] args) {
		new A();
	}
}

public class B extends A{
  public void show(){
	  System.out.println("Bshow");
  }
}//编译报错


final 修饰的变量称之为常量,这些变量只能赋值一次 

  public class A {
	  final int a=10;
      a=12;//编译时报错
	  
	  
	final  public void show(){
		 System.out.println("A类show");
	 }
    public static void main(String[] args) {
		new A();
	}
}


final修饰引用类型的变量为对象地址值,地址值不能更改,但是地址内的对象属性值可以修改的。修饰成员变量,需要在创建对像前赋值

  public class A {
	 public  int a=10;
	  
    public static void main(String[] args) {
		final A test = new A();
		test = new A();//报错,引用变量地址值不能更改
		test.a=8;//值能更改
	}
}


三、static的概念


当在定义类的时候,类中都会有相应的属性和方法。而属性和方法都是通过创建本类对象调用的。当在调用对象的某个方法时,这个方法没有访问到对象的特有数据时,方法创建这个对象有些多余。可是不创建对象,方法有调用不了,这时就会想那么我们能不能不创建对象,就可以调用方法呢?用static修饰的方法可以直接通过类调用,不用创建对象。

四、static的特点

被static 修饰的成员变量属于类,不属于这个类的某个对象(也就是说,多个对象在访问或修改static的成员变量时,其中一个对将static 成员变量进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享一个static成员变量)

public class A {
	 public static String aa;
	 public static void show(){
		 System.out.println("你好");
	 }
    public static void main(String[] args) {
	  A.show();//static修饰的方法通过类名直接调用,结果为你好。
	}
}


  public class A {
	 public static String aa;
	  
    public static void main(String[] args) {
	  A a1 = new A();
	  A a2 = new A();
	  A.aa="hello";//被static修饰的成员变量可以通过类名直接调用,并建议如此
	  System.out.println(a1.aa);
	  System.out.println(a2.aa);
	}
}
例子中通过类直接给aa 静态变量赋值,当有对象调用aa 变量是值都为hello,用对象a1或a2为aa 赋值结果也同样是一样的,因为他们共享一个成员变量。
 


Static注意事项
静态内容优先于对象存在,只能访问静态,不能使用this/super,静态修饰的内容存于静态区。

静态有很多好处,但同时也有弊端,静态的生命周期较长。因为静态随着类的加载而加载,随着类的消失而消失。(浪费内存)
static 修饰到底什么时候使用,应用场景根据具体事物,具体分析问题,定义事物的时候,多个事物之间是否有共性的数据,请你将共性的数据定义为静态的成员变量



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值