PHP轉(zhuǎn)JAVA的記錄

Java

數(shù)組
    int[]    ints   = {1, 3, 2, 4, 6, 5};
    String[] stings = new String[10];
    byte[]   bytes  = new byte[]{1, 3, 5};
內(nèi)部類
  • 內(nèi)部類的創(chuàng)建:
    • 內(nèi)部類可以對包內(nèi)其他類隱藏
    • 想實(shí)現(xiàn)一個接口時, 不想新建類文件
  • 內(nèi)部類可以訪問外部類的私有變量
  • 外部實(shí)例化成員內(nèi)部類: 外部類勢力.new 內(nèi)部類()
    Outer.Inner inner = new Outer().new Inner();
    // 或者
    Outer outer1 = new Outer();
    Outer.Inner inner2 = outer1.new Inner();
  • 匿名內(nèi)部類: 是一個繼承了類或?qū)崿F(xiàn)了某個接口的類的對象
    public void hideShow() {
        Comparable<Integer> comparable = new Comparable<Integer>() {
            @Override
            public int compareTo(Integer o) {
                int limit = 10;
                return limit - o;
            }
        };

        System.out.println(comparable.compareTo(3));
        System.out.println(comparable.compareTo(10));
        System.out.println(comparable.compareTo(11));
    }
枚舉
  • 每個枚舉都是通過 Class 在內(nèi)部實(shí)現(xiàn)的, 因此 SMALL("S") 代表實(shí)例化 類 SMALL, 參數(shù) "S"
  • 枚舉跟普通類一樣可以用自己的變量、方法和構(gòu)造函數(shù),構(gòu)造函數(shù)只能使用 private 訪問修飾符,所以外部無法調(diào)用
包裝類
  • 自動拆包, 裝包
String,StringBuilder,StringBuffer
  • StringBuilder和 StringBuffer 之間的最大不同在于 StringBuilder 的方法不是線程安全的(不能同步訪問),但 StringBuilder 具有速度優(yōu)勢
Object
  • equals
  • hashCode
  • toString
集合
  • HashSet
    • (equals 和 hashcode) 內(nèi)容唯一
    • 內(nèi)容無序
  • HashMap
    • key 唯一, value不唯一
    • 根據(jù)鍵的 HashCode 值存儲數(shù)據(jù),具有很快的訪問速度,最多允許一條記錄的鍵為 null,不支持線程同步
    • 內(nèi)容無序
  • ArrayList
io / file / 輸入輸出
  • 不同系統(tǒng)的換行符號不一樣
  • 字符流
  • 字節(jié)流
    • InputStream, FileInputStream, BufferedInputStream


      IO流類圖
序列化
  • serialVersionUID 序列化ID 一個類可以有一個 ,但必須是 static, long, final
  • 不想序列化的屬性使用關(guān)鍵字 transient 修飾
 private transient int grade;
  • 序列化時三種錯誤
    • 無參數(shù)構(gòu)成方法
    • 類中包含未知的數(shù)據(jù)類型
    • 類的串行版本與從流中取出的描述符不一致[serialVersionUID]
  • 父類未實(shí)現(xiàn)Serializable,子類實(shí)現(xiàn)了,序列化子類實(shí)例的時候,父類的屬性是直接被跳過不保存
線程
  • 進(jìn)程 內(nèi)存[RAM]中的任務(wù)應(yīng)用
  • 多線程問題: 由多個線程訪問共享內(nèi)存導(dǎo)致線程題目
  • 屬于搶占式調(diào)度, 新線程,開辟新的??臻g 一個線程,start之后,不能多次start
  • 調(diào)用的兩種方式
    • 實(shí)現(xiàn) Runnable 接口的類 [無返回結(jié)果],調(diào)用Thread.start()
    • 繼承 Thread 類, 重寫 run() 方法
    • 通過 Callable 和 Future 創(chuàng)建線程
      1. 創(chuàng)建 Callable 接口的實(shí)現(xiàn)類,并實(shí)現(xiàn) call() 方法,該 call() 方法將作為線程執(zhí)行體,并且有返回值<T>。
      2. 創(chuàng)建 Callable 實(shí)現(xiàn)類的實(shí)例,使用 FutureTask 類來包裝 Callable 對象,該 FutureTask 對象封裝了該 Callable 對象的 call() 方法的返回值。
      3. 使用 FutureTask 對象作為 Thread 對象的 target 創(chuàng)建并啟動新線程。
      4. 調(diào)用 FutureTask 對象的 get() 方法來獲得子線程執(zhí)行結(jié)束后的返回值
// 實(shí)現(xiàn) Runnable
   Runnable runnable = new Runnable() {
            private int ticket = 20;
            @Override
            public void run() {
                while (ticket > 0) {
                    System.out.println(Thread.currentThread().getName() + " 正在出售: " + ticket);
                    ticket--;
                }
            }
        };

   new Thread(runnable, "窗口1").start();

// 繼承
public class MyThread extends Thread {
    public MyThread(String name) {
        super(name);
    }

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("當(dāng)前i:" + i);
        }
    }
}

new MyThread().start();
  • 線程同步
    • 同步代碼塊 synchronized(鎖對象) {code} 每次都會判斷 鎖對象
    • 同步方法
      1. 方法名前添加synchronize關(guān)鍵字使用this作為鎖對象
      2. 靜態(tài)方法名前添加synchronize關(guān)鍵字使用本類Class屬性->Class文件對象
      1. 創(chuàng)建Lock對象 ReentrantLock lock = new ReentrantLock()
      2. lock.lock();
      3. lock.unlock();
    • Wait()和notify():如果條件不滿足,則等待。當(dāng)條件滿足時,等待該條件的線程將被喚醒。一般用在synchronized機(jī)制中, Wait()方法調(diào)用了long類型參數(shù),線程進(jìn)入計(jì)時等待狀態(tài)
    • join()方法的主要作用是同步,它可以使得線程之間的并行執(zhí)行變?yōu)榇袌?zhí)行。在A線程中調(diào)用了B線程的join()方法時,表示只有當(dāng)B線程執(zhí)行完畢時,A線程才能繼續(xù)執(zhí)行, 這里的A線程,有可能是主線程
JDBC
  • 所有下表從1開始
  • 注冊驅(qū)動
  • 獲取連接
  • 獲取數(shù)據(jù)庫操作對象
  • 執(zhí)行sql
  • 獲取結(jié)果集
  • 釋放資源
Class.forName("com.mysql.jdbc.Driver");// DriverManager.registerDirver(new com.mysql.jdbc.Driver());
Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/coa_finance_test?useSSL=false", "root", "");
Statement  statement  = connection.createStatement();
ResultSet set = statement.executeQuery("sql");
statement.close();
connection.close();
  • 執(zhí)行sql的三種方式
    • Statement.executeQuery() 返回ResultSet結(jié)果集, 一般執(zhí)行Select 語句
    • Statement.executeUpdate() 返回int類型,影響的行數(shù), 一般執(zhí)行update,delete 語句 如果執(zhí)行Drop table, 返回0
    • Statement.execute() 返回bool類型 true:返回結(jié)果有結(jié)果集, 使用 Statement.getResultSet() 獲取ResultSet結(jié)果集
  • 事務(wù)
    • connection.setAutoCommit(false);取消自動提交
    • connection.commit(); 提交
    • connection.rollback(); 回滾
JDBC連接池
反射
// 示意類
public class Person() { private int age;public Person()}
public class Student extense Person () { private String name; public Student()}

  • classloader
    • SystemClassLoader\PlatformClassLoader\bootClassLoader
    • bootClassLoader 通常為null
  • Class類 描述類文件.class屬性的類
  • 獲取方式
    • Class<?> c = Object.getClass()
    • Class<?> c =Student.class
    • Class<?> c =Class.formName("類名稱")
  • 反射字段
    • Field[] fields = c.getDeclaredFields() // 獲取所有類字段,不包含父類,包含私有字段
    • Field[] fields = c.getFields() // 獲取所有類字段,不包含父類,不包含私有字段
    • Field field = c.getField("類名稱") // 獲取指定字段
    • 如果獲取父類字段,需要調(diào)用 Class<?> cSuper = c.getSuperClass(), 使用父類的反射類
    • 使用 Field.set(object, value)設(shè)置字段時, 父類需要 Field.setAccessible(true)
  • 反射方法與反射字段類似只是Field改為Method
    + Method[] methods = c.getDeclaredMethods()
    + Method[] methods = c.getMethods()
    + Method method = c.getMethod("方法名稱", 參數(shù).class) 因?yàn)閖ava方法重載機(jī)制,所以 參數(shù)類型很重要
    + 使用 method.invoke(object, 參數(shù)...) 調(diào)用方法
  • 構(gòu)造方法 類比 反射方法
  • 獲取注解, 注意需要 注解被元注解@Returntion(RetentionPolicy.RUNTIME)修飾
    • Field 或 Method等反射屬性 isAnnotationPresent(Annotation.class) 判斷是否包含注解
    • getAnnotation(Annotation.class) 獲取注解對象, 調(diào)用方法獲取對應(yīng)的注解數(shù)據(jù)
注解
泛型
代理
awt
包package
數(shù)據(jù)庫
  • 事務(wù)隔離 兩個事務(wù) T1, T2
    • 臟讀: T1讀取了T2更新但未提交的值, T2回滾,T1 的值就是臨時且無效的.
    • 不可重復(fù)讀取: T1讀取了某個字段,然后T2更新,T1再讀時,值是不一樣的.
    • 幻讀: T1, T2讀取數(shù)據(jù)庫后, T2插入數(shù)據(jù),T1再度時,數(shù)據(jù)不一致.
  • 事務(wù)隔離級別
    • READ UNCOMMITTED 讀未提交數(shù)據(jù),
    • READ COMMITTED 讀已提交數(shù)據(jù), 避免臟讀
    • REPEATABLE READ 可重復(fù)讀 避免臟讀和不可重復(fù)讀
    • SERIALIZABLE 串行化 所有問題都能避免,但是并發(fā)性能低下
生成注釋文件
  • javadoc target.java
java命令行
  • 生成自己的jar包
    • 需要先將文件編譯為class文件,然后使用jar命令
javac *.java -d .
jar cvf base.jar base
  • 編譯目標(biāo)文件
    • .java文件含有包名時,使用java 運(yùn)行需要 java 包名.文件名
    • 有外部引用jar包時, java、javac都需要使用命令參數(shù) -cp jar包絕對路徑 引入外部代碼
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容