Java学习:枚举类、常见设计模式和网络

一、枚举类和常见设计模式知识体系
在这里插入图片描述
二、主要代码
1.枚举类

public enum Sex {
    /**
     * 性别,可以在有参构造存在时,直接初始化
     */
    MALE("男"),
    FEMALE("女");
    /**
     * 构造方法(不能私有)
     */
    private String cnName;
     Sex(String cnName){
         this.cnName=cnName;
    }
    /**
     * 普通方法
     */
    public int test(int a){
        return a;
    }
}

注意:构造方法的私有化,而不是公有的
2.设计模式
(1)单例模式
a)饿汉式单例

public class Single {
    /**
     * 空参构造私有,别的类不能创建此类的对象
     */
    private Single(){

    }

    /**
     * 自己创建此类的实例,单例模式只能有一个实例
     */
   private static final Single SC= new Single();
    /**
     * 或取这唯一的实例
     */
    public static Single getInstance(){
        return SC;
    }
}

b)懒汉式

public class Single2 {
    /**
     * 构造方法
     */
    public Single2(){

    }
    /**
     * 懒汉模式,实例用的时候才创建,不用就不创建
     */
    private static Single2 SC;
    public static Single2 getInstance(){
        //加入if,是为了保证只进行一次的对象的创建
        if(SC==null){
            SC = new Single2();
        }
        return SC;
    }
}

c)懒汉式优化

public class Single4 {
    static {
        System.out.println("单例Single4被加载");
    }
    /**
     * 无参构造方法
     */
    public Single4(){
    }

    /**
     * 由静态内部类创建它的实例
     */
    public static class single{
        public static final Single4 SC=new Single4();
    }
    /**
     * 得到实例(静态类型,由类名调用)
     */
    public static Single4 getInstabce(){
        return single.SC;
    }
    /**
     * 定义一个方法
     */
    public static void test(){
        System.out.println("单例模式的方法");
    }
}

可以将饿汉式和懒汉式对照理解
(2)建造器模式

public class Teacher {
    private String name;
    private int age;

    @Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Teacher(String name, int age) {
        this.name=name;
        this.age=age;
    }

    public static class TeagherBuilder{
        private String name;
        private int age;
        public TeagherBuilder name(String name){
            this.name=name;
            return this;
        }
        public TeagherBuilder age(int age){
            this.age=age;
            return this;
        }
        public Teacher builder(){
            return new Teacher(this.name,this.age) ;
        }
    }
}

注意:测试时对象的创建,一定要调用建造器的方法
二、网络编程
此处,话不多说,用一个例子来说明,客户端和服务器之间进行数据的读取。

public class server {
    public static void main(String[] args) throws IOException {
        //1.创建对象
        ServerSocket server = new ServerSocket(5001);
        while (true){
            //2.调用accept()等待客户端连接
            Socket accept = server.accept();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        handle(accept);

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }

    }

    private static void handle(Socket accept) throws IOException {
        //3.接收客户端的数据
        InputStream in = accept.getInputStream();
        //4.拿到输出流向客户写入
        OutputStream out = accept.getOutputStream();
        int len=0;
        byte[] bytes = new byte[1024 * 8];
        while ((len=in.read(bytes))!=-1){
            String result = new String(bytes, 0, len, "utf-8");
            out.write(("服务器返回结果:"+result).getBytes());
        }
    }
}
public class client {
    public static void main(String[] args) throws IOException {
        //1.创建客户端对象
        Socket socket = new Socket("localhost", 5001);
        //2.发送数据
        OutputStream out = socket.getOutputStream();
        out.write("你好".getBytes());
        out.write("Hello".getBytes());
        //3.接收数据
        InputStream in = socket.getInputStream();
        int len=0;
        byte[] bytes = new byte[1024 * 8];
        while ((len=in.read(bytes))!=-1){
            String s = new String(bytes, 0, len, "utf-8");
            System.out.println(s);
        }
    }
}

这个例子中,加入多线程可以同时进行多个客户端的请求,通过例子才能加深理解。
三、总结
网络这块,之前在做安卓项目时,没有基础看到就头疼,现在是明白了一点点,也只是一点点,做一个简单的爬虫问题百出,做不出来,只能再抽时间一点一点的解决。
说好的找一个适合自己的学习编程的方法,然而,这周忙的压根没时间来学习编程啊!最近压力实在太大,压的自己有点浮躁,不过对于这种生活,似乎有有点喜欢与兴奋,就让我在浮躁中慢慢的沉淀吧!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值