—————————— ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ——————————

GUI(Graphical User Interface)(图形用户接口):用图形的方式,来 显示计算机操作的界面,这样更方便更直观

CLI(Conmand line User Interface)(命令行用户接口):就是常见的Dos命令操作。需要记忆一些常用的命令,操作不直观

比如:创建文件夹,或者删除文件夹等等

Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中

  java.Awt(Abstract Window ToolKit)(抽象窗口工具包),需要调用本地系统方法实现功能。重量级控件。

  javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,轻量级控件。

              继承关系图

  

布局管理器:容器中组件的排放方式,就是布局

  常见的布局管理器

    FlowLayout(流式布局管理器)①:从左到右的顺序排放。②:Panel默认的布局管理器。

    BorderLayout(边界布局管理器)①:东,南,西,北,中。②:Frame默认的布局管理器。

    GridLayout(网络布局管理器)①:规矩的矩形。

    CardLayout(卡片布局管理器)①:选项卡。

    GridBagLayout(网络包布局管理器)①:非规矩的矩阵。

  建立一个简单的窗体

    Containe常用子类:Window  Panel(面板,不能单独存在)

    Window常用子类:Frame  Dialog

    简单的窗体创建过程

      Frame f = new Frame("my window");

      f.setLayout(new FlowLayout());

      f.setSize(500,400);//设置窗体大小

      f.setLocation(300,200);//设置窗体出现在屏幕的位置

      f.setVisible(true);

  事件监听机制

    组成【事件源(组件),事件(Event),监听器(Listener),事件处理(引发事件后处理方式)】

            事件监听机制流程图

  

  确定事件源(容器或组件)

  通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。

  该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。

  一般用匿名内部类来表示。

  在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。

  事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)

菜单

MenuBar,Menu,MenuItem

先创建菜单条,再创建菜单,每一个菜单中建立菜单项。

也可以菜单添加到菜单中,作为子菜单。

通过setMenuBar()方法,将菜单添加到Frame中。

练习:完成一个简单的记事本程序。

网络编程

  网络模型 :①:OSI参考模型。 ②:TCP/IP参考模型。

   网络通讯要素 :①:IP地址。②:端口号。③:传输协议。

      

  

  网络通信要素

    IP地址:InetAddress:①网络中设备的标识。②不宜记忆,可用主机名。③本地回环地址:127.0.0.1 主机名:localhost。

    端口号:①用于标识进程的逻辑地址,不同进程的标识。②有效端口:0~65535,其中0~1024系统使用或保留端口。

    传输协议:①通信的规则。②常见协议:TCP,UDP。

   UDP:①将数据及源和目的封装成数据包中,不需要建立连接。②每个数据包的大小限制在64k内。③因无连接,是不可靠协议。④不需要建立连接,速度快。

   TCP:①建立连接,形成传输数据的通道。②在连接中进行大数据量传输。③通过三次握手完成连接,是可靠协议。④必须建立连接,效率会稍低。

      TCP/IP协议:Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。

Socket:★★★★,套接字,通信的端点。

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

  UDP传输:①SatagramSocket与DatagramPacke。②建立发送端,接受端。发送端,接受端是两个独立的运行程序。③建立数据包。④调用Socket的发送接收方法。⑤关闭Socket。

  TCP传输:①Socket和ServerSocket。②建立客户端和服务器端。客户端,服务器端是两个独立的运行程序。③建立连接后,通过Socket中的IO流进行数据的传输。④关闭Socket。 

/*演示tcp传输
1,tcp分客户端和服务端。
2, 客户端对应的对象是Socket。
    服务端对应的对象是ServerSocket。

需求:给服务端发送给一个文本数据。
步骤:
1,创建Socket服务。并指定要连接的主机和端口。
*/
class  TcpClient{
    public static void main(String[] args) throws Exception {
        //创建客户端的socket服务。指定目的主机和端口
        Socket s = new Socket("192.168.1.254",10003);
        //为了发送数据,应该获取socket流中的输出流。
        OutputStream out = s.getOutputStream();
        out.write("tcp ge men lai le ".getBytes());
        s.close();
    }
}
/*
需求:定义端点接收数据并打印在控制台上。
服务端:
1,建立服务端的socket服务。ServerSocket();并监听一个端口。
2,获取连接过来的客户端对象。通过ServerSokcet的 accept方法。没有连接就会等,所以这个方法阻塞式的。
3,客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。并打印在控制台。
4,关闭服务端。(可选)
*/
class  TcpServer{
    public static void main(String[] args) throws Exception{
        //建立服务端socket服务。并监听一个端口。
        ServerSocket ss = new ServerSocket(10003);
        //通过accept方法获取连接过来的客户端对象。
        while(true){
        Socket s = ss.accept();
        String ip = s.getInetAddress().getHostAddress();
        System.out.println(ip+".....connected");
        //获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据。
        InputStream in = s.getInputStream();
        byte[] buf = new byte[1024];
        int len = in.read(buf);
        System.out.println(new String(buf,0,len));
        s.close();//关闭客户端.
        }
    }
}

//需求:上传文件。
import java.io.*;
import java.net.*;
class  Client{
    public static void main(String[] args) throws Exception{
        Socket s = new Socket("192.168.1.254",10006);
        BufferedReader bufr =
            new BufferedReader(new FileReader("IPDemo.java"));

//定义目的,将数据写入到socket输出流。发给服务端。
        //BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        PrintWriter out = new PrintWriter(s.getOutputStream(),true);
        String line = null;
        while((line=bufr.readLine())!=null){
            out.println(line);
        }
        s.shutdownOutput();//关闭客户端的输出流。相当于给流中加入一个结束标记—1.

   //定义一个socket读取流,读取服务端返回的信息。      
        BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String str = bufIn.readLine();
        System.out.println(str);
        bufr.close();
        s.close();
    }
}
class  Server{
    public static void main(String[] args) throws Exception{
        ServerSocket ss = new ServerSocket(10006);
        Socket s = ss.accept();
        String ip = s.getInetAddress().getHostAddress();
        System.out.println(ip+"....connected");

   //读取socket读取流中的数据。
        BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));

//目的。socket输出流。将大写数据写入到socket输出流,并发送给客户端。
        //BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        PrintWriter out  = new PrintWriter(new FileWriter("server.txt"),true);
        String line = null;
        while((line=bufIn.readLine())!=null){
            //if("over".equals(line))
                //break;
            out.println(line);
        }
        PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
        pw.println("上传成功");
        out.close();
        s.close();
        ss.close();
    }
}

/*需求:上传图片。
客户端。
1,服务端点。
2,读取客户端已有的图片数据。
3,通过socket 输出流将数据发给服务端。
4,读取服务端反馈信息。
5,关闭。*/
import java.io.*;
import java.net.*;
class  PicClient{
    public static void main(String[] args)throws Exception {
        if(args.length!=1){
            System.out.println("请选择一个jpg格式的图片");
            return ;
        }
        File file = new File(args[0]);
        if(!(file.exists() && file.isFile())){
            System.out.println("该文件有问题,要么补存在,要么不是文件");
            return ;
        }
        if(!file.getName().endsWith(".jpg")){
            System.out.println("图片格式错误,请重新选择");
            return ;
        }
        if(file.length()>1024*1024*5){
            System.out.println("文件过大,没安好心");
            return ;
        }
        Socket s = new Socket("192.168.1.254",10007);
        FileInputStream fis = new FileInputStream(file);
        OutputStream out = s.getOutputStream();
        byte[] buf = new byte[1024];
        int len = 0;
        while((len=fis.read(buf))!=—1){
            out.write(buf,0,len);
        }
        //告诉服务端数据已写完
        s.shutdownOutput();
        InputStream in = s.getInputStream();
        byte[] bufIn = new byte[1024];
        int num = in.read(bufIn);
        System.out.println(new String(bufIn,0,num));
        fis.close();
        s.close();
    }
}
//服务端
class PicThread implements Runnable{
    private Socket s;
    PicThread(Socket s){
        this.s = s;
    }
    public void run(){
        int count = 1;
        String ip  = s.getInetAddress().getHostAddress();
        try{
            System.out.println(ip+"....connected");
            InputStream in = s.getInputStream();
            File dir =  new File("d:\\pic");
            File file = new File(dir,ip+"("+(count)+")"+".jpg");
            while(file.exists())
                file = new File(dir,ip+"("+(count++)+")"+".jpg");
            FileOutputStream fos = new FileOutputStream(file);
            byte[] buf = new byte[1024];
            int len = 0;
            while((len=in.read(buf))!=—1){
                fos.write(buf,0,len);
            }
            OutputStream out = s.getOutputStream();
            out.write("上传成功".getBytes());
            fos.close();
            s.close();
        }
        catch (Exception e){
            throw new RuntimeException(ip+"上传失败");
        }
    }
}
class  PicServer{
    public static void main(String[] args) throws Exception{
        ServerSocket ss = new ServerSocket(10007);
        while(true){
            Socket s = ss.accept();
            new Thread(new PicThread(s)).start();
        }
        //ss.close();
    }
}

/*
编写一个聊天程序。
有收数据的部分,和发数据的部分。
这两部分需要同时执行。
那就需要用到多线程技术。
一个线程控制收,一个线程控制发。
因为收和发动作是不一致的,所以要定义两个run方法。
而且这两个方法要封装到不同的类中。
*/
import java.io.*;
import java.net.*;
class Send implements Runnable{
    private DatagramSocket ds;
    public Send(DatagramSocket ds){
        this.ds = ds;
    }
    public void run(){
        try{//定义读取键盘数据的流对象。
            BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
            String line = null;
            while((line=bufr.readLine())!=null){
                byte[] buf = line.getBytes();
                DatagramPacket dp =
                    new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10002);
                ds.send(dp);
                if("886".equals(line))
                    break;
            }
        }
        catch (Exception e){
            throw new RuntimeException("发送端失败");
        }
    }
}
class Rece implements Runnable{
    private DatagramSocket ds;
    public Rece(DatagramSocket ds){
        this.ds = ds;
    }
    public void run(){
        try{
            while(true){
                byte[] buf = new byte[1024];
                DatagramPacket dp = new DatagramPacket(buf,buf.length);
                ds.receive(dp);
                String ip = dp.getAddress().getHostAddress();
                String data = new String(dp.getData(),0,dp.getLength());
                if("886".equals(data)){
                    System.out.println(ip+"....离开聊天室");
                    break;
                }
                System.out.println(ip+":"+data);
            }
        }
        catch (Exception e)        {
            throw new RuntimeException("接收端失败");
        }
    }
}

class  ChatDemo{
    public static void main(String[] args) throws Exception{
        DatagramSocket sendSocket = new DatagramSocket();
        DatagramSocket receSocket = new DatagramSocket(10002);
        new Thread(new Send(sendSocket)).start();
        new Thread(new Rece(receSocket)).start();
    }
}

/*
需求:通过udp传输方式,将一段文字数据发送出去。
定义一个udp发送端。
思路:
1,建立updsocket服务。
2,提供数据,并将数据封装到数据包中。
3,通过socket服务的发送功能,将数据包发出去。
4,关闭资源。
*/

import java.net.*;
class  UdpSend{
    public static void main(String[] args) throws Exception{
        //1,创建udp服务。通过DatagramSocket对象。
        DatagramSocket ds = new DatagramSocket(8888);
        //2,确定数据,并封装成数据包。DatagramPacket(byte[] buf, int length, InetAddress address, int port)
        byte[] buf = "udp ge men lai le ".getBytes();
        DatagramPacket dp =
            new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.254"),10000);
        //3,通过socket服务,将已有的数据包发送出去。通过send方法。
        ds.send(dp);
        //4,关闭资源。
        ds.close();
    }
}
/*
需求:
定义一个应用程序,用于接收udp协议传输的数据并处理的。
定义udp的接收端。
思路:
1,定义udpsocket服务。通常会监听一个端口。其实就是给这个接收网络应用程序定义数字标识。
    方便于明确哪些数据过来该应用程序可以处理。
2,定义一个数据包,因为要存储接收到的字节数据。
因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。
3,通过socket服务的receive方法将收到的数据存入已定义好的数据包中。
4,通过数据包对象的特有功能。将这些不同的数据取出。打印在控制台上。
5,关闭资源。
*/
class  UdpRece{
    public static void main(String[] args) throws Exception{
        //1,创建udp socket,建立端点。
        DatagramSocket ds = new DatagramSocket(10000);
        while(true){
        //2,定义数据包。用于存储数据。
        byte[] buf = new byte[1024];
        DatagramPacket dp = new DatagramPacket(buf,buf.length);
        //3,通过服务的receive方法将收到数据存入数据包中。
        ds.receive(dp);//阻塞式方法。
        //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);
        }
        //5,关闭资源
        //ds.close();
    }
}

正则表达式:★★★☆,其实是用来操作字符串的一些规则。

  好处:正则的出现,对字符串的复杂操作变得更为简单。

  特点:将对字符串操作的代码用一些符号来表示。只要使用了指定符号,就可以调用底层的代码对字符串进行操作。符号的出现,简化了代码的书写。

  弊端:符号的出现虽然简化了书写,但是却降低了阅读性。

    其实更多是用正则解决字符串操作的问题。

  :用小括号标示,每定义一个小括号,就是一个组,而且有自动编号,从1开始。

    只要使用组,对应的数字就是使用该组的内容。别忘了,数组要加\\。

    (aaa(wwww(ccc))(eee))技巧,从左括号开始数即可。有几个左括号就是几组。

常见操作:

  1,匹配:其实用的就是String类中的matches方法。

    String reg = "[1—9][0—9]{4,14}";

    boolean b = qq.matches(reg);//将正则和字符串关联对字符串进行匹配。

  2,切割:其实用的就是String类中的split方法。

  3,替换:其实用的就是String类中的replaceAll();

  4,获取:

    1),先要将正则表达式编译成正则对象。使用的是Pattern中静态方法 compile(regex);

    2),通过Pattern对象获取Matcher对象。

      Pattern用于描述正则表达式,可以对正则表达式进行解析。

      而将规则操作字符串,需要从新封装到匹配器对象Matcher中。

      然后使用Matcher对象的方法来操作字符串。

      如何获取匹配器对象呢?

      通过Pattern对象中的matcher方法。该方法可以正则规则和字符串想关联。并返回匹配器对象。

    3),使用Matcher对象中的方法即可对字符串进行各种正则操作。

网页爬虫(蜘蛛)

   public static void main(String[] args) throws Exception{
        getMails_1();
   }
    public static void getMails_1()throws Exception{
        URL url = new URL("http://192.168.1.254:8080/myweb/mail.html");
        URLConnection conn = url.openConnection();
        BufferedReader bufIn = new BufferedReader(new InputStreamReader(conn.getInputStream()));    
        String line = null;
        String mailreg = "\\w+@\\w+(\\.\\w+)+";
        Pattern p = Pattern.compile(mailreg);
        while((line=bufIn.readLine())!=null){
            Matcher m = p.matcher(line);
            while(m.find())    {
                System.out.println(m.group());
            }
        }
    }

/*获取指定文档中的邮件地址。  使用获取功能。Pattern  Matcher*/

  public static void getMails()throws Exception{
        BufferedReader bufr = new BufferedReader(new FileReader("mail.txt"));
        String line = null;
        String mailreg = "\\w+@\\w+(\\.\\w+)+";
        Pattern p = Pattern.compile(mailreg);
        while((line=bufr.readLine())!=null){
            Matcher m = p.matcher(line);
            while(m.find()){
                System.out.println(m.group());
            }
        }
    }

——————————ASP.Net+Android+IOS开发、.Net培训、期待与您交流!——————————

 详细请查看:http://edu.csdn.net 

黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式的更多相关文章

  1. 黑马程序员_java基础笔记(15)...银行业务调度系统_编码思路及代码

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— 1,面试题目:银行业务调度系统 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内 ...

  2. 黑马程序员_java基础笔记(14)...交通灯管理系统_编码思路及代码

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 1,面试题——交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: ...

  3. 黑马程序员_java基础笔记(09)...HTML基本知识、CSS、JavaScript、DOM

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 基本标签(a.p.img.li.table.div.span).表单标签.ifra ...

  4. 黑马程序员_java基础笔记(07)...IO流

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— IO(InputStream,outputStream)字节流 (Reader,Wr ...

  5. 黑马程序员_java基础笔记(06)...集合

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— JavaApi(其实就是java给我们提供的已经定义好的对象.工具对象:集合框架) ...

  6. 黑马程序员_java基础笔记(01)...java的环境搭建

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流!——————————  JavaSE(Java Standard Edtion java标准版)技术概况 ...

  7. 黑马程序员_java基础笔记(13)...类加载器和代理

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 1,类加载器.2,代理. 1,类加载器. Java虚拟机中可以安装多个类加载器,系 ...

  8. 黑马程序员_java基础笔记(11)...反射

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 1,字节码.2,Constructor类.3,Field类.4,Method类.5 ...

  9. 黑马程序员_java基础笔记(10)...JDK1.5的新特性

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 1:静态导入.2:for—each循环.3:自动装箱/拆箱.4:可变参数.5:枚举 ...

随机推荐

  1. bzoj千题计划137:bzoj [CQOI2014]危桥

    http://www.lydsy.com/JudgeOnline/problem.php?id=3504 往返n遍,即单向2*n遍 危桥流量为2,普通桥流量为inf 原图跑一遍最大流 交换b1,b2再 ...

  2. How to Tell Science Stories with Maps

    Reported Features How to Tell Science Stories with Maps August 25, 2015   Greg Miller This map, part ...

  3. HTML面试基础问题

    1.Doctype作用?严格模式与混杂模式如何区分?它们有何意义?   1)<!DICTYPE>声明位于文档中的最前面,处于<html>标签之前,告诉浏览器的解析器,用什么文档 ...

  4. 学以致用:Python爬取廖大Python教程制作pdf

    当我学了廖大的Python教程后,感觉总得做点什么,正好自己想随时查阅,于是就开始有了制作PDF这个想法. 想要把教程变成PDF有三步: 先生成空html,爬取每一篇教程放进一个新生成的div,这样就 ...

  5. fifo 上使用 select -- 转

    http://www.outflux.net/blog/archives/2008/03/09/using-select-on-a-fifo/ The right way to handle on-g ...

  6. sqlmap tamper脚本

    本文来自:SQLmap tamper脚本注释, 更新了一些脚本,<<不断更新中>> 目前已经总共有50+的脚本,故对源文章进行更新... sqlmap-master ls -l ...

  7. SQL SERVER 视图优化经历

    系统中要求对HIS数据进行效益统计,因为HIS数据是需要第三方提供接口导入的,不清楚数据量大小,所以视图以业务为主未对其做性能优化(当时编写试图时就是几条简单的测试数据) 如今在项目接口实施完成后查看 ...

  8. 使用dork脚本来查询Google

    使用dork脚本来查询Google 了解Google Hacking数据库的第一步是了解所有典型的Google运算,就像机器级编程工程师必须了解计算机操作代码一样. 这些Google运算是Google ...

  9. Interger不可变原理

    1.先看代码: package main.java.db.mq; public class TestSwap { public static void main(String[] args) { In ...

  10. [转载]Windows服务编写原理及探讨(3)

    (三)对服务的深入讨论之下 现在我们还剩下一个函数可以在细节上讨论,那就是服务的CtrlHandler函数. 当调用RegisterServiceCtrlHandler函数时,SCM得到并保存这个回调 ...