黑马程序员——GUI 网络编程 正则

-----------android培训java培训、java学习型技术博客、期待与您交流!------------ 

一,GUI

GUIGraphicalUser Interface,即图形用户界面,用于计算机与用户交互的一种方式。

计算机与用户交互的两种方式:GUICL

java也将这种界面封装为对象,其中的对象都放在了两个包中:java.Awt包和javax.Swing包。


继承关系图



布局管理器

1,布局:容器中的组件排列方式

2,常见的布局管理器:

        1FlowLayout:流式布局管理器。从左向右排列,是Panel默认的布局管理器

        2BorderLayout:边界式布局管理器,东南西北中的排列方式,是Frame的默认布局管理器。如果窗体中只有一个组件,将会覆盖整个窗体。

        3GridLayout:网格式布局管理器,规则的矩阵

        4CardLayout:卡片式布局管理器,即选项卡

        5GridBayLayout:网格包布局管理器,非规则矩阵



窗体创建过程


创建Frame窗体:

        Frame f = new Frame("my Frame");//可设置标题,即窗体名字

对窗体进行基本设置:如大小,位置,布局等:

        f.setSize(int wight,int hight);//窗体大小设置

        f.setLocation(int x,int y);//窗体显示位置设置,横纵坐标

        f.setBounds(int x,int y,int wight,int hight),也可以直接用这个方法对大小和位置设置

        f.setLayout(Layout layout),参数为指定的布局管理器,如FlowLayout

定义组件:

       如Button b = new Button(my Button);//可设置组件的名称

将组件通过窗体的add方法添加到窗体中:

        f.add(b);//将按钮组件添加进窗体

显示窗体:

        f.setVisible(boolean b);//通过设置参数是true还是false是否显示窗体


事件监听机制


步骤:

        1)确定事件源(容器或组件)。通过事件源对象的addXXXListener()方法将监听器注册到该事件源上。该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。

        2)一般用匿名内部类来表示。在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)






示例:

frame.addWindowListener(new WindowAdapter()  
    {  
        public void windowClosing(WindowEvent e)  
        {  
            System.exit(0);  
        }  
    });  


菜单:Menu


先创建菜单条,再创建菜单,每一个菜单中建立菜单项。也可以菜单添加到菜单中,作为子菜单。通过Frame的setMenuBar()方法,将菜单添加到Frame中。


二,网络编程


网络通信三要素:IP地址,端口号,传输协议

IP地址:java中对应的是InetAddress类,存在于java.net包中。

端口号:

        a,用于标识进程的逻辑地址,不用进程的标识。

        b,有效端口:0 ~65535,系统使用或保留的端口是:0~ 1024

传输协议:

        即通信规则,包含TCPUDP协议



UDP

        是面向无连接,明确了对方的端口,无论在不在网上,只管传输,不在就会丢失数据。只求速度,应用于网络视频会议和聊天等应用程序中。

协议特点:

         a、面向无连接,即将数据及源和目的封装成数据包中,不建立链接的发送

         b、每个数据包的大小限制在64K之内

         c、因无连接,是不可靠的协议

         d、不建立连接,速度快。

TCP

        是面向连接的,必须连接成功才能传输数据,应用于下载等程序上

协议特点:

         a、面向连接,在建立连接后,形成传输数据的通道

         b、在连接中进行大数据量的传输

         c、通过三次握手完成连接,是可靠的协议

         d、必须建立连接,效率稍慢

三次握手:第一次本方发送请求,第二次对方确认连接,第三次本方再次确认连接成功。


Socket

Socket就是为网络服务提供的一种机制,通信的两端都有Socket网络通信其实就是Socket间的通信,数据在两个Socket间通过IO传输。


UDP传输

通过类DatagramSocket

方法:

        1)创建 UDPSocket发送服务对象:

              DatagramSocket(),不指定端口。DatagramSocket(int port),指定端口。

        2)发送:void send(DatagramPacket p)

        3)接收:void receive(DatagramPacket p)


送端与接收端是两个独立的运行程序。

在发送端,要在数据包对象中明确目的地IP及端口。

在接收端,要指定监听的端口。


示例:发送端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
class  UDPSend
{
	public static void main(String[] args) throws Exception
	{
		
		DatagramSocket ds = new DatagramSocket(8000);//1,创建udp服务

		//2,确定数据,并封装成数据包。DatagramPacket(byte[] buf, int length, InetAddress address, int port) 

		byte[] buf =  "黑马程序员".getBytes();
		DatagramPacket dp = 
			new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.254"),10000);

		
		ds.send(dp);//3,通过socket服务,通过send方法将数据包发送出去。
		ds.close();//4,关闭资源。

	}
}


接收端:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
class  UDPReceive
{
	public static void main(String[] args) throws Exception
	{
		
		DatagramSocket ds = new DatagramSocket(10000);//1.创建udp socket,建立端点。
		while(true)
		{
		
		byte[] buf = new byte[1024];
		DatagramPacket dp = new DatagramPacket(buf,buf.length);//2.定义数据包,用于存储数据。
		
		ds.receive(dp);//3.阻塞式方法,通过服务的receive方法将收到数据存入数据包中。
		//4.通过数据包的方法获取其中的数据。
		String ip = dp.getAddress().getHostAddress();

		String data = new String(dp.getData(),0,dp.getLength());

		int port = dp.getPort();

		System.out.println(ip+"::"+data+"::"+port);

		}

	}
}


TCP传输

1TCP分客户端和服务端。客户端对应的对象是Socket,服务端对应的对象是ServerSocket

方法:

        创建客户端对象:

              Socket():创建空参数的客户端对象,一般用于服务端接收数据

              Socket(String host,int port),指定要接收的IP地址和端口号

        创建服务端对象:ServerSocket(int port):指定接收的客户端的端口

        Socket accept():监听并接受到此套接字的连接

        void shutdownInput():此套接字的输入流至于“流的末尾”

        void shutdownOutput():禁用此套接字的输出流

        InputStream getInputStream():返回此套接字的输入流,Socket对象调用

        OutputStream getOutputStream():返回套接字的输出流,Socket对象调用



示例:客户端


import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
class services {
	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket sk = new Socket("zero-pc",9555);//建立服务
		FileInputStream fis = new FileInputStream("E:\\mytext.java");//读取文件
		OutputStream out = sk.getOutputStream();//写入到网络输出流。
		byte[] by = new byte[1024];
		int lens=0;
		while((lens=fis.read(by))!=-1)
		{
			
			out.write(by,0,lens);
			
		}
		sk.shutdownOutput(); // 相当于发送结束标记-1。
		InputStream in = sk.getInputStream();//读取服务端信息
		byte[] bu = new byte[1024];		
		int len =in.read(bu);//阻塞式方法。
		System.out.println(new String(bu, 0, len));
		fis.close();
		sk.close();		
	}
}



服务端:

class service2 {
	public static void main(String[] args) throws IOException {
		ServerSocket ss = new ServerSocket(9555);//建立服务
		Socket s = ss.accept();//获取客户端对象
		//读取网络输入流  并写入数据库。
		String add = s.getInetAddress().getHostAddress();//获取地址
		System.out.println(add+"已连接");
		InputStream in =s.getInputStream();
		FileOutputStream fos = new FileOutputStream("E:\\copy.java");
		byte[] buf = new byte[1024];
		int lens = 0;
		while((lens= in.read(buf))!=-1)//阻塞方法  等待-1标记。
		{
			
			fos.write(buf, 0, lens);
		}	
		OutputStream out = s.getOutputStream();//返回信息
		out.write("上传成功".getBytes());
		ss.close();//关闭资源。
		s.close();
		fos.close();					
	}			
}


三,正则表达式

正则表达式:符合一定规则的表达式。

        作用:用于专门操作字符串。

        特点:用于一些特定的符号来表示一些代码操作,这样可以简化书写。所以学习正则表达式,就是在学习一些特殊符号的使用。

        好处:可以简化对字符串的复杂操作。

        弊端:符合定义越多,正则越长,阅读性越差。


常用符号:


[a-zA-Z]               a z A  Z,两头的字母包括在内(范围)

 \d                         数字: [0-9]

 \D                       非数字: [^0-9]

 \w                       单词字符:[a-zA-Z_0-9]

 \W                      非单词字符:[^\w]

 X*                       X,零次或多次

 X+                       X,一次或多次

X{n}                    X,恰好 n

 X{n,}                   X,至少 n

X{n,m}                X,至少 n次,但是不超过 m 



具体功能

主要有四种具体功能:匹配、切割、替换和获取

匹配:String类中的booleanmatches(String regex)方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false

切割:String类中的String[]split(String regex)方法。 

替换: String replaceAll(String regex,String replacement)方法。如果regex中有定义组(),可以在第二参数中通过$符号获取正则表达式中的已有的组。

获取:将字符串中的符合规则的子串取出。

操作步骤:

1,将正则表达式封装成对象。
2,让正则对象和要操作的字符串相关联。
3,关联后,获取正则匹配引擎。
4,通过引擎对符合规则的子串进行操作,比如取出。

获取示例:

import java.util.regex.*;
public class reges_demo {

	public static void main(String[] args)
	{

		String str="gherh98-17-10sggsdg iuih 78-14-36grgrg";
		String regex="\\d{2}-\\d{2}-\\d{2}";<span style="font-family: Arial, Helvetica, sans-serif;">//规则</span>
		Pattern p=Pattern.compile(regex);//将规则封装成对象。
		Matcher m=p.matcher(str);//获取匹配器对象
		while(m.find())//匹配查找子串
			{
			System.out.println(m.group());//获取子串  
			}
	}

}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值