一、GUI
1.控件继承关系
Component
Container
Window
Frame
Dialog
Panel
Button
Lable
Checkbox
TextComponet
TextArea
TextField
2.布局方式
FlowLayout(流式布局从左到右顺序排列,Panel是布局管理器)
BorderLayout(边界布局,东南西北中,Frame是布局管理器)
GridLayout(网格布局管理器,规则的矩阵)
CardLayout(卡片布局管理器)
GridBagLayout(网格布局管理器)
3.事件监听机制(想要知道哪个组件具备什么样的特有监听器。需要查看该组件对象的功能。
)
监听器(监听引发事件的动作(事件处理方件))
<注册到> 事件源(组件)
<监听器所监听的动作作于事件源上> 外部动作
<产生事件对象> 事件对象
<将事件对象传给事件处理> 监听器
二。网络编程
1.网络模型和网络通讯要素
网络模型
OSI模型 TCP/IP模型
应用层 应用层
表示层
会话层
传输层 传输层
网络层 网际层
数据链路层 主机至网络层
物理层
网络通讯要素
IP地址(网络中设备的标识)
端口号(标识网络应用程序 0-65535,0-1024系统使用)
传输协议(通讯规则 UDP协议,TCP协议)
InetAddress类
InetAddress getByName()
InetAddress[] getAllByName()
InetAddress getLocalName()
String getHoastAddress()
String getHostName()
InetAddress[] its=InetAddress.getAllByName("www.sina.com");
for(InetAddress i:its)
{
System.out.println(i.getHostName()+":"+i.getHostAddress());
}
2.UDP(qq,直播)
特点
将数据及源和目的封装成数据包中,不需要建立连接
每个数据报的大小限制在64K内
因无连接,是不可靠协议
不需要建立连接,速度快。
UDP传送端
建立UDP Socket服务 DatagramSocket()
获取数据
获取数据和目的地址封装到数据报中DatagramPacket(byte[],数据长度,InetAddress,端口)
发送 DatagramSocket.Send(DatagramPacket)
关闭资源
UDP接收端
建立UDP Socket服务 DatagramSocket(端口)
建产接收的数据报DatagramPacket(byte[],数据组长度)
接收DatagramSocket.receive((DatagramPacket))
解读数据报中的数据 new String(DatagramPacket.getDate(),0,DatagramPacket.getLength())
关闭资源
qq将传送端与接收端封装到类中(实现Runnable接口)启用多个线程。
3.TCP(下载)
特点
建立连接,形成传输数据的通道
在连接中进行大数据量传输
通过三次传递完成连接,可靠协议
必须建产连接,效率会稍低
TCP客户端
1.建立Socket(InetAddress,),指定连接的主机和端口
2.获取信息
3.将信息通过Socket.getOutputStream()的流对象传输.//shutdownOutput() 禁用此套接字的输出流,发送-1
4.通过Socket.getInputStream()的流对象获得服务器响应信息
5.关闭资源。Socket.close()
TCP服务端
1.建立ServerSocket(),监听端口
2.获取访问的Socket (ServerSocket.accpt())
3.通过Socket中的输入输出流进行交流。
4.关闭Socket资源
4.TCP-客户端并发
ServerSocket(int port)
ServerSocket(int port, int backlog) backlog 指定最大并发数
将访问的Socket对象获取放在主线程中,将Socket流操作与资源关闭让子线程运行。
{
ServerSocket sskt=new ServerSocket(5000,20);
While(true)
{
Socket skt=sskt.accpet();
new Thread(new xxx(skt)).Start();
}
}
class xxx implements Runnable
{
Socket skt;
public xxx(Socket skt)
{
this.skt=skt;
}
public void run()
{
// skt相关流操作;
}
}
5.服务器
Socket信息走传输层。获取的信息含信息头。
URL (一个统一资源定位符,它是指向互联网“资源”的指针)
URL url = new URL("http://192.168.1.254/myweb/demo.html?name=haha&age=30");
String getFile()
获取此 URL 的文件名。
String getHost()
获取此 URL 的主机名(如果适用)。
String getPath()
获取此 URL 的路径部分。
int getPort()
获取此 URL 的端口号。
String getProtocol()
获取此 URL 的协议名称。
String getQuery()
获取此 URL 的查询部
URLConnection openConnection()
返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。
URLConnection 应用层 (它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源)
OutputStream getOutputStream()
返回写入到此连接的输出流。
InputStream getInputStream()
返回从此打开的连接读取的输入流。
//例子
URL url=new URL("http://www.baidu.com/");
URLConnection urlc=url.openConnection();
InputStream outs=urlc.getInputStream();
byte[] byts=new byte[1024*1024];
int i;
while(( i=outs.read(byts))!=-1)
{
System.out.println(new String(byts,0,i));
}
outs.close();
6.域名解析(解析主机名对应的ip地址 www.sina.com.cn)
先本地(C:\WINDOWS\system32\drivers\etc\hosts)- TCP-IP设置的域名中找 - 默认网络域名解析服务器上找(有时间限制)
三。正则表达式
正则表达式:符合一定规则的表达式。
作用:用于专门操作字符串。
特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。
所以学习正则表达式,就是在学习一些特殊符号的使用。
好处:可以简化对字符串的复杂操作。
弊端:符号定义越多,正则越长,阅读性越差。
1.匹配
boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式。
2.切割
String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。
3.替换
String replaceAll(String regex, String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
4.获取
将正则表达式封装成对象。
让正则对象和要操作的字符串相关联。
关联后,获取正则匹配引擎。
通过引擎对符合规则的子串进行操作,比如取出。
String str = "ming tian jiu yao fang jia le ,da jia。";
System.out.println(str);
String reg = "\\b[a-z]{4}\\b";
//将规则封装成对象。
Pattern p = Pattern.compile(reg);
//让正则对象和要作用的字符串相关联。获取匹配器对象。
Matcher m = p.matcher(str);
//System.out.println(m.matches());//其实String类中的matches方法。用的就 是Pattern和Matcher对象来完成的。
//只不过被String的方法封装后,用起来较为简单。但是功能却单一。
while(m.find())
{
System.out.println(m.group());
System.out.println(m.start()+"...."+m.end());
}
5.练习
//
String st=new String(byts,0,i);
// System.out.println(st);
String reg="\\w+@\\w+(\\.\\w+)+";
Pattern patn=Pattern.compile(reg);
Matcher mch=patn.matcher(st);
while(mch.find())
{
System.out.println(mch.group());
}
6.网页爬虫()
URL url=new URL("http://bbs.itheima.com/thread-110862-1-1.html");
URLConnection urlc=url.openConnection();
InputStream outs=urlc.getInputStream();
byte[] byts=new byte[1024*1024];
int i;
while(( i=outs.read(byts))!=-1)
{
String st=new String(byts,0,i);
// System.out.println(st);
String reg="\\w+@\\w+(\\.\\w+)+";
Pattern patn=Pattern.compile(reg);
Matcher mch=patn.matcher(st);
while(mch.find())
{
System.out.println(mch.group());
}
}
outs.close();
|
|