Java2精要_java知识精要(一)
一、java數組 (瘋狂java講義 第4.5 ~ 4.6章節)
1) 聲明形式:
type[] arrayName; 推薦方式
type arrayName[];
2) 初始化:
方式一:
type[] arrayName;
arrayName = new type[] {element1, element2, element3, ...}
方式二:
type[] arrayName = {element1, element2, element3, ...}
方式三:報錯
type[] arrayName;
arrayName = {element1, element2, element3, ...}
方式四:
type[] arrayName = new type[length];
說明:
方式四中,系統為數組元素分配初始值,如byte,int long - > 0, float,double -> 0.0, boolean -> false, 引用類型 -> null。
**特別注意,方式四創建的數組,如果是引用類型,初始值為null,[參考這道題](https://leetcode.com/submissions/detail/282378308/)**
不要在進行數組初始化時,即指定數組長度,又為每個元素分配初始值。
數組長度是數組的屬性,arrayName.length,即可訪問。
foreach循環方法:
for ( type var : array | collection ) {
...
}
注:這種方法中var只是原集合中的一個副本,對var進行修改,不會改變原集合的內容。
3) 多維數組
type[][] arrName = new type[length][]; // 可以僅指定高維
type[][] arrName = new type[length1][length2];
String[][] str1 = new String[][] {new String[3], new String[] {"hello"}} // 可見低維長度可以不等
4) 操作數組工具類Arrays
binarySearch, copyOf, sort, toString等 (補充用例)
可以用[Contains Duplicate](https://leetcode-cn.com/problems/contains-duplicate/)來練習各種排序算法
二、String, char
java中,char占16位
1. String -> char
String.charAt(idx) 返回char
String.toCharArray() 返回char[]
2. char - > String
String s = String.valueOf('c')
String s = String.valueOf(new char[]{'c'})
String s = new String(new char[]{'c'})
String s = new String(char[] s, int offset, int len);
三、面向對象上 (瘋狂java講義 第5章)
1. java參數傳遞僅有值傳遞一種方式
2. 形參長度可變的方法:
void test(int a, String... books){
for(String t : books){...}
}
test(5, "book1", "book2")
變長形參被作為數組參數
3. override v.s. overload
override: 子類重寫父類方法,簽名一致
overload: 同一個類中,同名不同參的方法(返回值不能作為區分)
https://www.runoob.com/java/java-override-overload.html
4. 成員(屬性、方法)訪問權限
default:同一個包中任意類訪問
protected: 同一個包中任意類訪問 或 其他包中子類訪問
java文件名和class名可以不一樣,當class是非public的時候
5. 成員初始化順序
因素:靜態成員/初始化塊、普通成員/初始化塊、構造函數、父類子類、分配對象(容易被忽略)
https://www.zhihu.com/question/49196023
http://jm.taobao.org/2010/07/21/331/
需注意的是:為對象分配內存,而后會初始化為默認值(int->0, boolean->false, ref -> null...)
初始化塊、構造函數都是在一個內部的 函數中,可以在代碼中構造異常來查看,另外,調用其他構造器時,必須放在構造函數中的第一行
static code block ->
方法重載overwrite為啥不用返回值作為特征呢?如果你調用的時候忽略返回值,那怎么區分
6. 調用父類構造器
super顯示調用父類構造器時,必須放在子類構造器的第一行this也有這個要求。
如果子類構造器中調用this(...),即其他構造器,則會在其他構造器中調用父類構造器。
如果子類中無super 和 this,則會隱式調用無參構造器。如果此時父類沒有無參構造器時,會報錯。
7. static
不能在static方法中調用非static方法,反之可以:static方法在第一次使用的時候已經加載,此時非static方法可能未加載起來
8. 初始化
void func() {
int c;
c ++; // 報錯
String s;
System.out.println(ss); //報錯
}
9. leetcode [combination sum](https://leetcode.com/problems/combination-sum/description/)
class Solution {
void helper(int[] candi, List> r, List list, int tgt, int sum, int idx){
if( sum == tgt ){
// r.add(list); 將當前對象加入,會有問題
r.add(new ArrayList(list));
return;
}
if( sum > tgt ) return;
for(int i = idx; i < candi.length; i ++){
if(candi[i] > tgt) return;
list.add(candi[i]);
helper(candi, r, list, tgt, sum + candi[i], i);
list.remove(list.size()-1);
}
}
public List> combinationSum(int[] candidates, int target) {
List> r = new ArrayList>();
if( candidates.length == 0 ) return r;
Arrays.sort(candidates);
helper(candidates, r, new ArrayList(), target, 0, 0);
return r;
}
}
四、面向對象下 (瘋狂java講義 第6章)
1. 基本數據類型包裝類
自動裝箱拆箱前:
裝箱: new WrapperClass(primitive)
拆箱: WrapperInstance.xxxValue()
基本數據類型 -> 字符串:String.valueOf()
字符串 -> 基本數據類型:Integer.parseInt()
2. 類的組成
類包括屬性、方法、初始化代碼塊、構造器、內部類、枚舉類等。
靜態成員不能訪問實例成員。
單例對象多種方法
3. final
final修飾變量
無論是類成員屬性,還是局部變量,都不能重新賦值。
如果是引用類型,僅能確保引用指向同一對象,對象的內容依然可變。
final修飾方法
不能被override
final修飾類
不可有子類
4. abstract
一個類有抽象方法(a. 直接定義了抽象方法; b. 繼承了抽象父類的抽象方法未實現;c. 接口的抽象方法未實現?),則必須被標識為抽象類。
不包含抽象方法的類,也可以標識成抽象方法。
抽象類的作用?模板模式意義大于實際意義。
5. interface
接口修飾符可以是public或default
接口里可包含常量、抽象實例方法、內部類/接口、枚舉類 (新版本可以有普通函數了),他們都是public訪問權限,即使省略
接口里的屬性默認采用public static final,接口里的方法默認采用public abstract,接口里的內部類和枚舉類默認采用public static。
6. 內部類
是封裝的強化,僅在外部類中使用,不會在其他地方使用,那么放到外部類里面。
成員內部類、局部內部類、
[匿名內部類](https://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html)
7. 枚舉類 略
(完結)
8. gc
引用計數的方式存在循環引用的問題,為此采用檢測存活對象的方式,從棧或靜態存儲區開始檢查,能被訪問到的對象就是存活的,否則,可以被清除掉。
五、位操作
java中沒有無符號數,不過提供了>>>無符號右移操作符,注意無符號右移是把數字當作無符號數來移位的
位操作參考
移位操作練習
如下代碼,key值是啥?
class BitExample{
public static void main(String[] args){
int x = 1;
int y = 1;
long key = x << 32 | y;
System.out.println("key:" + key);
}
}
總結
以上是生活随笔為你收集整理的Java2精要_java知识精要(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql唯一索引弊端_MySQL 关于
- 下一篇: java向有序数组里插数_Java向有序