Java创建对象方式、反射、反射是如何应用到spring框架上的、maven、maven的核心功能、MVC、分成的好处、Spring核心技术、

1 篇文章 0 订阅
1 篇文章 0 订阅

1.Java创建对象有哪几种方式

Java创建对象的方式在使用技术上可以大体分为4种

  • 使用new关键字创建对象
    这个是我们常用的创建对象的方式,通过new 类名()可以调用此类的构造函数(无参和有参)。这种方式,类的生命周期中的加载、初始化、实例化三个操作都会执行
    Person person = new Person();
    实例:
    先创建学生类:
import java.io.Serializable;
public class Students implements Cloneable, Serializable {
    private int sid; //学号
    private String sname; //姓名
    private String gender; //性别
    private String birthday; //出生日期
    private String major; //专业
    //一定要保留这个默认的无参数的构造方法,否则spring也无法实例化。
    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 + '\'' +
                '}';
    }
}

new关键字

import java.io.*;
import java.lang.reflect.Constructor;
public class IocDemo {
    public static void main(String[] args) throws Exception {
        Students s1 = new Students(100,"宋小宝","男","1999-10-10","二人转");
        System.out.println(s1);
   }
}
  • 使用反射创建对象
    这三种newInstance方法就是大家所说的反射,可以归为一类。事实上Class的newInstance方法内部调用Constructor的newInstance方法。
    我们也可以使用Class类的newInstance方法创建对象。这个newInstance方法调用无参的构造函数创建对象。
    一)使用Class类的forName方法
Class c = Class.forName("类名"); // 加载、初始化
   c.newInstance(); // 实例化
Class class1 = Class.forName("com.huang.class.Person ") ;
class1.newInstance();
或者
Person person2 = (Person) Class.forName("com.huang.class.Person").newInstance();
或者
Person person2 = Person.class.newInstance();

二)使用ClassLoader类的loadClass方法

Class c = ClassLoader.getSystemClassLoader()  .loadClass("类名"); // 加载
 c.newInstance();// 初始化 ---> 实例化
例如:
Class c = ClassLoader.getSystemClassLoader()
            .loadClass("com.huang.class.Person "); // 加载
  c.newInstance();// 初始化 ---> 实例化

三)使用Constructor类的newInstance方法创建对象
和Class类的newInstance方法很像, java.lang.reflect.Constructor类里也有一个newInstance方法可以创建对象。我们可以通过这个newInstance方法调用有参数的和私有的构造函数。这里需要强调一点private(私有的)修饰的属性或者方法并非绝对的安全,只是对开发者使用的一个约束。属性可以在set()方法中加入约束。

Constructor<Person> constructor = Person.class.getConstructor();
Person person3 = constructor.newInstance();

实例:

import java.io.*;
import java.lang.reflect.Constructor;
public class IocDemo {
    public static void main(String[] args) throws Exception {
    	Students s1 = new Students(100,"宋小宝","男","1999-10-10","二人转");

	//反射怎么创建对象呢。大家仔细观察我没有使用new.使用了反射。
	Class clazz = s1.getClass();
	Constructor constructor = clazz.getConstructor(int.class,String.class,String.class,String.class,String.class);
	Students s5 = (Students) constructor.newInstance(new Object[]{100,"小沈阳","女","1999-10-10","二人转"});
	System.out.println(s5);
	   }
}
  • 使用clone方法创建对象
Person person4 = (Person) person4.clone();

实例:

import java.io.*;
import java.lang.reflect.Constructor;
public class IocDemo {
    public static void main(String[] args) throws Exception {
    	Students s1 = new Students(100,"宋小宝","男","1999-10-10","二人转");

	//使用clone来创建对象。
	Students s2 = (Students) s1.clone();
	System.out.println(s2);
	}
}

反序列化
为了反序列化一个对象,我们需要让我们的类实现Serializable接口

ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
Person person5 = (Person) in.readObject();

实例:

import java.io.*;
import java.lang.reflect.Constructor;
public class IocDemo {
    public static void main(String[] args) throws Exception {
        File file = new File("dest.data");

	Students s1 = new Students(100,"宋小宝","男","1999-10-10","二人转");

        //反序列化创建对象。
	ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file));
	out.writeObject(s1); //把宋小宝对象写入到文件中。
	ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
	Students s6 = (Students) in.readObject();
	System.out.println(s6);
	}
}

2.什么是反射?说说反射是如何应用到spring框架上的?

反射机制是Java语言中一个非常重要的特性,它允许程序在运行时进行自我检查,同时也允许对其内部成员进行操作。反射机制提供的功能主要有:得到一个对象所属的类;获取一个类的所有成员变量和方法;在运行时创建对象;在运行时调用对象的方法。

spring框架就是用反序列化的思想创建对象,也就是通过文件注入的形式
反序列化其实还是反射的一种表现~

3.maven是什么?maven的核心功能有哪些?

  • maven作为Apache组织中的一个颇为成功的开源项目,Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理;无论是传统的瀑布式开发还是流行的敏捷模式,Maven都能大显身手。

  • maven的核心功能
    依赖管理
    模块管理
    插件管理
    部署管理

  • 生命周期
    maven将工程的构建过程理解为不同的生命周期和阶段, 一个工程的构建过程中,存在着不同的生命周期,生命周期间互相独立,没有一定的顺序关系。 每个生命周期又划分为不同的阶段,不同的阶段之间有明确的顺序关系, 同一生命周期内的阶段必须按顺序依次执行。
    clear(清除)
    pre-clean:执行清理的准备工作
    clean:执行清理工作
    post-clean:执行清理后的后续工作
    default(核心)
    validate:验证项目的正确性及项目所必需的信息是否可用
    compile:编译项目中代码
    test:用相关的单元测试框架测试编译后的代码,测试代码并不会随项目打包和布署
    package:将编译后的代码打包成相应的格式文件,如jar包
    integration-test: 如果需要在一个综合环境中运行我们的测试,这个阶段将会运行和布署项目到该环境中
    verify: 检查项目中的包是否正确与符合要求
    install:将包安装到本地maven仓库,其他项目也可以使用该包作为依赖
    deploy:将包发布到远程的maven仓库,并提供给其他开发者使用
    site(建立发布项目站点)
    pre-site:准备生成
    site:生成项目站点和文档
    post-site:执行生成文档后的后续工作
    site-deploy:发布项目文档

3.什么是MVC?说说分成的好处?

  • MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式。
    Model(模型):表示应用程序核心,应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据
    View(视图):显示数据,应用程序中处理数据显示的部分,通常视图是依据模型数据创建的
    Controller(控制器):处理输入,应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据
  • 优点
    开发人员可以只用管理结构中的某一层
    容易使用新的层实替换原有的层
    降低层间依赖、也就是解耦,降低程序耦合度
    有利于各层逻辑的复用
  • 缺点
    降低了系统的性能,必须通过中间层才能访问数据库
    有时会倒是级联的修改,尤其是在上层做出修改后,下层的结构也要做出对应的修改

5.Spring的俩大核心技术?

  • IOC(控制反转)/DI(依赖注入)
    一般来说在Java中创建对象是使用new关键字创建的,而使用IOC,只需要在配置文档中进行配置,使用配置文档中的数据进行对象的创建。不用再使用new关键字创建
    IOC创建对象的过程是使用类的默认无参构造创建对象,然后使用类的set方法进行属性的赋值
    IOC创建对象的本质是反射
  • AOP面向切面编程
    可以简单的理解为在不改变原有程序的基础上为代码增加新的功能
    分为前置增强、后置增强、最终增强、异常增强、环绕增强
    需要在原有的类上定义一个切口(方法),然后定义一个用于增强的AOP类,可以在类中定义增强的方法。最后在xml配置文档中进行配置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值