JAVA-SE最后阶段

枚举的简易介绍:
1. 枚举是JDK1.5版本新增的特性(泛型、For-each等如今被广泛应用的特性也是由JDK1.5时所新增的),另外到了JDK1.6后switch语句支持枚举类型.
简易实例:public enum ColorclothesEnum{
green,red,
}
2.枚举常用方法:
1.values()获取存储枚举中所有常量实例的数组。常配合foreach完成遍历。
2.构造方法,枚举的构造方法只能用private修饰符修饰,如果被别的调用那他便不在私有,他是不可以修改的、不可继承的。
3.valueOf()通过常量名获取对应的枚举实例。
3.枚举的好处以及与常量类的区别(借鉴

1)枚举型可以直接与数据库打交道,我通常使用varchar类型存储,对应的是枚举的常量名。(数据库中好像也有枚举类型,不过也没用过)

2) switch语句支持枚举型,当switch使用int、String类型时,由于值的不稳定性往往会有越界的现象,对于这个的处理往往只能通过if条件筛选以及default模块来处理。而使用枚举型后,在编译期间限定类型,不允许发生越界的情况

3) 当你使用常量类时,往往得通过equals去判断两者是否相等,使用枚举的话由于常量值地址唯一,可以用==直接对比,性能会有提高

4) 常量类编译时,是直接把常量的值编译到类的二进制代码里,常量的值在升级中变化后,需要重新编译引用常量的类,因为里面存的是旧值。枚举类编译时,没有把常量值编译到代码里,即使常量的值发生变化,也不会影响引用常量的类。

5)枚举类编译后默认为final class,不允许继承可防止被子类修改。常量类可被继承修改、增加字段等,容易导致父类的不兼容。

设计模式的课外补充:
借鉴{:java的设计模式大体上分为三大类:

创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。
结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。
行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

六个模式设计原则:

1、开闭原则(Open Close Principle)

对扩展开放,对修改关闭。

2、里氏代换原则(Liskov Substitution Principle)

只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。

3、依赖倒转原则(Dependence Inversion Principle)

这个是开闭原则的基础,对接口编程,依赖于抽象而不依赖于具体。

4、接口隔离原则(Interface Segregation Principle)

使用多个隔离的借口来降低耦合度。

5、迪米特法则(最少知道原则)(Demeter Principle)

一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

6、合成复用原则(Composite Reuse Principle)

原则是尽量使用合成/聚合的方式,而不是使用继承。继承实际上破坏了类的封装性,超类的方法可能会被子类修改。}

  1. 工厂模式(Factory Method)

常用的工厂模式是静态工厂,利用static方法,作为一种类似于常见的工具类Utils等辅助效果,一般情况下工厂类不需要实例化。
interface food{}

class A implements food{}
class B implements food{}
class C implements food{}

public class StaticFactory {

private StaticFactory(){}

public static food getA(){  return new A(); }
public static food getB(){  return new B(); }
public static food getC(){  return new C(); }

}

class Client{
//客户端代码只需要将相应的参数传入即可得到对象
//用户不需要了解工厂类内部的逻辑。
public void get(String name){
food x = null ;
if ( name.equals(“A”)) {
x = StaticFactory.getA();
}else if ( name.equals(“B”)){
x = StaticFactory.getB();
}else {
x = StaticFactory.getC();
}
}
} 
2. 抽象工厂模式(Abstract Factory)

一个基础接口定义了功能,每个实现接口的子类就是产品,然后定义一个工厂接口,实现了工厂接口的就是工厂,这时候,接口编程的优点就出现了,我们可以新增产品类(只需要实现产品接口),只需要同时新增一个工厂类,客户端就可以轻松调用新产品的代码。

抽象工厂的灵活性就体现在这里,无需改动原有的代码,毕竟对于客户端来说,静态工厂模式在不改动StaticFactory类的代码时无法新增产品,如果采用了抽象工厂模式,就可以轻松的新增拓展类。
interface food{}

class A implements food{}
class B implements food{}

interface produce{ food get();}

class FactoryForA implements produce{
@Override
public food get() {
return new A();
}
}
class FactoryForB implements produce{
@Override
public food get() {
return new B();
}
}
public class AbstractFactory {
public void ClientCode(String name){
food x= new FactoryForA().get();
x = new FactoryForB().get();
}
}
3.外观模式(Facade)

为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。这句话是百度百科的解释,有点难懂,但是没事,看下面的例子,我们在启动停止所有子系统的时候,为它们设计一个外观类,这样就可以实现统一的接口,这样即使有新增的子系统subSystem4,也可以在不修改客户端代码的情况下轻松完成。
public class Facade {
private subSystem1 subSystem1 = new subSystem1();
private subSystem2 subSystem2 = new subSystem2();
private subSystem3 subSystem3 = new subSystem3();

public void startSystem(){
    subSystem1.start();
    subSystem2.start();
    subSystem3.start();
}

public void stopSystem(){
    subSystem1.stop();
    subSystem2.stop();
    subSystem3.stop();
}

}
4.桥接模式(Bridge)

这里引用下http://www.runoob.com/design-pattern/bridge-pattern.html的例子。Circle类将DrwaApi与Shape类进行了桥接,代码:
interface DrawAPI {
public void drawCircle(int radius, int x, int y);
}
class RedCircle implements DrawAPI {
@Override
public void drawCircle(int radius, int x, int y) {
System.out.println(“Drawing Circle[ color: red, radius: "
+ radius +”, x: " +x+", “+ y +”]");
}
}
class GreenCircle implements DrawAPI {
@Override
public void drawCircle(int radius, int x, int y) {
System.out.println(“Drawing Circle[ color: green, radius: "
+ radius +”, x: " +x+", “+ y +”]");
}
}

abstract class Shape {
protected DrawAPI drawAPI;
protected Shape(DrawAPI drawAPI){
this.drawAPI = drawAPI;
}
public abstract void draw();
}

class Circle extends Shape {
private int x, y, radius;

public Circle(int x, int y, int radius, DrawAPI drawAPI) {
    super(drawAPI);
    this.x = x;
    this.y = y;
    this.radius = radius;
}

public void draw() {
    drawAPI.drawCircle(radius,x,y);
}

}

//客户端使用代码
Shape redCircle = new Circle(100,100, 10, new RedCircle());
Shape greenCircle = new Circle(100,100, 10, new GreenCircle());
redCircle.draw();
greenCircle.draw();
5.代理模式(Proxy)

客户端通过代理类访问,代理类实现具体的实现细节,客户只需要使用代理类即可实现操作。

这种模式可以对旧功能进行代理,用一个代理类调用原有的方法,且对产生的结果进行控制。
interface Source{ void method();}

class OldClass implements Source{
@Override
public void method() {
}
}

class Proxy implements Source{
private Source source = new OldClass();

void doSomething(){}
@Override
public void method() {
    new Class1().Func1();
    source.method();
    new Class2().Func2();
    doSomething();
}

}

举例过来,除去这些和上课的内容还有14种设计模式,其实设计模式只是一种理念而不是一成不变的,更多的还是需要我们自身去设计和制造。

GIT的使用:
一:Git是什么?

Git是目前世界上最先进的分布式版本控制系统。
  二:windows下安装:
  在官网下载好应用程序后:
  在这里插入图片描述
  第一步:进入项目目录,初始化(只需要执行一次)

git init
···
第二步:添加要管理的文件
git add .    	// 添加所有文件
git add Test.java // 只添加Test.java文件

查看git的状态:git status

第三步:让修改被记录下来
git commit -m '初次提交'

如果要回退到某个版本
首先列出提交的日志: git log
使用 git reset --hard 版本号 来回退到某个版本
 add 要忽略某些文件或文件夹
.gitignore  在其中添加需要忽略的文件或文件夹的名字
(在IDEA中还需要添加.idea文件夹)
out
src
IDEA中的git使用
在github上添加一个远程仓库
              远程仓库名   远程仓库地址
git remote add origin  +自己的远程仓库地址   

git remote -v 查看关联的远程仓库

git push origin master  // 将本地代码推送到远程仓库origin的master分支上

TCP/IP协议:
	tcp 传输控制协议
	ip 网络地址协议
应用层常见协议
   http 超文本传输协议(访问网页)
   telnet 远程登录
打包和确定目的应用程序
	TCP(保障数据的可靠有序), UDP 不保证
互联网层使用的是:ip协议
而我们一般的JAVA-web开发大多使用的google和firefox浏览器,因为可以直接查询底层源码,而IE浏览器更新较慢兼容性不够好。
阻塞IO:BIO Blocking
基础的服务器使用:
	ServerSocket服务器的端点:
		new ServerSocket(端口号); // 每个程序只能占用一个端口, 自己的程序用4位以上的端口
		.accept(); // 等待, 直到客户端连接为止
	new Thread(new Runnable(){
	public void run() {
		// 把io相关的操作放在线程内执行,让每个线程处理一个io操作,避免io阻塞
					}
			}).start();

阻塞io的特点,一个socket执行io读写操作会阻塞其它io的读写
一个线程内io的读写是串行的,可以用多线程的方法来解决, 建议使用线程池而不是自己手动创建线程

并发量高的时候需要使用线程池。

compraterto接口的简化:
new Thread(new Runnable(){
	public void run(){}
}).start();

new Thread(()->{}).start();

参数部分  特殊符号  代码体
( 形参 )  ->       {  执行的代码 }

针对单方法的接口,才能使用lambda表达式简化

()->{}   参数部分可以省略类型, 如果代码体部分只有一条语句,{} 也可以省略,且不能加;号
如果代码体部分 只有一条语句,那么它还可以充当返回值,从而省略return(并不建议过多省略)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值