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