1. 程式人生 > >牛客網刷題錯題記錄

牛客網刷題錯題記錄

目錄

Java

5.互斥鎖

Java

1.靜態內部類

靜態內部類可以訪問外圍類的靜態資料,包括私有資料,但不能訪問非靜態資料;

非靜態內部類可以直接訪問外圍類的資料,包括私有資料

package test;

public class test {//外部類
	int a = 1;
	static int b = 9;
	private String str = "test";
	private static int c = 33;
	
	class innerClass {//非靜態內部類
		void method(){//可直接訪問外部類資料,包括靜態資料,私有資料
			System.out.println(a);
			System.out.println(b);
			System.out.println(str);
			System.out.println(c);
		}
	}
	
	static class staticInnerClass {//靜態內部類
		void method(){
			System.out.println(a);//default訪問不了
			System.out.println(b);//可以訪問靜態資料
			System.out.println(c);//也可以訪問私有的靜態資料
			System.out.println(str);//但是非靜態的訪問不了
		}
	}
}

2.關於String,StringBuilder以及StringBuffer

  • 對String物件的任何改變都不影響到原物件,相關的任何change操作都會生成新的物件
    • java中的字串儲存在字串常量區,不會改變,發生改變是會新建立一個物件
  • StringBuffer是執行緒安全的
  • StringBuilder是執行緒不安全的
  • 可以修改StringBuffer和StringBuilder的內容
    • StringBuilder和StringBuffer底層都是以字元陣列存放的,可以修改內容

3.java語言特性

  • java致力於檢查程式在編譯和執行時的錯誤
  • java能執行虛擬機器實現跨平臺
  • java自己操作記憶體減少了記憶體出錯的可能性
  • java還實現了真陣列,避免了覆蓋資料的可能性
    • ps:記憶體連續就是真陣列,記憶體不連續就是假陣列

4.非抽象類實現介面的問題

  • 非抽象類實現介面後,必須實現介面中的所有抽象方法,除了abstract外,方法頭不一定一致
    • 方法名相同,引數型別相同
    • 子類返回型別小於等於父類方法返回型別
    • 子類丟擲異常小於等於父類方法丟擲異常
    • 子類訪問許可權大於等於父類方法訪問許可權

5.互斥鎖

  • synchronized關鍵字是同步程式碼塊關鍵字,對物件加互斥鎖

6. Socket 通訊程式設計

  • 服務端通過new ServerSocket()建立
  • 伺服器端通過TCP連線物件呼叫accept()方法建立通訊的Socket物件
  • 客戶端通過new Socket()方法建立通訊的Socket物件

Socket套接字 

就是源Ip地址,目標IP地址,源埠號和目標埠號的組合

伺服器端:ServerSocket提供的例項

ServerSocket server= new ServerSocket(埠號)

客戶端:Socket提供的例項

Socket soc=new Socket(ip地址,埠號)

7.類的初始化順序

  • 初始化父類中的靜態成員變數和靜態程式碼塊
  • 初始化子類中的靜態成員變數和靜態程式碼塊
  • 初始化父類中的普通成員變數和程式碼塊,在執行父類中的構造方法
  • 初始化子類中的普通成員變數和程式碼塊,在執行子類中的構造方法

8.變數的儲存區

class A {
	private String a = "aa";//類的成員變數
	public boolean methodB() {
	    String b = "bb";//區域性變數
	    final String c = "cc";//區域性變數
		return false;
	}
}
  • 類中的成員變數,存放在堆區
    • 堆區:只存放類物件,執行緒共享;
  • 方法中的區域性變數,存放在棧區
    • 棧區:存放方法區域性變數,基本型別變數區、執行環境上下文、操作指令區,執行緒不共享;
    • 方法區:又叫靜態儲存區,存放class檔案和靜態資料,執行緒共享;

9.jvm執行緒共享問題

  • 程式計數器是一個比較小的記憶體區域,用於指示當前執行緒所執行的位元組碼執行 到了第幾行,是執行緒隔離的
  • 原則上講,所有的物件都是在堆區上分配記憶體,是執行緒之間共享的
  • Java方法執行記憶體模型,用於儲存區域性變數,運算元棧,動態連結,方法出口等資訊,是執行緒隔離的
  • 方法區:
    • 1.又叫靜態區,跟堆一樣,被所有的執行緒共享。方法區包含所有的class和static變數。
    • 2.方法區中包含的都是在整個程式中永遠唯一的元素,如class,static變數。

10.