JavaEE(Java創建對象四種方法、maven、面向接口編程、反射在spring上的應用、java解析xml、抽象類與接口、同步提交與異步提交)

Java創建對象的四種方式

  1. new一個對象
  2. clone方法
  3. 反射
  4. 對象反序列化

我們先創建一個Students類:

public class Students implements Cloneable{

    private int sid;         //學號
    private String sname;    //姓名
    private String gender;   //性別
    private String birthday; //出生日期
    private String major;    //專業

    public Students() {
    }

    public Students(int sid, String sname, String gender, String birthday, String major) {
        this.sid = sid;
        this.sname = sname;
        this.gender = gender;
        this.birthday = birthday;
        this.major = major;
    }

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    @Override
    public String toString() {
        return "Students{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", gender='" + gender + '\'' +
                ", birthday='" + birthday + '\'' +
                ", major='" + major + '\'' +
                '}';
    }
}

創建對象:

public class Demo {
    public static void main(String[] args) throws Exception {
		//1.new一個對象	
        Students s1 = new Students(100,"張三","男","1999-10-10","電路專業");
        System.out.println(s1);

        //2.使用clone來創建對象
        Students s2 = (Students) s1.clone();
        System.out.println(s2);
        
        //3.反射創建對象
        Class clazz = s1.getClass();
        Constructor constructor = clazz.getConstructor(int.class,String.class,String.class,String.class,String.class);
        Students s3 = (Students) constructor.newInstance(new Object[]{200,"李四","女","1999-10-10","金融專業"});
        System.out.println(s3);

        //4.反序列化創建對象
        File file = new File("test.data");//把s1對象寫入到文件中
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file));
        out.writeObject(s1); 
        ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
        Students s4 = (Students) in.readObject();
        System.out.println(s4);
    }
}
打印結果:
/*
Students{sid=100, sname='張三', gender='男', birthday='1999-10-10', major='電路專業'}
Students{sid=100, sname='張三', gender='男', birthday='1999-10-10', major='電路專業'}
Students{sid=200, sname='李四', gender='女', birthday='1999-10-10', major='金融專業'}
Students{sid=100, sname='張三', gender='男', birthday='1999-10-10', major='電路專業'}
*/

maven

  1. 概述 :Maven 翻譯爲"專家"、“內行”,是 Apache 下的一個純 Java 開發的開源項目。基於項目對象模型(縮寫:POM)概念,Maven利用一箇中央信息片斷能管理一個項目的構建、報告和文檔等步驟。Maven 是一個項目管理工具,可以對 Java 項目進行構建、依賴管理。Maven 也可被用於構建和管理各種項目,例如 C#,Ruby,Scala 和其他語言編寫的項目。
  2. maven的核心功能:
    1)依賴管理
    2)模塊管理
    3)插件管理
    4)部署管理

面向對象編程與面向接口編程的區別

  • 面向對象編程:java就是面向對象編程,所謂在java中萬事萬物皆對象,這是因爲java中所有類的調用都是new出來,面向對象用到三大特性,即封裝、多態、繼承。
  • 面向接口編程:編碼時使用接口而不是具體的對象,一個接口可以從三方面去考察:制定者(或者叫協調者)、實現者(或者叫生產者)、調用者(或者叫消費者),接口本質上就是由制定者來協調實現者和調用者之間的關係。所以通常說的"面向接口編程"可以理解爲:只有實現者和調用者都遵循"面向接口編程"這個準則,制定者的協調目的才能達到。

反射是如何應用到spring框架上

  1. 反射:反射(Reflection)是Java被視爲動態語言的關鍵,反射機制允許程序在執行期藉助於Reflection API取得任何類的內部信息,並能直接操作任意對象的內部屬性及方法。加載完類之後,在堆內存的方法區中就產生了一個Class類型的對象(一個類只有 一個Class對象),這個對象就包含了完整的類的結構信息;我們可以通過這個對象看到類的結構;這個對象就像一面鏡子,透過這個鏡子看到類的結構,所以,我們形象的稱之爲:反射。
  2. 如何應用到spring框架?
//解析<bean .../>元素的id屬性得到該字符串值爲"sqlSessionFactory"
String idStr = "sqlSessionFactory";  
//解析<bean .../>元素的class屬性得到該字符串值"org.mybatis.spring.SqlSessionFactoryBean"  
String classStr = "org.mybatis.spring.SqlSessionFactoryBean";

//利用反射知識,通過classStr獲取Class類對象  
Class cls = Class.forName(classStr);  
//實例化對象  
Object obj = cls.newInstance();  
//container表示Spring容器  
container.put(idStr, obj);  

//當一個類裏面需要用另一類的對象時,我們繼續下面的操作

//解析<property .../>元素的name屬性得到該字符串值爲“dataSource”  
String nameStr = "dataSource";  
//解析<property .../>元素的ref屬性得到該字符串值爲“dataSource”  
String refStr = "dataSource";  
//生成將要調用setter方法名  
String setterName = "set" + nameStr.substring(0, 1).toUpperCase()  
        + nameStr.substring(1);  
//獲取spring容器中名爲refStr的Bean,該Bean將會作爲傳入參數  
Object paramBean = container.get(refStr);  
//獲取setter方法的Method類,此處的cls是剛纔反射代碼得到的Class對象  
Method setter = cls.getMethod(setterName, paramBean.getClass());  
//調用invoke()方法,此處的obj是剛纔反射代碼得到的Object對象  
setter.invoke(obj, paramBean);

java 解析xml有哪些技術?

  1. 基於樹的DOM
    DOM是html和xml的應用程序接口(API),將整個文檔解析成一顆樹型結構,通過API可以在各節點上任意訪問,優點就是操作方便,缺點是因爲要完整解析文檔,所以在解析超大文檔時內存佔用較大。
  2. 基於事件模型的SAX(Simple API for XML)
    是一種流式解析,順序讀取並解析文檔,在解析到特定元素的時候通過用戶定義的解析事件句柄來執行操作,可以看作一種“推送”的形式。與DOM相反,SAX的優點就是內存佔用低,因爲不需要完全解析文檔,速度更快,但是由於是基於事件模型,所以用戶在編程時會有一種“被動”的不適感。
  3. JDOM(Java-based Document Object Model)
    Java特定的文檔對象模型。自身不包含解析器,使用SAX
    優點是使用具體類而不是接口,簡化了DOM的API、大量使用了Java集合類,方便了Java開發;其缺點是沒有較好的靈活性、性能較差。
  4. DOM4J(Document Object Model for Java)
    簡單易用,採用Java集合框架,並完全支持DOM、SAX和JAXP
    優點是使用了大量的Java集合類,方便Java開發人員,同時提供一些提高性能的替代方法、有很好的性能;其缺點是大量使用了接口,API較爲複雜。

抽象類與接口的區別

  1. 抽象類要被子類繼承,接口要被類實現。
  2. 接口只能做方法聲明,抽象類中可以作方法聲明,也可以做方法實現。
  3. 接口裏定義的變量只能是公共的靜態的常量,抽象類中的變量是普通變量。
  4. 接口是設計的結果,抽象類是重構的結果。
  5. 抽象類和接口都是用來抽象具體對象的,但是接口的抽象級別最高。
  6. 抽象類可以有具體的方法和屬性,接口只能有抽象方法和不可變常量。
  7. 抽象類主要用來抽象類別,接口主要用來抽象功能。

表單的同步提交與異步提交的區別

  • 同步提交:直接在form表單的開始標籤裏添加action和method屬性實現
<form id="form" method='"post" action="${ctx}/user/saveUser">
    <input type="text" id="name" name="name" value="${user.name}"/>
    <input type="text" id="age" name="age" value="${user.age}"/>
</form>
<input id="save-btn" type="submit" value="保存"/>
@RequestMapping(value = "/saveUser",method = RequestMethod.POST)
    public String saveUser(User user,HttpServletRequest request, HttpServletResponse response) throws Exception {
        try{
            userService.save(user);
        }catch (Exception e){
            e.printStackTrace();
        }
        return "redirect:/user/userList";
    }
  • 異步提交:form標籤去掉method和action屬性,保存按鈕input標籤類型變爲button,Java中返回String,則ajax中dataType類型爲’text’。
<form id="form">
    <input type="text" id="name" name="name" value="${user.name}"/>
    <input type="text" id="age" name="age" value="${user.age}"/>
</form>
<input id="save-btn" type="button" value="保存"/>
<script>
    $(document).ready(function() {
            //表單異步提交
            $("#save-btn").on("click",function(){
                $.ajax({ 
                    type: 'post', 
                    data: $('#form').serialize(), 
                    url: '${ctx}/user/saveUser',
                    cache:false,  
                    dataType:'text', 
                    success: function (data) {
                        if("fail"!=data){
                            layer.msg('保存成功');
                            window.location.href = "${ctx}/user/userList?userId="+data;
                        }else{
                            layer.msg('保存失敗');
                        }
                    }   
                })
            })
</script>
@RequestMapping(value = "/saveUser",method = RequestMethod.POST)
    public String saveUser(User user,HttpServletRequest request, HttpServletResponse response) throws Exception {
        try{
            User user = userService.save(user);
            return user.getUserId();
        }catch (Exception e){
            e.printStackTrace();
            return "fail";
        }
    }

//下篇再見…謝謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章