Java高级

图形界面编程的知识

多线程 (支持多人操作)例如qq 
IO流  输入输出流
异常
        API的使用、集合等


 图形界面编程


  1、GUI(Graphical User Interface)图形用户界面
  2、开发使用的java.swing包中的工具类  JFrame
    java.awt包中的工具类 Frame (老的 繁琐)
  3、swing包中工具类的分类:
    1)基本的组件:界面编程中包含的内容。例如:按钮 文本输入框 单选按钮...
    2)容器:基本组件放在一起的就是容器 例如:窗体 面板
  4、组件、容器
     1)窗体(JFrame)
                         (1)创建  (2)导包 (3)调用方法对窗体设置
     2)标签 JLabel
                            功能1:用于显示文本或者图片
            JLabel组件的创建方式:
                                        (1)new JLabel()       创建空标签
                                        (2)new JLabel(String) 创建文本的标签
                                        (3)new JLabel(icon)   创建带图片的标签
     3)文本输入框(文本域) JTextField   JTextArea
                          主要用于用户输入姓名、输入信息等。是一个能够接受用户键盘输入内容的小块区域
                          文本输入框的创建方式:
                          (1)创建一个空文本域
                          (2)创建内容空但是带有指定长度的文本域
                          (3)创建带指定内容的文本域
                          (4)创建带指定内容,指定长度的文本域
        
     4)按钮 JButton
     5)面板 JPanel 一个小板子
          JFrame  墙
     6)图标 ImageIcon
   5、布局管理器
    1)FlowLayout布局管理器
                      是一种最为简单的布局管理方法,也是面板的默认布局
                      它是以流的方式,从左到右,从上往下的存放组件,默认居中对齐方式
    2)BorderLayout布局管理器
    3)GridLayout布局管理器
6、事件处理
       三部分:事件源   事件  事件监听
       事件源:比如按钮、文本域、单选按钮、图片、标签等
       事件:单击事件、双击事件等
       事件监听:ActionListener
       
         事件处理的实现形式:
         外部类形式**
         内部类形式**
         类本身作为监听器的形式  
         匿名内部类的形式
    
    类    public class A{  ....  }      A a=new A();
          抽象类 == 接口     
          public abstract class Person{.... }    Persion p=new Person();  ×
          public abstract class Animal{ ... }    Animal am=new Animal();  ×
          接口是一种特殊的抽象类
          抽象类:public abstract class M{    ....    }
          接口:    public interface M{  ....  }
          注意:抽象类和接口都不能直接new创建     
        ActionListener接口
         类  extends 类    √
         类  extends 接口   ×
         类 implements 接口   √
         
        监听器接口:  ActionListener事件监听器
             WindowListener窗口监听器(接口)     WindowAdapter窗体监听适配器(抽象类)
                 implements 接口,extends 抽象类
                                      实现接口,必须实现接口中所有定义的方法,但是适配器(抽象类)可以只调出需要用到的某几个方法
             MouseListener鼠标监听器               MouseAdapter鼠标监听适配器
             ItemListener下拉列表框监听器
             ChangeListener 滑块移动的监听
             
 7、Java中的IO流
   InputOutput流 -- 输入输出流
   1)File类:是一个文件或者文件夹,可以使用该类对文件或者目录进行新建、删除、重命名等操作
                                但是File类不能读写文件里的内容
   2)File类的创建方式:
      File f=new File("文件夹或者文件");   
      f表示文件夹或者文件
      
      File f=new File(File,"文件夹或者文件");
      f表示在File下的文件或者文件夹
      
   3)File中的方法
     getName()   获得文件名或者文件夹名
     getCanonicalPath()  获得文件或者文件夹的路径
     mkdir()     创建文件夹
     exits()     判断文件或者文件夹是否存在
     isDirectory()  判断是否是文件夹
     isFile()       判断是否是文件
     length()       求文件的大小
     createNewFile()  创建文件
     listFiles()       查看当前文件夹下有哪些内容
     delete()        删除文件 文件夹(空)
      
    4)FileFilter(接口)   java.io包中的接口      文件过滤器  
      
    5)Java中的IO流
      File类不能对文件进行读写操作,所以使用IO流对文件进行读写
            (1)Java中IO流的分类
        a  输入流 : 从文件中读取数据
                             输出流:  向文件中写数据
        b  字节流:以字节为单位进行读写   '中'->字节编码
                             字符流;以字符为单位进行读写   '中'  ***
        c  节点流:向IO设备(磁盘 网络等)读写的流   
                             包装流(功能流):有特定功能的流,在基本的流上封装了一些特定的功能
              流的概念:使用输入或者输出的处理方式,对文件、图片、音频、视频等进行处理
     6)字符流(字符流依赖于字节流完成对文件的读写操作)
                 (1)InputStreamReader   字符输入流        分类:输入流-读    字符流   节点流
                 (2)OutputStreamWriter  字符输出流        分类:输出流-写    字符流   节点流
                 
                字节流
                  (1)FileInputStream    字节输入流     分类:输入流-读   字节流   节点流
                  (2)FileOutputStream   字节输出流     分类:输出流-写   字节流   节点流
                  
     7) 字符缓冲输入流 BufferedReader   -- 读    分类:输入流  字符流    包装流(功能流)
                     字符缓冲输出流 BufferedWriter   -- 写    分类:输出流  字符流     包装流(功能流)
                     为了提高对文件的读写效率,缓冲流是把一次读写的内容变大了
      
 8、Java中的多线程
   1)概念:
              程序:计算机支持的每一个任务都可以理解为是一个程序     QQ.exe
              进程:运行中的程序叫做进程。  一个程序安装后启动运行,在计算机内存中会出现对应的进程
              多线程:是一个进程内部的更小单位。在一个进程的内部,出现的“并发执行”的现象叫做多线程
           qq: 张三          A同学
                      B同学
                      C同学
                                       群
    2)java程序的执行顺序
              (1)顺序执行:从main方法开始,从上往下依次执行
              (2)并发执行:各自执行,互不干扰     -- 用到多线程
         “并发执行”并不是真正意义上的同时执行,同时执行只能在现实中做到。
                        在计算机中做不到真正意义上的同时执行,只能做到并发执行。
                        计算机会使用CPU分配不同的线程时间片(执行权限),拿到时间片的线程执行,其他的线程等待。
         CPU分配时间片是不可控制的,人为控制不了,取决于计算机本身。
                       微观上看这些线程是走走停停的,但是CPU分配时间片速度非常快,宏观上看就是同时执行的现象。
    3)多线程的创建方式    
                (1)继承Thread类
          1)让一个类去继承Thread,继承之后该类就成为一个线程,具有并发执行的功能       
          2)在该类中调出run方法重写,在run方法中实现多线程要做的事
          3) 调用start方法启动线程               
                (2)实现Runnable接口          
          1)让一个类去实现Runnable接口,实现之后该类具有并发执行的功能
          2)在该类中调出run方法重写,在run方法中实现多线程要做的事
          3)调用start方法启动线程
    4)线程的生命周期
                (1)创建状态
                          当new创建了一个线程实例,创建完成以后该线程就处于新建状态
          new FirstThread();      
          new FirstRunnable();  -->新建状态                
                (2)就绪状态
                          当线程对象调用了start()方法之后,该线程就处于一种就绪状态
          first.start()
          t1.start();      -->就绪状态
                (3)运行状态
                          如果处于就绪状态的线程获得了cpu,就会开始执行run方法,该线程就会处于运行状态
          public void run(){...}     -->运行状态
                (4)阻塞状态
                         当一个线程开始运行后,它不可能一直处于运行状态,线程在运行过程中需要被中断,目的是让其他线程获得执行的机会。
                         当出现以下情况时,线程会进入阻塞状态:
          ①线程调用了sleep()方法, 睡眠
          ②线程调用了一个阻塞的IO方法
          ③等待一个通知等...
                          被阻塞的线程会在合适的机会重新进入就绪状态,等待CPU的调用
                (5)死亡状态
                         结束后的线程处于死亡状态
                         出现出现以下几种情况会自动结束,进入死亡状态
          ①run()方法正常执行完了
          ②线程出现了异常或者错误
          ③直接调用线程的stop方法结束线程
     5)线程的操作
                (1)线程睡眠的操作
                          如果让当前正在执行的线程暂停一段时间,并进入阻塞状态,可以通过sleep睡眠的方法来实现。
          Thread.sleep();
                (2)后台线程的操作
                           概念:①后台线程的特点是随着主程序的结束而结束的,但是前台线程不会。正常创建的线程默认都属于前台线程
               ②设置后台线程的方法:用setDaemon(true)可以将该线程设置为后台线程
                isDaemon()可以判断一个线程是前台线程还是后台线程,  true为后台线程,false为前台线程
               ③setDaemon()方法必须在start方法之前设置,否则会抛出异常
    6)线程安全问题
            (1)线程安全
                   可以在计算机中运行各种计算机软件程序,在每一个运行的程序中可能包含多个独立运行的线程。
                   当多个线程同时读写同一份共享资源的时候,可能会引发冲突。这时候需要引入线程同步机制,即各个线程之间要有顺序。
                   线程同步的真实意义是一个一个的对共享资源进行操作,而不是同时进行
            (2)线程同步:一个一个的顺序操作共享资源,会避免这种安全隐患
                      线程同步可以解决线程安全问题,可以给共享资源加一把锁,加上锁之后,当一个线程访问该共享资源的时候,另外其他线程没有权限访问。
        Java中提供了一个同步锁,使用synchronized给一段代码加同步锁
                      
                      线程并发:多线程默认是并发执行的,并发执行会对同一共享资源触发安全隐患
                      例子:银行卡  2000元
                                  丈夫卡取1500元        妻子存折1500元
                                  丈夫取钱是一个线程,妻子取钱也是线程,多线程是并发执行,就会有安全隐患,丈夫去了1500,妻子也取了1500
    
  9、Java中的网络编程
            基于TCP协议的网络编程
     1)TCP协议
        TCP协议是一种可靠的网络协议,通信两端的Socket让他们之间形成网络虚拟链路,两端的程序可以通过虚拟链路进行通信
        Java使用Scoket对象代表两端的通信端口,通过Socket产生的IO流进行通信
     2)服务器端ServerSocket
                  服务器端的ServerSocket对象使用accept()方法用于监听来自客户端Socket的链接请求,如果接收到了客户端Socket的链接请求,该方法就会返回一个
                  与客户端Socket对应的Socket对象。如果没有链接,该方法一直处于等待状态。
     3)客户端Socket  
                   主要是用于描述ip地址和端口
       
                    服务器端                                                             客户端 
      ServerSocket                   Socket   
       accept()方法->Socket         Socket1(ip和端口)
   
   
   
                 数组的框架
                 数组:容器  数据    int[] arr={1,2,3,4,5,6,7,8,9,10};    int[] arr=new int[10];               
   10、Java中的集合 -- 容器  -- 数据    集合的底层就是由数组实现的,集合操作数据比数组更加方便
                 分类:
       1)List集合
          List是一个接口,使用List集合不能直接创建,可以使用List接口的实现类ArrayList,ArrayList可以理解为线性表数据结构
                       (1)ArrayList的创建方式和常用方法
                                创建方式:List<泛型> a=new ArrayList<泛型>();
                    ArrayList<泛型> b=new ArrayList<泛型>();   
                               常用方法:
              add(E e)    往集合中添加内容
              add(int index,E e)  指定下标插入内容
              get(int index)     根据下标取单个内容
              set(int index,E e) 根据下标修改对应的内容
              remove(int index)  根据下标删除对应的内容
              toArray()          将集合转换数组
              Arrays.asList()    将数组转换为集合         
              subList(start,end) 截取集合的中的内容
       2)Set集合  -- 存储数据用的,Set集合的特点是:不能放重复内容
          Set是一个接口,要Set接口的实现类HashSet
       3)Map集合  -- 存储数据用的,Map集合的特点是:以键值对的方法存储内容
          Map是一个接口,要Map接口的实现类HashMap
    

 

你可能感兴趣的:(Java)