1.基本結構:
public static void main(String[] args) {
權限修飾符、靜態修飾符 返回值類型 方法名 參數
}
2.fload類必須加上F、f否則編譯器會當成double
3.final常量,可以先定義在賦值,但只能賦值一次
4.static
static方法:不依賴于任何對象就可以訪問,故沒有this操作,靜態方法中不可訪問非靜態方法和變量,反之可以。
補充:當然也可以將某個類的實例對象,然后通過該實例對象調用非靜態方法
static變量:不可修飾局部變量,同樣不需要依托于對象(與C語言不同,static不可限制權限),兩個對象對同一個靜態成員變量操作,將會操作內存中的同一個地址
5.String:
字符串常用方法:indexOf()該字符串第一次出現的位置
lastIndexOf()該字符串第一次出現的位置
charAt()指定位置的字符
subString(1,3)截取字符串
trim()去除前導空格和尾部空格
replace(”A”,”B")替換字符串
startsWith()endsWith()是否是這個前綴或者后綴
compareTo()按照字典順序比較兩個字符串,基于Unicode值
例:
String str1 = "test11";
String str2 = "test22";
str2.compareTo(str1)返回“1”,相反“-1”,相同則“0”
split(”,”,3)按照指定字符和次數限制分割字符串
equals()對比兩個對象(必須是地址和內容全部相同)
例:String s1 = new String("jianghong");
String s3 = new String("jianghong");
String s2 = "jianghong";
String s4 = "jianghong";
那么s2=s4,s1!=s3.解釋:new 出來的對象會調用String的構造函數,同時在堆里和對象池里各創建一個對象。但直接賦值會首先在對象池查找是否有相同的字符串,有的話則將地址指向這個字符。
例:
String a = "1";
String b = "2";
String c = "12";
String d = "1"+"2";
String e = a+b;
如果 final a final b 那么c和e‘是否相等
c = d ,c != e ,c=e'
解釋:取決于在編譯期間是否能知道它實際的內容。
6.數組:java.util.Arrays
排序:Arrays.sort(arr)
搜索:Arrays.binarySearch(arr,0,2,5);
冒泡排序、選擇排序、反轉排序(有序)
7.類
extends 繼承與某個類
class SubClass extends SuperClass{
//構造方法調用父類構造方法
public Subclass(String name){
super (name)
}
}
implement 實現某個接口(interface支持被繼承,類中支持多接口實現)
//定義了一個接口Flyer
interface Flyer
{
void fly ();
int ID = 1;
}
public class Animal extends Person implements Flyer,Runner{
@Override
public void fly() {
}
int j = Flyer.ID;
}
構造方法的調用順序為先頂級再父類再自身
8.權限修飾符 java
| 包位置 |private|protected|public
| -------------|-------------| -----|
| 本類 |可見 | 不可見| 不可見 |
| 同包其他類或子類 |不可見 | 可見 | 可見 |
| 其它包的類或者子類 | 不可見 | 不可見 | 可見 |
類的成員不寫訪問修飾時默認為default。默認對于同一個包中的其他類相當于公開(public),對于不是同一個包中的其他類相當于私有(private)。受保護(protected)對子類相當于公開,對不是同一包中的沒有父子關系的類相當于私有
9.java內存回收(對象的銷毀)當超出作用范圍或者被賦為null的時候。不足之處為只能回收由new創建的對象,那么就要寫方法finalize(),調用這個方法,手動將對象銷毀(null)。但是當Java內存爆炸用完的時候
10.關于計算機編碼基礎
原碼:
如果機器字長為n,那么一個數的原碼就是用一個n位的二進制數,其中最高位為符號位:正數為0,負數為1。剩下的n-1位表示概數的絕對值。
例如: X=+101011 , [X]原= 00101011 X=-101011 , [X]原= 10101011
位數不夠的用0補全。
PS:正數的原、反、補碼都一樣:0的原碼跟反碼都有兩個,因為這里0被分為+0和-0。
反碼:
反碼就是在原碼的基礎上,符號位不變其他位按位取反(就是0變1,1變0)就可以了。
例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100
補碼:
補碼也非常的簡單就是在反碼的基礎上按照正常的加法運算加1。
例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]補=11010101
PS:0的補碼是唯一的,如果機器字長為8那么[0]補=00000000。
移碼:
移碼最簡單了,不管正負數,只要將其補碼的符號位取反即可。
例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]補=11010101,[X]移=01010101
11.對象類型轉型
向上轉型:SuperClass super = new SubClass();即,將子類的對象賦值給父類。
例:假設SuperClass有個方法test(SuperClass class),這樣如果根據子類對象的不同在父類的方法中,進行不同的處理,這就是多態的思想。
向下轉型:將父類對象賦值給子類,可能會出現對象成員的錯誤,需要使用顯示類型轉換(SuperClass)
instanceof:判斷某個對象是否為某一個類的一個實例
12.抽象類:使用abstract修飾,抽象類不能擁有實例化的對象,但可以通過繼承和多態實現方法。抽象方法本身沒有方法體,沒有實際意義
13.java 中使用import可以指定某個包中的所有類,如:import com.test.jianghong.*,import不僅能導入類,也可以導入靜態成員,如import:static java.lang.Math.max;
14.集合類 map、list、set
迭代器iterator(),
Collection<String> list =new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
Iterator <String> it = list.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
```
15.I/O輸入輸出
所有輸入流類都是抽象類InoutStream或Reader的子類。所有輸出都是OutputStream或Writer的子類
InputStream是用來處理字節的,不適合處理字符文本(字符采用Unicode編碼,雙字節),而Reader則能處理字符流
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class StandardInputOutput {
public static void main(String args[]) {
String s;
// 創建緩沖區閱讀器從鍵盤逐行讀入數據
InputStreamReader ir = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(ir);
System.out.println("Unix系統: ctrl-d 或 ctrl-c 退出"
+ "\nWindows系統: ctrl-z 退出");
try {
// 讀一行數據,并標準輸出至顯示器
s = in.readLine();
// readLine()方法運行時若發生I/O錯誤,將拋出IOException異常
while (s != null) {
System.out.println("Read: " + s);
s = in.readLine();
}
// 關閉緩沖閱讀器
in.close();
} catch (IOException e) { // Catch any IO exceptions.
e.printStackTrace();
}
}
}
16.class類與java的反射
通過getClass、getMethods等可以返回java對象的描述信息。如果去類名,類的構造方法,類中的成員等
17.Java中的枚舉類enum,該類可定義枚舉常量,也可以自定構造方法定義帶參數的枚舉類型成員
enum Constants2{
Constants_A("test1"),Constants_B("test2");
private String description;
private Constants2(String description){
this.description = description;
};
private String getDescription(){
return description;
}
}
public static void main (String []args ){
for (int i = 0; i <Constants2.values().length ; i++) {
out.println("枚舉成員變量" + Constants2.values()[i]+"輸入" + Constants2.values()[i].getDescription());
}
}
補充:枚舉類也可以實現接口
interface d {
public String getDescription();
}
public enum Constant3 implements d{
Constants_A{
public String getDescription(){
return ("test3");
}
}
}
18.泛型類,使用格式為Class<T>,這個類不規定自身類型,在使用的時候自動轉化為需要的類型
public class Tclass <T>{
private T[] array;
public void SetT(T[] array){
this.array = array;
}
public T[] getT(){
return array;
}
public static void main(String[] args) {
Tclass <String >tClass = new Tclass<String >();
String[] array = {"var1","var2","var3"};
tClass.SetT(array);
for (String a: tClass.getT()
) {
System.out.println("數組泛型類 "+a);
}
//通配符?先不確定類型,在實際使用的時候再確定類型
Tclass<? extends List> a = null;
a = new Tclass<ArrayList>();
a = new Tclass<LinkedList>();
}
}