1. 程式人生 > 其它 >ROS2學習之旅(16)——建立自定義ROS2 msg和srv檔案

ROS2學習之旅(16)——建立自定義ROS2 msg和srv檔案

1、final資料

在Java中,用來告知一塊資料時恆定不變的:

#一個永遠不會改變的編譯時常量

#一個在執行時被初始化的值,且不希望被改變

編譯時常量:在編譯時執行計算式,減輕了一些執行時的負擔,這類常量必須時基本資料型別,且需要用final修飾,在這個常量進行定義的時候,必須進行賦值。

修飾變數

# 用final關鍵字修飾的變數,只能進行一次賦值操作,並且生存期內不可以改變他的值。final修飾的變數可以先宣告,後賦值。

#final修飾基本型別時,起到常量的作用,基本型別的值不可變。

# final修飾物件引用的時候,使引用恆定不變。一旦引用被初始化指向一個物件,就無法再把它改為指向另一個物件。但是物件自身可以修改。

#一個既是static又是final的域只佔據一段不能改變的儲存空間

#當final作用於類的成員變數時,成員變數必須再定義時或者構造器中進行初始化。

#Java允許生成空白final,所謂空白final是指被宣告為final但是並沒有被初始化,但是再使用之前必須確保初始化。

import java.util.Arrays;
import java.util.Random;
class Value{
    int i;
    public Value(int i){
        this.i = i;
    }
}
public class FinalData {
    private
static Random rand = new Random(40); private String id; public FinalData(String id){ this.id = id; } private final int ValueOne = 9; private static final int VALUE_TWO = 99; public static final int VALUE_THREE = 39; private final int i1 = rand.nextInt(20); static
final int i2 = rand.nextInt(20); private Value v1 = new Value(11); private final Value v2 = new Value(22); private static final Value V3 = new Value(33); private final int[] a = {1,2,3,4,5}; @Override public String toString() { return "FinalData{" + "id='" + id + '\'' + ", ValueOne=" + ValueOne + ", i1=" + i1 + ", v1=" + v1 + ", v2=" + v2 + ", a=" + Arrays.toString(a) + '}'; } public static void main(String[] args) { FinalData fd1 = new FinalData("fd1"); //fd1.id; //fd1.ValueOne++; //fd1.v2.i; System.out.println(fd1); } }

2.final修飾方法引數

編寫方法時,可以在引數面前新增final關鍵字,他表示在整個方法中,不能改變引數的值。也就是說不能改變引數的值,但是可以改變引用型別引數的物件的值。同時,即使沒有final的修飾,引數的改變也不會影響到方法外的變數。

class Test{
   public int test(final int i){
       return i + 1;
   }
}

//僅僅可以讀取i,不能改變

3.final修飾方法

final關鍵字修飾方法時,表示該方法不可以被重寫。類中所有的private方法都隱式的指定為是final的,由於無法在類外使用private方法,所以也無法覆蓋他。

4.final修飾類

final修飾的類無法被繼承。且類中所有的成員方法都會被隱式的定義為final

5.final的優點

5.1final關鍵字提高了效能。JVM和JAVA應用都會快取final變數

5.2final變數可以安全的在多執行緒的環境下進行共享,而不需要有額外的同步開銷

5.3在使用匿名內部類的時候所有變數都是final變數

static和final區別

1.static修飾的欄位在類載入過程中的準備階段被初始化為0或者null,之後再初始化階段才會被賦予程式碼中設定。

2.final修飾的欄位再執行時被初始化,一旦賦值,便不能修改。

詳細理解可以看我static的部落格。