18、final修饰符
2021-03-31 本文已影响0人
爱学习的代代
说明:
final修饰符修饰对象 | 说明 |
---|---|
类 | 该类不可以被继承 |
成员变量 | 仅可被赋值一次 |
静态变量 | 仅可被赋值一次,也可以在static方法块中进行赋值 |
引用对象 | 引用对象不可以再指向其他,引用对象的一些属性是可以修改的。 |
方法 | 该方法不可以被继承的子类覆盖 |
形参 | 仅可被赋值一次,在方法被调用的时候 |
局部变量 | 仅可被赋值一次 |
下面重点演示一下 引用对象被修饰的部分:
package day09;
public class PhoneV1 {
private double screenSize;
private double cpuHZ;
private double memoryG;
private double storageG;
private String brand;
private String os;
final public MerchandiseWithConstructor merchandise;
public PhoneV1(double screenSize, double cpuHZ, double memoryG, double storageG, String brand, String os, MerchandiseWithConstructor merchandise) {
this.screenSize = screenSize;
this.cpuHZ = cpuHZ;
this.memoryG = memoryG;
this.storageG = storageG;
this.brand = brand;
this.os = os;
this.merchandise = merchandise;
}
public void describe() {
System.out.println("当前商品的名字是:" + this.merchandise.getName() + " 库存个数是:" + this.merchandise.getCount() + " 进价是:" + this.merchandise.getPurchasingRrice() + "元 " + "售价是:" + this.merchandise.getSoldPrice() + "元 " + "销售一个的毛利润是: " + (this.merchandise.getSoldPrice() - this.merchandise.getPurchasingRrice()));
System.out.println("手机配置信息如下:\n屏幕大小:" + this.screenSize + "英寸 \nCPU主频:" + this.cpuHZ + "GHz \n内存大小:" + this.memoryG + "G \n存储空间:" + storageG + "G \n品牌:" + this.brand + " \n操作系统:" + os);
}
public double getScreenSize() {
return screenSize;
}
public void setScreenSize(double screenSize) {
this.screenSize = screenSize;
}
public double getCpuHZ() {
return cpuHZ;
}
public void setCpuHZ(double cpuHZ) {
this.cpuHZ = cpuHZ;
}
public double getMemoryG() {
return memoryG;
}
public void setMemoryG(double memoryG) {
this.memoryG = memoryG;
}
public double getStorageG() {
return storageG;
}
public void setStorageG(double storageG) {
this.storageG = storageG;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getOs() {
return os;
}
public void setOs(String os) {
this.os = os;
}
public MerchandiseWithConstructor getMerchandise() {
return merchandise;
}
}
package day09;
public class FinalTest {
public static void main(String[] args) {
MerchandiseWithConstructor merchandise = new MerchandiseWithConstructor(1,"小米9",100,3999,3599);
PhoneV1 v1 = new PhoneV1(6.0,3.5,8.0,128.0,"小米", "安卓", merchandise);
// 修改merchandise的成员变量
v1.merchandise.setCount(1000);
v1.describe();
MerchandiseWithConstructor m1 = new MerchandiseWithConstructor(2,"华为P30",10,4999,3999);
// 不可再次赋值
// v1.merchandise = m1;
}
}
执行结果:
image.png
其中 merchandise
引用对象被声明成final。
- merchandise 没有set方法。因为其在类的构造方法中被初始化一次了,不可再次赋值
-
可以通过.方法获取到merchandise的引用修改其里面的内容
3.merchandise的引用 不可以再指向其他对象。见下图
image.png