文章目录
1 枚举类
如何自定义枚举类
JDK5.0之前需要使用自定义枚举类
JDK5.0之后新增的enum关键字用于定义枚举类
自定义枚举类
- 私有化类的构造器,保证不能在类的外部创建其对象
- 在类的内部创建枚举类的实例。声明为:public static final
- 对象如果有实例变量,应该声明为private final,并在构造器中初始化
class Season{
private final String SEASONNAME;//季节的名称
private final String SEASONDESC;//季节的描述
private Season(String seasonName,String seasonDesc){
this.SEASONNAME = seasonName;
this.SEASONDESC = seasonDesc;
}
public static final Season SPRING = new Season("春天", "春暖花开");
public static final Season SUMMER = new Season("夏天", "夏日炎炎");
public static final Season AUTUMN = new Season("秋天", "秋高气爽");
public static final Season WINTER = new Season("冬天", "白雪皑皑");
如何使用关键字enum定义枚举类
使用 enum 定义的枚举类默认继承了 java.lang.Enum类,因此不能再
继承其他类
枚举类的构造器只能使用 private 权限修饰符
枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾)。列出的
实例系统会自动添加 public static final 修饰
必须在枚举类的第一行声明枚举类对象
enum Season1{
// TODO 1 提供当前枚举类对象,多个对象之间用“,” 末尾用“;”
SPRING("春天","春风又绿江南岸"),
SUMMER("夏天","映日荷花别样红"),
AUTUMN("秋天","秋水共长天一色"),
WINTER("冬天","窗含西岭千秋雪");
//TODO 2 声明Season对象的属性 private final 修饰
private final String seasonName;
private final String seasonDesc;
//TODO 3 构造器
private Season1(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
Enum类的主要方法
实现接口的枚举类
和普通 Java 类一样,枚举类可以实现一个或多个接口
若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只
要统一实现该方法即可。
若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式,
则可以让每个枚举值分别来实现该方法
interface Info{
void show();
}
//使用enum关键字枚举类
enum Season1 implements Info{
//1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束
SPRING("春天","春暖花开"){
@Override
public void show() {
System.out.println("春天在哪里?");
}
},
SUMMER("夏天","夏日炎炎"){
@Override
public void show() {
System.out.println("宁夏");
}
},
AUTUMN("秋天","秋高气爽"){
@Override
public void show() {
System.out.println("秋天不回来");
}
},
WINTER("冬天","冰天雪地"){
@Override
public void show() {
System.out.println("大约在冬季");
}
};
2 注解
2.1 注解(Annotation)概述
从JDK 5.0 开始,Java增加了对元数据(MetaData)的支持,也就是Annotation(注解)
Annotation就是代码里面的特殊标记,类加载运行时被读取,并执行相应的处理
Annotation可以在不改变原有逻辑的情况下,嵌入一些补充信息(代码分析工具、开发工具、部署工具)
Annotation可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量
Annotation的“name=value”对中
在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,
忽略警告等。在JavaEE/Android中注解占据了更重要的角色,例如
用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗
代码和XML配置等。
未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以
上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的
Struts2有一部分也是基于注解的了,注解是一种趋势,一定程度上
可以说:框架 = 注解 + 反射 + 设计模式。
2.2 常见的Annotation示例
使用Annotation时要在前面增加@符号,并把该Annocation当成一个修饰符使用
2.3 自定义Annotation
//TODO 1 用@interface声明
public @interface MyAnnotation {
String[] value();
}
//TODO 2 内部定义成员,通常使用value表示
//TODO 3 可以使用默认值 用default表示
//TODO 4 没有默认值需要指定值
2.4 JDK中的元注解
修饰注解的注解
2.5 利用反射获取注解信息(在反射部分涉及)
2.6 JDK 8中注解的新特性
3 网络编程
3.2 网络通信要素概述
3.3 IP & port
//得到具体的ip地址
InetAddress inet1 = InetAddress.getByName("192.168.10.14");///192.168.10.14
System.out.println(inet1);
//解析域名
InetAddress inet2 = InetAddress.getByName("www.baidu.com");//www.baidu.com/110.242.68.3
System.out.println(inet2);
//本地地址
InetAddress localinet = InetAddress.getLocalHost();//LAPTOP-2GD32TP2/192.168.137.1
System.out.println(localinet);
System.out.println(inet2.getHostName());//www.baidu.com
System.out.println(inet2.getAddress());//[B@14ae5a5
例子1:客户端发送信息给服务端,服务端将数据显示在控制台上
//1.创建服务器端的ServerSocket,指明自己的端口号
ss = new ServerSocket(8899);
//2.调用accept()表示接收来自于客户端的socket
socket = ss.accept();
//3.获取输入流
is = socket.getInputStream();
//不建议这样写,可能会有乱码
// byte[] buffer = new byte[1024];
// int len;
// while((len = is.read(buffer)) != -1){
// String str = new String(buffer,0,len);
// System.out.print(str);
// }
//4.读取输入流中的数据
baos = new ByteArrayOutputStream();
byte[] buffer = new byte[5];
int len;
while((len = is.read(buffer)) != -1){
baos.write(buffer,0,len);
}
System.out.println(baos.toString());
System.out.println("收到了来自于:" + socket.getInetAddress().getHostAddress() + "的数据");
URL编程
URL url = new URL("http://localhost:8080/examples/beauty.jpg?username=Tom");
// public String getProtocol( ) 获取该URL的协议名
System.out.println(url.getProtocol());
// public String getHost( ) 获取该URL的主机名
System.out.println(url.getHost());
// public String getPort( ) 获取该URL的端口号
System.out.println(url.getPort());
// public String getPath( ) 获取该URL的文件路径
System.out.println(url.getPath());
// public String getFile( ) 获取该URL的文件名
System.out.println(url.getFile());
// public String getQuery( ) 获取该URL的查询名
System.out.println(url.getQuery());
URL url = new URL("http://localhost:8080/examples/beauty.jpg");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.connect();
is = urlConnection.getInputStream();
fos = new FileOutputStream("day10\\beauty3.jpg");
byte[] buffer = new byte[1024];
int len;
while((len = is.read(buffer)) != -1){
fos.write(buffer,0,len);
}
System.out.println("下载完成");