分享記錄(三)

1.進程和線程的區(qū)別

進程是資源分配的最小單位, 程序執(zhí)行時的一個實例.
線程是應用的最小的單位. 是程序執(zhí)行的最小單位.
一個應用可以有一個或兩進程,
同一進程下的線程共享全局變量、靜態(tài)變量等數(shù)據(jù)

2.序列化Serializable 和Parcelable 的區(qū)別

(1).Serializable

Java自帶 將一個對象轉換成可存儲可傳輸?shù)臓顟B(tài),

public class Person implements Serializable{
    private String name;
    private int age;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

(2)Parcelable

android 自帶 和Serializable有相同效果,將一個完整的對象進行分解.
分解后的每一部分都是Intent所支持的數(shù)據(jù)類型,這樣也就實現(xiàn)傳遞對象的功能了

public class Data implements Parcelable{
    private String color;
    private int size;
    protected Data(Parcel in) {
        color = in.readString();
        size = in.readInt();
    }
    public static final Creator<Data> CREATOR = new Creator<Data>() {
        @Override
        public Data createFromParcel(Parcel in) {
            return new Data(in);
        }
        @Override
        public Data[] newArray(int size) {
            return new Data[size];
        }
    };
    @Override
    public int describeContents() {
        return 0;
    }
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(color);
        dest.writeInt(size);
    }
}

系統(tǒng)已經(jīng)幫我們做了很多事情,我們只需要做的很簡單,寫自己需要的構造方法,變量的get和set


blic class Data implements Parcelable{
    private String color;
    private int size;

    //get和set
    //個人自己添加
    public Data() {
    }
    //個人自己添加
    public Data(String color, int size) {
        this.color = color;
        this.size = size;
    }
    
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public int getSize() {
        return size;
    }
    public void setSize(int size) {
        this.size = size;
    }
    // 系統(tǒng)自動添加,給createFromParcel里面用
    protected Data(Parcel in) {
        color = in.readString();
        size = in.readInt();
    }
    public static final Creator<Data> CREATOR = new Creator<Data>() {
        /**
         *
         * @param in
         * @return
         * createFromParcel()方法中我們要去讀取剛才寫出的name和age字段,
         * 并創(chuàng)建一個Person對象進行返回,其中color和size都是調用Parcel的readXxx()方法讀取到的,
         * 注意這里讀取的順序一定要和剛才寫出的順序完全相同。
         * 讀取的工作我們利用一個構造函數(shù)幫我們完成了
         */
        @Override
        public Data createFromParcel(Parcel in) {
            return new Data(in); // 在構造函數(shù)里面完成了 讀取 的工作
        }
        //供反序列化本類數(shù)組時調用的
        @Override
        public Data[] newArray(int size) {
            return new Data[size];
        }
    };
    
    @Override
    public int describeContents() {
        return 0;  // 內容接口描述,默認返回0即可。
    }
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(color);  // 寫出 color
        dest.writeInt(size);  // 寫出 size
    }
}

使用時機
1.在使用內存的時候,Parcelable比Serializable性能高,所以推薦使用Parcelable。
2.Serializable在序列化的時候會產(chǎn)生大量的臨時變量,從而引起頻繁的GC。
3.如果要存儲到磁盤.需要使用Serializable,原因,Parcelable不能很好的保證數(shù)據(jù)的持續(xù)性.

3.談談對kotlin的理解

-1.可以無縫對接java,互相可以調用
-2.不用聲明類型
-3.空安全
-4.數(shù)據(jù)對象實體類的創(chuàng)建,不再需要手動創(chuàng)建set或get方法
-5. 控件無需聲明,直接通過控件id調用.

4.閉包和局部內部類的區(qū)別

-1. 閉包:方法中的局部變量會在執(zhí)行結束后就會被釋放,但是內部類訪問此變量就形成了閉包

 public class method(){
        int i=30;
        //局部內部類將輸出這個局部變量
        class innerClass{
            public void getInt(){
                System.out.println(i);
            }
        } 
    }

-1.成員內部類:
 (1)訪問 外部類所以靜態(tài),非靜態(tài)成員

public class Person {
    private static int hairLength = 5;
    private int manAge = 18;

    public class Man {
        public int setHair() {
            return hairLength;
        }

        public int setAge() {
            return manAge;
        }
    }
}

(2)被訪問

    Person person = new Person();
        Person.Man man = person.new Man();
        Log.i("log", "" + man.setAge());
        Log.i("log", "" + man.setHair());

-2. 靜態(tài)內部類:
(1)訪問:可訪問外部類的靜態(tài) 成員, 不可非靜態(tài)成員

public class Person {
    private static int hairLength = 5;
    private int manAge = 18;
    
    public static class Woman{
        public int setHair() {
            return hairLength;
        }
    }}
}

(2)被訪問 訪問非靜態(tài)類,需要創(chuàng)建一個外部類實例. 訪問靜態(tài)n類,使用內部類類名訪問內部類的靜態(tài)成員。

      Person.Woman woman  = new Person.Woman();
            woman.setHair();

-3. 局部內部類:
(1)訪問 外部類所以靜態(tài),非靜態(tài)成員

public class Person {
  private static int hairLength = 5;
  private int manAge = 18;

  public void getChild(){
      class child{
          public void name(){
              Log.i("log",""+manAge);
              Log.i("log",""+hairLength);
          }
      }
      new child().name();
  }
}

(2)調用

     Person person = new Person();
        person.getChild();

-4. 匿名內部類:

public interface Person {
//    private static int hairLength = 5;
//    private int manAge = 18;
    
        public void run();
}
 Person person = new Person(){
            @Override
            public void run() {
            }
        };

下一節(jié)[集合]

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容