java中static与final关键字归纳总结

Posted You295

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中static与final关键字归纳总结相关的知识,希望对你有一定的参考价值。

1.static关键字

1)static表示“全局”或者“静态”的意思,用它来修饰属性变量和成员方法,但是在java语言中没有全局变量的概念,也可以编写static代码块来优化程序性能。
2)为某特定的数据类型或对象分配单一的存储空间,与创建对象的个数无关。
3)被static关键字修饰的不需要创建对象去调用,直接根据类名就可以去访问。

1.1.static修饰成员方法

static方法也被称为静态方法,由于静态方法不依赖于任何的对象就可以直接被访问,故对于静态方法来说是没有this的,因为他是不依附于任何的对象,连对象都没有,那肯定就没有this了,,在静态方法中不能去访问类的非静态成员变量和非静态方法,因为非静态成员和非静态方法都是必须要依赖于对象才可以被调用的;但反之是可以的,即在非静态方法中是可以去调用访问静态成员变量和静态成员方法的。
在这里插入图片描述

1.2.static修饰属性变量

java中没有全局的概念,但是可以通过static关键字来达到全局的效果。两种类型的变量为:用static关键字修饰的静态变量和没有用static关键字修饰的实例变量。 (1) 静态变量属于类,在内存中只有一个副本(所有的实例都指向同一个内存地址)。只要静态变量所在的类被加载,这个静态类就会被分配空间,因此就可以去使用。(2)实例变量属于对象,只有对象被创建后,实例变量才会被分配空间,才可以被使用,他在内存中存在多个副本,只能用“对象”或者“静态变量”的方式来引用。
静态变量只有一个,被类所拥有,所有的对象都共享这个静态变量,然而实例变量与对象有关。
1.无static修饰属性变量时:
在这里插入图片描述
2.有static修饰属性变量时:
在这里插入图片描述
由以上代码可知:在给name加上static修饰后,Car1对象就不再拥有name的属性了,name属性则会统一交给Car1对象去管理,即多个Car1对象只对应出一个name属性。

1.1.static修饰代码块

static代码块也成为静态代码块,它与static修饰的属性变量是平行关系,在类中可以存在多个static代码块,在类初始化的时候,jvm会根据静态代码块的顺序去依次执行,并且只会执行一次。
在这里插入图片描述

2.Final关键字

Final在java中是一个保留的关键字,可以声明成员变量,方法,类以及本地变量。一旦将引用用Final去定义后,就不能在改变这个引用了(只有一次机会去初始化它),如果再次初始化则编译器就会报错。

2.1Final修饰属性

只能在对象初始化的时候给其赋值,对象创建后将不再修改属性

public class Basketball {

	// private final String color = "red"; //可直接定义

//	  private  final String color;
//	  {
//		  color = "red";   //用代码块进行初始化
//	  }

//	private final String color;
//	
//	public Basketball() {    //用无参构造方法进行初始化
//	this.color = "red";
//}

	private final String color;

	public Basketball(String color) { // 有参构造方法进行初始化
		this.color = color;
	}

}

2.2Final修饰类

用Final修饰的类叫做Final类,它不能被继承,,,例如 String,Interger,Scanner…的包装类都使用了Final定义,则不能被继承,更加不能去修改里面的内容
在这里插入图片描述
在这里插入图片描述

2.3Final修饰方法

FInal修饰方法的时候,方法不能被覆盖,不能被重写
在这里插入图片描述
在这里插入图片描述
但是对于private修饰的方法,它只能在当前的类中见到,无法在子类中访问,,当在子类中定义一个与父类private方法有一样的方法名,相同的参数列表,相同的返回值,这不属于方法的重写,只能说明在子类中重新定义了一个新的方法。如果用Final修饰一个private方法,则在子类中还是可以定义与父类一样的方法
在这里插入图片描述
在这里插入图片描述

2.4Final修饰基本类型

变量为只读,不能改写符号常量
在这里插入图片描述
在这里插入图片描述

2.5Final修饰引用类型

绑定的对象不能改变,也不能断开绑定(null),但是可以改变对象的内容

package com.dyitt;

public class Basketball {
	private String name; // 品牌
	private int shu; // 数量
	private String color; // 颜色

	public Basketball() { // 无参构造方法

	}

	public Basketball(String name, int shu, String color) { // 有参构造方法
		this.name = name;
		this.shu = shu;
		this.color = color;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getShu() {
		return shu;
	}

	public void setShu(int shu) {
		this.shu = shu;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	@Override // 打印
	public String toString() {
		return "Basketball [name=" + name + ", shu=" + shu + ", color=" + color + "]";
	}

}
package com.dyitt;

import static org.junit.Assert.*;

import org.junit.Test;

public class BasketballTest {

	public static void main(String[] args) {
		final Basketball bask = new Basketball("李宁", 5, "白色");
		// bask=new Basketball("耐克", 3, "黑色"); //(此处会报错)
		// final定义的引用数据类型,绑定的对象不能被改变,但是可以改变内容

		bask.setColor("红色"); // 改变其颜色
		bask.setName("耐克"); // 改变品牌
		bask.setShu(8); // 改变数量
		System.out.println(bask.getColor() + "\\t" + bask.getName() + "\\t" + bask.getShu());
	}
	// 输出>>>红色 耐克 8
}

以上是关于java中static与final关键字归纳总结的主要内容,如果未能解决你的问题,请参考以下文章

Java_基础java中static与final关键字的区别

Java之static与final关键字

final static

详解Java中static关键字和final关键字的功能

面向对象之static与final关键字

Static与Final