Java基本知識

1、Javabean的定義:
JavaBean 是一個規(guī)范(標(biāo)準(zhǔn)
JavaBean 需要實(shí)現(xiàn) java.io.Serializable 接口
為了保存對象的狀態(tài)
JavaBean 需要提供 public 修飾的無參構(gòu)造方法
為了實(shí)例化對象
為 private 修飾的字段提供 setter/getter
為了獲取和設(shè)置字段的值
pojo:是一個普通的Java類

2、servlet
Servlet規(guī)范是最基本的J2EE規(guī)范,也是我們進(jìn)行Web開發(fā)的核心依賴。它雖然自身并不構(gòu)成開發(fā)框架,但是我們不得不承認(rèn)所有的MVC框架都是從最基本的Servlet規(guī)范發(fā)展而來.
struct、SpringMVC都是基于servlet技術(shù)發(fā)展而來。


93e16090-54df-3ef2-a318-3b710a59db40.png

3、Java反射機(jī)制
獲取Class的三種方式:
try {
Class c1 = Class.forName("java.lang.Integer");
System.out.println(c1.getName());
} catch (ClassNotFoundException e) {
System.out.println("forName出錯");
}
Integer i = 1;
Class c2 = i.getClass();
System.out.println(c2.getName());

Class c3 = Integer.class;
System.out.println(c3.getName());
}

可以通過調(diào)用Class的.newInstance方法實(shí)例化
.getConstructors()獲取所有公共構(gòu)造方法
.getDeclaredConstructors()獲取類中的所有構(gòu)造方法。它們分別是公共,保護(hù),默認(rèn)(包),和私有構(gòu)造
.getSuperclass()獲取父類
.getInterfaces()獲取類實(shí)現(xiàn)的接口
.getMethods()獲取類的方法
.getMethod("setName",String.class)獲取set方法
.getMethod("getName")獲取get方法
Class<?> herosClass = Heros.class;
try {
Method m1 = herosClass.getMethod("setName",String.class);
Method m2 = herosClass.getMethod("getName");
Object userInfo = herosClass.newInstance();
m1.invoke(userInfo,"影魔");
System.out.println("調(diào)用set方法:"+userInfo);
System.out.println("調(diào)用get方法:"+m2.invoke(userInfo));
} catch (Exception e) {
e.printStackTrace();
}
.getDeclaredFields()獲取類的所有屬性
Class<?> c = Heros.class;
try {
Object object = c.newInstance();
Field[] fields = c.getDeclaredFields();
System.out.println("Heros所有屬性:");
for (Field f : fields) {
System.out.println(f);
}

        Field field = c.getDeclaredField("name");
        field.setAccessible(true);
        field.set(object, "炸彈人");修改屬性值
        System.out.println("修改后的屬性值:");
        System.out.println(field.get(object));
        System.out.println("修改屬性后的Heros:");
        System.out.println((Heros)object);
    } catch (Exception e) {
        e.printStackTrace();
    }

4、Java多線程http://www.cnblogs.com/GarfieldEr007/p/5746362.html
實(shí)現(xiàn)多線程兩種方式 繼承Thread類 實(shí)現(xiàn)Runable接口
在run方法里寫代碼邏輯 用start方法調(diào)用。
Thread和Runnable的區(qū)別:
如果一個類繼承Thread,則不適合資源共享。但是如果實(shí)現(xiàn)了Runable接口的話,則很容易的實(shí)現(xiàn)資源共享。
實(shí)現(xiàn)Runnable接口比繼承Thread類所具有的優(yōu)勢:
1):適合多個相同的程序代碼的線程去處理同一個資源
2):可以避免java中的單繼承的限制
3):增加程序的健壯性,代碼可以被多個線程共享,代碼和數(shù)據(jù)獨(dú)立
4):線程池只能放入實(shí)現(xiàn)Runable或callable類線程,不能直接放入繼承Thread的類

常用函數(shù):
1、線程睡眠:Thread.sleep(long millis)方法,使線程轉(zhuǎn)到阻塞狀態(tài)。millis參數(shù)設(shè)定睡眠的時間,以毫秒為單位。當(dāng)睡眠結(jié)束后,就轉(zhuǎn)為就緒(Runnable)狀態(tài)。sleep()平臺移植性好。
2、線程等待:Object類中的wait()方法,導(dǎo)致當(dāng)前的線程等待,直到其他線程調(diào)用此對象的 notify() 方法或 notifyAll() 喚醒方法。這個兩個喚醒方法也是Object類中的方法,行為等價于調(diào)用 wait(0) 一樣。
3、線程讓步:Thread.yield() 方法,暫停當(dāng)前正在執(zhí)行的線程對象,把執(zhí)行機(jī)會讓給相同或者更高優(yōu)先級的線程。
4、線程加入:join()方法,等待其他線程終止。在當(dāng)前線程中調(diào)用另一個線程的join()方法,則當(dāng)前線程轉(zhuǎn)入阻塞狀態(tài),直到另一個進(jìn)程運(yùn)行結(jié)束,當(dāng)前線程再由阻塞轉(zhuǎn)為就緒狀態(tài)。
5、線程喚醒:Object類中的notify()方法,喚醒在此對象監(jiān)視器上等待的單個線程。如果所有線程都在此對象上等待,則會選擇喚醒其中一個線程。選擇是任意性的,并在對實(shí)現(xiàn)做出決定時發(fā)生。線程通過調(diào)用其中一個 wait 方法,在對象的監(jiān)視器上等待。 直到當(dāng)前的線程放棄此對象上的鎖定,才能繼續(xù)執(zhí)行被喚醒的線程。被喚醒的線程將以常規(guī)方式與在該對象上主動同步的其他所有線程進(jìn)行競爭;例如,喚醒的線程在作為鎖定此對象的下一個線程方面沒有可靠的特權(quán)或劣勢。類似的方法還有一個notifyAll(),喚醒在此對象監(jiān)視器上等待的所有線程。
注意:Thread中suspend()和resume()兩個方法在JDK1.5中已經(jīng)廢除,不再介紹。因?yàn)橛兴梨i傾向。
6、interrupt():不要以為它是中斷某個線程!它只是線線程發(fā)送一個中斷信號,讓線程在無限等待時(如死鎖時)能拋出拋出,從而結(jié)束線程,但是如果你吃掉了這個異常,那么這個線程還是不會中斷的!

五、在Java中,對象什么時候可以被垃圾回收?
當(dāng)一個對象到GC Roots不可達(dá)時,在下一個垃圾回收周期中嘗試回收該對象,如果該對象重寫了finalize()方法,并在這個方法中成功自救(將自身賦予某個引用),那么這個對象不會被回收。但如果這個對象沒有重寫finalize()方法或者已經(jīng)執(zhí)行過這個方法,也自救失敗,該對象將會被回收。

六、mybatis常用語法
1、foreach:
array
dao接口方法:
public List<StudentEntity> getStudentListByClassIds_foreach_array(String[] classIds);
對應(yīng)的sql:
<select id="getStudentListByClassIds_foreach_array" resultMap="resultMap_studentEntity">
SELECT ST.STUDENT_ID,
ST.STUDENT_NAME,
FROM STUDENT_TBL ST
WHERE ST.CLASS_ID IN
<foreach collection="array" item="classIds" open="(" separator="," close=")">
#{classIds}
</foreach>
</select>
List:
public List<StudentEntity> getStudentListByClassIds_foreach_list(List<String> classIdList);
<select id="getStudentListByClassIds_foreach_list" resultMap="resultMap_studentEntity">
SELECT ST.STUDENT_ID,
ST.STUDENT_NAME,
FROM STUDENT_TBL ST
WHERE ST.CLASS_ID IN
<foreach collection="list" item="classIdList" open="(" separator="," close=")">
#{classIdList}
</foreach>
</select>

2、choose (when, otherwise)
Java 的switch 語句,choose為switch,when為case,otherwise則為default
<select id="getStudentList_choose" resultMap="resultMap_studentEntity" parameterType="liming.student.manager.data.model.StudentEntity">
SELECT ST.STUDENT_ID,
ST.STUDENT_NAME,
FROM STUDENT_TBL ST
<where>
<choose>
<when test="studentName !=null ">
ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName, jdbcType=VARCHAR}),'%')
</when >
<when test="studentSex != null and studentSex != '' ">
AND ST.STUDENT_SEX = #{studentSex, jdbcType=INTEGER}
</when >
<when test="studentBirthday != null ">
AND ST.STUDENT_BIRTHDAY = #{studentBirthday, jdbcType=DATE}
</when >
<otherwise>
</otherwise>
</choose>
</where>
</select>

3、if語句 <if test="studentSex != null and studentSex != '' ">
4、trim代替where
<trim prefix="WHERE" prefixOverrides="AND|OR">
</trim>
trim代替SET
<trim prefix="SET" suffixOverrides=",">
</trim>

最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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