Java基本知识

1、Javabean的定义:
JavaBean 是一个规范(标准
JavaBean 需要实现 java.io.Serializable 接口
为了保存对象的状态
JavaBean 需要提供 public 修饰的无参构造方法
为了实例化对象
为 private 修饰的字段提供 setter/getter
为了获取和设置字段的值
pojo:是一个普通的Java类

2、servlet
Servlet规范是最基本的J2EE规范,也是我们进行Web开发的核心依赖。它虽然自身并不构成开发框架,但是我们不得不承认所有的MVC框架都是从最基本的Servlet规范发展而来.
struct、SpringMVC都是基于servlet技术发展而来。


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

3、Java反射机制
获取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());
}

可以通过调用Class的.newInstance方法实例化
.getConstructors()获取所有公共构造方法
.getDeclaredConstructors()获取类中的所有构造方法。它们分别是公共,保护,默认(包),和私有构造
.getSuperclass()获取父类
.getInterfaces()获取类实现的接口
.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("调用set方法:"+userInfo);
System.out.println("调用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
实现多线程两种方式 继承Thread类 实现Runable接口
在run方法里写代码逻辑 用start方法调用。
Thread和Runnable的区别:
如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。
实现Runnable接口比继承Thread类所具有的优势:
1):适合多个相同的程序代码的线程去处理同一个资源
2):可以避免java中的单继承的限制
3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立
4):线程池只能放入实现Runable或callable类线程,不能直接放入继承Thread的类

常用函数:
1、线程睡眠:Thread.sleep(long millis)方法,使线程转到阻塞状态。millis参数设定睡眠的时间,以毫秒为单位。当睡眠结束后,就转为就绪(Runnable)状态。sleep()平台移植性好。
2、线程等待:Object类中的wait()方法,导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 唤醒方法。这个两个唤醒方法也是Object类中的方法,行为等价于调用 wait(0) 一样。
3、线程让步:Thread.yield() 方法,暂停当前正在执行的线程对象,把执行机会让给相同或者更高优先级的线程。
4、线程加入:join()方法,等待其他线程终止。在当前线程中调用另一个线程的join()方法,则当前线程转入阻塞状态,直到另一个进程运行结束,当前线程再由阻塞转为就绪状态。
5、线程唤醒:Object类中的notify()方法,唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的,并在对实现做出决定时发生。线程通过调用其中一个 wait 方法,在对象的监视器上等待。 直到当前的线程放弃此对象上的锁定,才能继续执行被唤醒的线程。被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争;例如,唤醒的线程在作为锁定此对象的下一个线程方面没有可靠的特权或劣势。类似的方法还有一个notifyAll(),唤醒在此对象监视器上等待的所有线程。
注意:Thread中suspend()和resume()两个方法在JDK1.5中已经废除,不再介绍。因为有死锁倾向。
6、interrupt():不要以为它是中断某个线程!它只是线线程发送一个中断信号,让线程在无限等待时(如死锁时)能抛出抛出,从而结束线程,但是如果你吃掉了这个异常,那么这个线程还是不会中断的!

五、在Java中,对象什么时候可以被垃圾回收?
当一个对象到GC Roots不可达时,在下一个垃圾回收周期中尝试回收该对象,如果该对象重写了finalize()方法,并在这个方法中成功自救(将自身赋予某个引用),那么这个对象不会被回收。但如果这个对象没有重写finalize()方法或者已经执行过这个方法,也自救失败,该对象将会被回收。

六、mybatis常用语法
1、foreach:
array
dao接口方法:
public List<StudentEntity> getStudentListByClassIds_foreach_array(String[] classIds);
对应的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>

推荐阅读更多精彩内容