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";
        }
    }

//下篇再见…谢谢

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值