一、克隆
1.1 克隆简介
1.1.1 克隆的使用条件
已经有了一个对象,对象中也已经有了一些数据。程序需要产生很多类似的对象出来,此时就可以使用克隆
1.1.2 克隆需要使用的一个接口(Cloneable)
package com.woniuxy.java29.bean;
import java.io.Serializable;
import java.util.Date;
public class StudentBean implements Serializable ,Cloneable{
/**
*
*/
private static final long serialVersionUID = 8120141337579471011L;
private String name;
private int age;
private String telphone;
private String address;
private int gender;
private Date studyTime;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getTelphone() {
return telphone;
}
public void setTelphone(String telphone) {
this.telphone = telphone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public Date getStudyTime() {
return studyTime;
}
public void setStudyTime(Date studyTime) {
this.studyTime = studyTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}
@Override
public String toString() {
return "StudentBean [name=" + name + ", age=" + age + ", telphone=" + telphone + ", address=" + address
+ ", gender=" + gender + ", studyTime=" + studyTime + "]";
}
}
package com.woniuxy.java29.study;
import java.util.Date;
import com.woniuxy.java29.bean.StudentBean;
public class MainEnter {
/**
* 主函数
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
StudentBean studentBean = new StudentBean();
studentBean.setName("张三");
studentBean.setAddress("孵化园5号楼");
studentBean.setAge(18);
studentBean.setStudyTime(new Date());
studentBean.setGender(1);
studentBean.setTelphone("13398195689");
System.out.println(studentBean);
//使用克隆模式产生对象
try {
StudentBean studentBean01 = (StudentBean) studentBean.clone();
studentBean01.setName("李四");
studentBean01.setTelphone("13398567845");
System.out.println(studentBean01);
//克隆模式产生出来的对象,不是源对象
System.out.println(studentBean == studentBean01);
//
StudentBean studentBean02 = (StudentBean) studentBean.clone();
studentBean02.setName("王五");
System.out.println(studentBean02);
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// //现在需要有10个学生
// StudentBean studentBean02 = new StudentBean();
// studentBean02.setName("张思");
// studentBean02.setAddress("孵化园5号楼");
// studentBean02.setAge(18);
// studentBean02.setStudyTime(new Date());
// studentBean02.setGender(1);
// studentBean02.setTelphone("13398195688");
//
//
// StudentBean studentBean03 = new StudentBean();
// studentBean03.setName("李四");
// studentBean03.setAddress("孵化园5号楼");
// studentBean03.setAge(20);
// studentBean03.setStudyTime(new Date());
// studentBean03.setGender(1);
// studentBean03.setTelphone("13398195686");
}
}
1.2 浅克隆
浅克隆: 对象克隆时没有克隆其关联对象
EG:
package com.woniuxy.java29.bean;
import java.io.Serializable;
import java.util.Date;
public class StudentBean implements Serializable ,Cloneable{
/**
*
*/
private static final long serialVersionUID = 8120141337579471011L;
private String name;
private int age;
private String telphone;
private String address;
private int gender;
private Date studyTime;
private GirlBean girlBean;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getTelphone() {
return telphone;
}
public void setTelphone(String telphone) {
this.telphone = telphone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public Date getStudyTime() {
return studyTime;
}
public void setStudyTime(Date studyTime) {
this.studyTime = studyTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public GirlBean getGirlBean() {
return girlBean;
}
public void setGirlBean(GirlBean girlBean) {
this.girlBean = girlBean;
}
@Override
public Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}
@Override
public String toString() {
return "StudentBean [name=" + name + ", age=" + age + ", telphone=" + telphone + ", address=" + address
+ ", gender=" + gender + ", studyTime=" + studyTime + ", girlBean=" + girlBean + "]";
}
}
package com.woniuxy.java29.bean;
import java.io.Serializable;
/**
* 女朋友类
* @author Administrator
*
*/
public class GirlBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = -3631350544025547303L;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// @Override
// public String toString() {
// return "GirlBean [name=" + name + "]";
// }
}
package com.woniuxy.java29.study;
import java.util.Date;
import com.woniuxy.java29.bean.GirlBean;
import com.woniuxy.java29.bean.StudentBean;
public class MainEnter {
/**
* 主函数
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
StudentBean studentBean = new StudentBean();
studentBean.setName("张三");
studentBean.setAddress("孵化园5号楼");
studentBean.setAge(18);
studentBean.setStudyTime(new Date());
studentBean.setGender(1);
studentBean.setTelphone("13398195689");
//
GirlBean girl = new GirlBean();
girl.setName("马小蓉");
studentBean.setGirlBean(girl);
System.out.println(studentBean);
//使用克隆模式产生对象
try {
StudentBean studentBean01 = (StudentBean) studentBean.clone();
studentBean01.setName("李四");
studentBean01.setTelphone("13398567845");
System.out.println(studentBean01);
//克隆模式产生出来的对象,不是源对象
System.out.println(studentBean == studentBean01);
//
StudentBean studentBean02 = (StudentBean) studentBean.clone();
studentBean02.setName("王五");
System.out.println(studentBean02);
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// //现在需要有10个学生
// StudentBean studentBean02 = new StudentBean();
// studentBean02.setName("张思");
// studentBean02.setAddress("孵化园5号楼");
// studentBean02.setAge(18);
// studentBean02.setStudyTime(new Date());
// studentBean02.setGender(1);
// studentBean02.setTelphone("13398195688");
//
//
// StudentBean studentBean03 = new StudentBean();
// studentBean03.setName("李四");
// studentBean03.setAddress("孵化园5号楼");
// studentBean03.setAge(20);
// studentBean03.setStudyTime(new Date());
// studentBean03.setGender(1);
// studentBean03.setTelphone("13398195686");
}
}
执行结果:
StudentBean [name=张三, age=18, telphone=13398195689, address=孵化园5号楼, gender=1, studyTime=Wed Oct 28 11:34:50 CST 2020, girlBean=com.woniuxy.java29.bean.GirlBean@70dea4e]
StudentBean [name=李四, age=18, telphone=13398567845, address=孵化园5号楼, gender=1, studyTime=Wed Oct 28 11:34:50 CST 2020, girlBean=com.woniuxy.java29.bean.GirlBean@70dea4e]
false
StudentBean [name=王五, age=18, telphone=13398195689, address=孵化园5号楼, gender=1, studyTime=Wed Oct 28 11:34:50 CST 2020, girlBean=com.woniuxy.java29.bean.GirlBean@70dea4e]
1.3 深克隆
深克隆:对象在克隆本身同时克隆其关联对象
具体做法:
让该关联对象也提供克隆能力,并且学生在克隆时,修改一下克隆逻辑
package com.woniuxy.java29.bean;
import java.io.Serializable;
/**
* 女朋友类
* @author Administrator
*
*/
public class GirlBean implements Serializable,Cloneable{
/**
*
*/
private static final long serialVersionUID = -3631350544025547303L;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}
// @Override
// public String toString() {
// return "GirlBean [name=" + name + "]";
// }
}
package com.woniuxy.java29.bean;
import java.io.Serializable;
import java.util.Date;
public class StudentBean implements Serializable ,Cloneable{
/**
*
*/
private static final long serialVersionUID = 8120141337579471011L;
private String name;
private int age;
private String telphone;
private String address;
private int gender;
private Date studyTime;
private GirlBean girlBean;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getTelphone() {
return telphone;
}
public void setTelphone(String telphone) {
this.telphone = telphone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public Date getStudyTime() {
return studyTime;
}
public void setStudyTime(Date studyTime) {
this.studyTime = studyTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public GirlBean getGirlBean() {
return girlBean;
}
public void setGirlBean(GirlBean girlBean) {
this.girlBean = girlBean;
}
@Override
public Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
GirlBean girlBean = (GirlBean) this.girlBean.clone();
StudentBean stu = (StudentBean) super.clone();
stu.setGirlBean(girlBean);
return stu;
}
@Override
public String toString() {
return "StudentBean [name=" + name + ", age=" + age + ", telphone=" + telphone + ", address=" + address
+ ", gender=" + gender + ", studyTime=" + studyTime + ", girlBean=" + girlBean + "]";
}
}
package com.woniuxy.java29.study;
import java.util.Date;
import com.woniuxy.java29.bean.GirlBean;
import com.woniuxy.java29.bean.StudentBean;
public class MainEnter {
/**
* 主函数
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
StudentBean studentBean = new StudentBean();
studentBean.setName("张三");
studentBean.setAddress("孵化园5号楼");
studentBean.setAge(18);
studentBean.setStudyTime(new Date());
studentBean.setGender(1);
studentBean.setTelphone("13398195689");
//
GirlBean girl = new GirlBean();
girl.setName("马小蓉");
studentBean.setGirlBean(girl);
System.out.println(studentBean);
//使用克隆模式产生对象
try {
StudentBean studentBean01 = (StudentBean) studentBean.clone();
studentBean01.setName("李四");
studentBean01.setTelphone("13398567845");
System.out.println(studentBean01);
//克隆模式产生出来的对象,不是源对象
System.out.println(studentBean == studentBean01);
//
StudentBean studentBean02 = (StudentBean) studentBean.clone();
studentBean02.setName("王五");
System.out.println(studentBean02);
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// //现在需要有10个学生
// StudentBean studentBean02 = new StudentBean();
// studentBean02.setName("张思");
// studentBean02.setAddress("孵化园5号楼");
// studentBean02.setAge(18);
// studentBean02.setStudyTime(new Date());
// studentBean02.setGender(1);
// studentBean02.setTelphone("13398195688");
//
//
// StudentBean studentBean03 = new StudentBean();
// studentBean03.setName("李四");
// studentBean03.setAddress("孵化园5号楼");
// studentBean03.setAge(20);
// studentBean03.setStudyTime(new Date());
// studentBean03.setGender(1);
// studentBean03.setTelphone("13398195686");
}
}
执行结果:
StudentBean [name=张三, age=18, telphone=13398195689, address=孵化园5号楼, gender=1, studyTime=Wed Oct 28 11:39:55 CST 2020, girlBean=com.woniuxy.java29.bean.GirlBean@70dea4e]
StudentBean [name=李四, age=18, telphone=13398567845, address=孵化园5号楼, gender=1, studyTime=Wed Oct 28 11:39:55 CST 2020, girlBean=com.woniuxy.java29.bean.GirlBean@5c647e05]
false
StudentBean [name=王五, age=18, telphone=13398195689, address=孵化园5号楼, gender=1, studyTime=Wed Oct 28 11:39:55 CST 2020, girlBean=com.woniuxy.java29.bean.GirlBean@33909752]
1.4 总结
克隆:以某一个对象为原型,去产生出与它相似的多个对象
克隆:是属于面向对象设计的一种设计模式: 克隆模式(原型模式)
二、设计原则
一般我们设计我们的程序时,都需要让程序满足一个规则:“高内聚低耦合”
2.1 目的(高内聚,低耦合)
2.1.1 高内聚
2.1.2 低耦合
2.1.3 实现手段
设计程序时遵循一定的设计原则,以及设计模式
2.2 七大设计原则
2.2.1 单一原则
一个类只干一个事(学生类中就只放学生相关的事情),一个方法只干一个事(方法中只做一件事情,便于方法的复用)
2.2.2 开闭原则
程序中,如果有新需求,我们需要做到:对新功能的扩展,我们是开放的;但是对旧功能的修改是关闭的。
2.2.3 接口隔离原则
也叫接口最小化原则,要求我们在设计接口时,接口中的方法尽量少。
也就是说:设计接口时,不要把乱七八糟的方法,都定义在同一个接口中,因为你的实现类可能并不需要
2.2.4 依赖倒置原则
面向接口编程,也叫面向抽象编程;模块之间,不要采用面向细节的编程方法,需要使用面向接口的编程方法,因为细节容易变化,接口不容易变化
2.2.5 里氏替换原则
龙生龙,凤生凤,老鼠的儿子会打洞。 要求保证继承体系的纯洁性。
具体的做法:子类在继承父类的时候,不要去重写父类已经实现过的方法!
可以重写没实现过的方法,也可以扩展新的方法!
2.2.6 迪米特法则
最少知道原则,一个类中尽量不要去关注其他类的事务。如果要关注:方法的参数,方法的返回,某些成员变量
2.2.7 组合聚合原则
程序中,如果存在重复代码的需要使用的情况下,能不用继承,就不用继承。因为
继承破坏了封装的概念,而且会子类存在越来越多的方法。
此时的解决方案:将需要的使用的那个类, 作为本类的成员变量,就可以调用它的行为了!
三、设计模式
在具体编程时,需要采用什么样的方法,或是方式,才可以达到上述的纲领
前辈总结出来的方法,方法多少个:21个
在毕业之前需要掌握什么?
1、克隆模式
2、单例模式
3、工厂模式
4、代理模式
5、观察者模式
6、适配器模式
四、jar
Java一般的压缩格式:jar war 类似于 == zip rar
4.1 如何压缩
效果如图:
**
4.2 启动Jar
第一种方式:配置了环境变量的情况,可以双击它
第二种方式:使用DOC命令窗体,启动它
首先,要DOC命令窗体(快捷方式:SHIFT + 右键 选择:“从此处打开命令窗体”)
然后,在命令窗体中,输入命令:java -jar *.jar 直接回车运行即可
4.3 War
即JAVA编写的WEB工程的压缩包