• Java高级


    Java高级

    集合框架和泛型

    1. 1.  定义

    集合框架用于存储一组长度不定的元素。//解决java中数组长度为固定不能改变的不足。

    1. 2.  常用的接口和类

    接口:Collection、List、Set、Map、Iterator

    类:ArrayList、LinkedList、HashSet、HashMap

    与数组对比的记忆,都需要实现 新增加一个对象,修改指定对象的值,删除一个指定对象的值,查询对象的值以及遍历整个数组。

    1. 3.  使用特点

    List:存储的元素不唯一、有序。

    Set:存储的元素唯一、无序。

    Map:元素以键值对的方式进行存储。//存在映射索引的关系,其中key是set型,value是collection型。

    1. 4.  ArrayListLinkedList的区别

    ArrayList:查找元素速度快,性能高;但是不适合频繁的对集合元素进行插入、修改、删除。

    LinkedList:在频繁对集合元素进行插入、修改、删除时效率高,速度快;但是查找速度不如ArrayList。

    //因为ArrarList里面是一排排的数据存放,删除一个后需要有一个重新排序的计算,而LinkedList 是链表,内部之间彼此连接,其删除后不需要重新排序,所以效率更高。

    1. 5.  集合常用方法:

    ²  List:

    add(Object obj)、remove(Object obj)、remove(int index)、size()、get(int index)、iterator()、clear()

    //注意里面add,remove等方法的重写,使用的场合不一样。

    ²  Set:

    add(Object obj)、remove(Object obj)、size()、iterator()、clear()

    ²  Map:

    put(Object key, Object value)、get(Object key)、keySet()、values()、size()、remove(Object key) 、clear()

    //Collections类中有个compareTo() 以及fill()方法。

    泛型:定义什么类型,就使用的什么类型。先定义类型,再进行输入,输出操作。相当于实现了数组中的存放一组固定类型的目的,将之前的object转化为自己想要的类型。

    实用类

    1. 1.  枚举

    定义

    一组固定的常量。

    语法

    访问修饰符   enum      枚举名{

          常量一,

          常量二,

          … …

    }

    用法

    声明枚举变量并赋值:Season  season  =  Season.Spring;

    switch:

    switch(枚举变量){                               //   枚举变量:枚举名  变量名

    常量一:

        … …

        Break;

    常量二:

        … …

        Break;

    }

    1. 2.  包装类

    值类型(基本数据类型)都存在一个对应的包装类。

    int->Integer、double->Double、boolean->Boolean、char->Charactor、… …

    值类型和包装类的相互转换

    基本数据类型转换为包装类

    包装类转换为基本数据类型

    Double  doub = new Double();

    包装类名  包装类对像名   = new包装类名(参数值);

    参数可以是数值型,也可以是字符串型“”。即实现数据类型的转化,将“5.5”转换为double类型的方法。

    所有类型转化为String都有.toString()方法。

    Double  Shu33 =new Double("50.5");

    double a   = Shu33.doubleValue();

    可以通过数值类型Value()将包装类转换为基本数值类型。

    对于不同类型的返回一个数值类型的值,需要使用

    parseDouble("66.5")

    基本数据类型 变量名称 = 包装对象.parse(包装名)(字符串);

    拆箱和装箱

    拆箱:将包装类转换为基本数值类型;

    装箱:将数值类型转化为包装类。

    1. 3.  Math

    Math类的作用

    提供一系列与科学计算相关的方法。

    常用方法:random()、floor()、ceil()、max()、min()、round()

    //详细的使用方法可以参考javaAPI文档。记住需要实现数学运算的时候,用 Math.调用方法(其都为静态方法)。

    Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

     ceil(double   a)       返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。

    floor(double a)       返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。

    random()         返回double 值,该值大于等于   0.0 且小于 1.0一般获取随机值使用Random类。

    1. 4.  String

    常用的方法:substring()、indexOf()、lastIndexOf()、replace、split、length()、trim() 

    //String 类是操作最多的类,其方法很多,需要参考javaAPI文档  

    构造方法:String(byte[] bytes)          可以通过字节的数组生产字符串,其他的可以参考API。

    concat(String   str)    将指定字符串连接到此字符串的结尾。其与“+”用法类似。

    contains(CharSequence s) 当且仅当此字符串包含指定的 char 值序列时,返回   true。判断是否包含

    getBytes()    使用平台的默认字符集将此   String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

    split(String   regex)     根据给定正则表达式的匹配拆分此字符串。其中“*,?,|,^”等需要转义\

    substring(int   beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。截取字符串

    trim()      返回字符串的副本,忽略前导空白和尾部空白。

    lastIndexOf(int ch)       返回指定字符在此字符串中最后一次出现处的索引。 //其有几种重写的方法。

    indexOf(int   ch)        返回指定字符在此字符串中第一次出现处的索引。  //其有几种重写的方法。

    length()       返回此字符串的长度。

    replace(char   oldChar, char newChar)      返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。       //进行修改,也有一些重写的方法,可以加一些参数。

    //当然还有一些方法,实际使用的时候需要查看API去,遇到问题先思考,再查找资料,做不出来就百度,然后就是请教其他人。

    1. 5.  Random

    作用:生成随机数。  只要知道

    常用方法:nextInt()、nextInt(int)、nextDouble()、nextXXX()

    next(int bits)           生成下一个伪随机数。 这个方法的修饰符是protected   外部不能使用。

    nextInt(int n) 返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。

    nextDouble()    返回下一个伪随机数,它是取自此随机数生成器序列的、在   0.0 和 1.0 之间均匀分布的 double 值。

    nextLong()   返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的   long 值。

    setSeed(long seed)    使用单个   long 种子设置此随机数生成器的种子。

    1. 6.  日期时间类

    ²  Date

    在类 Date 所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表示形式: 年份 y 由整数 y - 1900 表示,月份使用M由0~11的整数,日期使用d由1~31的整数,小时使用H由0~23的整数表示,分钟使用m由0~59的整数表示,秒使用s,由0~61的整数表示。

    在所有情形中,针对这些目的赋予方法的参数不需要在指定的范围内;例如,可以把日期指定为 1 月 32 日,并把它解释为 2 月 1 日的相同含义。

    语法:Date date = new Data();获取当前的时间。

    after(Date when)/before(Date when) 测试此日期是否在指定日期之后/之前。// 实现定时控制操作

    compareTo(Date   anotherDate)           比较两个日期的顺序。

    ²  Calendar   为抽象类,通过静态方法getInstance() 获得一个对象。

    Calendar calendar = Calendar. getInstance()

    set(int field,   int value)             将给定的日历字段设置为给定值。

    set(int year,   int month, int date)             设置日历字段 YEARMONTHDAY_OF_MONTH 的值。 // Set的方法重写,可以修改日期的年,月,日,小时,分钟,秒,时区等等操作

    getTime()   返回一个表示此   Calendar 时间值(从历元至现在的毫秒偏移量)的   Date 对象

    //可以创建一个Data对象

    get(int field)           返回给定日历字段的值。

    ²  SimpleDateFormat

    需要按照指定的格式输出的日期,才能让人看得懂,也能符合人们日常的生活习惯。

         

    字母

    日期或时间元素

    表示

    示例

    G

    Era 标志符

    Text

    AD

    y

    Year

    1996; 96

    M

    年中的月份

    Month

    July; Jul; 07

    w

    年中的周数

    Number

    27

    W

    月份中的周数

    Number

    2

    D

    年中的天数

    Number

    189

    d

    月份中的天数

    Number

    10

    F

    月份中的星期

    Number

    2

    E

    星期中的天数

    Text

    Tuesday; Tue

    a

    Am/pm 标记

    Text

    PM

    H

    一天中的小时数(0-23)

    Number

    0

    k

    一天中的小时数(1-24)

    Number

    24

    K

    am/pm 中的小时数(0-11)

    Number

    0

    h

    am/pm 中的小时数(1-12)

    Number

    12

    m

    小时中的分钟数

    Number

    30

    s

    分钟中的秒数

    Number

    55

    S

    毫秒数

    Number

    978

    z

    时区

    General   time zone

    Pacific Standard Time; PST; GMT-08:00

    Z

    时区

    RFC   822 time zone

    -0800

    你需要输出不同的格式,就在建立的时候,输入不同的参数,一般就是yyyy-MM-dd HH:mm:ss

    SimpleDateFormat  formater = new SimpleDateFormat(“设置的时间输出格式”);

          formater.format(“Date对象”);

    format(Date date, StringBuffer toAppendTo, FieldPosition pos)

           将给定的 Date 格式化为日期/时间字符串,并将结果添加到给定的 StringBuffer。

    输出输出

    包:java.io

    File类

    功能:除了读写之外的其他对文件/文件夹的操作。

    常用的方法:

    构造方法:File(File parent, String child)/ File(String pathname) 通过路径创建对象

    createNewFile()      当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。

    mkdir()           创建此抽象路径名指定的目录。

    createTempFile(String   prefix, String suffix)    在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。

    delete()        删除此抽象路径名表示的文件或目录。

    exits()           测试此抽象路径名表示的文件或目录是否存在。

    getName()           返回由此抽象路径名表示的文件或目录的名称。

    getParent()           返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null

    isFile()           测试此抽象路径名表示的文件是否是一个标准文件。

    isDirectory()           测试此抽象路径名表示的文件是否是一个目录。

    list()          返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。

    length()           返回由此抽象路径名表示的文件的长度。

    //还有一些其他的设置只读,隐藏等熟悉的方法,参考API。

    1. 1.  流的分类

    ²  根据方向分类:

    输入:InputStream、Reader

    输出:OutputStream、Writer

    ²  根据内容分类:

    字节流:InputStream、OutputStream

    字符流:Reader、Writer

    实现类

    (抽)InputStream

    (抽)OutputStream

    (抽)Reader

    (抽)Writer

    FileInputStream

    FileOutputStream

    InputStreamReader

    OutputStreamWriter

    DataInputStream

    DataOutputStream

    FileReader

    FileWriter

    ObjectInputStream

    ObjectOutputStream

    BufferedReader

    BufferedWriter

    序列化和反序列化

    文件读写的一般操作思路:

    1. 先通过File找到需要读写的对象,通过创建,或者指定的路径,创建一个File对象,路径指向需要读写的文件

    2. 如果是读,就需要看文件是文本文件还是二进制文件

    文本文件:先记住字节型,字符型的基础也是字节型。

    InputStream  input = new FileInputStreamfile;

    byte[] text = new byte[input. available ()];//创建读取接受的字节数组

    input.read(text);    //读取操作

    input.close();   //然后关闭即可。

    二进制文件:

    InputStream  input = new FileInputStreamfile;

    DataInputStream  dinput =new DataInputStream(input);

    /*  对于文件比较小的时候,可以使用此种方法

    byte[] text = new byte[input. available ()]; //创建读取接受的字节数组

    dinput.read(text);    //读取操作

    */

    byte[] text = new byte[1024];   //一般读取大的文件,需要分多次读取,就通过循环实现读取。

    int count = dinput.read(text);

    while( count != -1){

    count = dinput.read(text,0,count);

    }

    input.close();  

    dinput.close();   //然后关闭即可。

    序列化文件:

       就是将DataInputStream 更换成ObjectDataInputStream,方法换成readObject()即可。

    3. 如果是写,就需要看文件是文本文件还是二进制文件

    文本文件:先记住字节型,字符型的基础也是字节型。

    先得到一个byte的数组,一般有String里面getBytes()的方法。

    OUTputStream  output = new FileOutputStreamfile;

    String str=********;

    byte[] text = Str.getBytes();//创建读取接受的字节数组

    input.write (text);    //读取操作

    input.close();   //然后关闭即可。

    二进制文件:

    OutputStream  outnput = new File OutputStreamfile;

    DataOutputStream  doutput =new DataOutputStream (input);

    //无论如何一定要先得到一个字节的数组,放到内存中     可以是边读边写,例如拷贝。

    byte[] text =******

    doutput.write(text)

    /*  对于文件比较小的时候,可以使用此种方法

    byte[] text = new byte[input. available ()]; //创建读取接受的字节数组

    dinput.read(text);    //读取操作

    */

    output.close();  

    doutput.close();   //然后关闭即可。

    序列化文件:

       就是将DataOutputStream 更换成ObjectDataOutputStream,方法换成writeObject()即可。

       序列化和反序列化的对象必须使用Serializable  接口,否则读写的过程就报错。

    4. 小结

    读写操作是软件的基本功能之一,是后续XML技术的基础,对需要找到需要更改的对象,然后通过read或write的方法对文件进行修改,修改后再保存到本机磁盘。是实现动态存储信息持续化的基础。只要知道如何实现何种功能即可,具体的情况需要查看不同的帮助文件,实现最优。

    多线程

    1. 1.  进程和线程的区别

    进程:一个独立的运算程序;

    线程:CPU计算的最小单元,就是一个独立计算的片段,其属于进程的一部分。

    1. 2.  Java中使用线程的步骤

    a.定义线程;b.启动线程;c.执行线程;d.关闭线程。

    1. 3.  Java中定义线程的2中方式

    (1)继承Thread类,实现其run方法  //extends Thread

    (2)使用Runnable接口     // implements Runnable

     在类中定义run的方法,也就是要执行的一些代码,通过类的对象,调用start()方法,就开始线程的执行,以及Thread.sleep()可以定义当前类主进行main()方法 休眠的时间。

      系统默认会运行java中的mian()方法,mian方法里面就可以启动其他的线程,提高程序的运行效率。

    1. 4.  线程的优先级

    通过setPriority(int grade);设置一个线程的优先级别,其值为1~10之间,10表示优先级别最高。

    优先级别高,优先被执行的概率高。

    1. 5.  线程的生命周期
      1. 新生,被创建的时候;
      2. 可运行,start启动后;
      3. 阻塞,没有得到时间片的休眠状态
      4. 死亡,就是运行完毕,也或者是stop()方法被执行。一般自动运行完了就死亡了,不用刻意的管理。
    2. 6.  线程的同步

    哪里需要争夺资源,就在哪个方法前面加上synchronized的关键字。为了防止同时修改一个内存地址的数据,出现意想不到的问题。

    1. 7.  线程常用方法

    线程越多,程序运行的越快,但是主程序是由运行最慢的那个程序所花费的时间决定的,因此对于大的运算的数据或计算,为了提高效率,尽量将其拆分为多个线程同步运算,这样就提高程序等待的时间。

    从客户体验的角度,程序开发做到以下三点,客户自然就会增加:

    别让我等;别让我想;别让我烦。

    所以多线程技术对于程序开发十分的重要,能够减少客户等待的时间,从而提高效率。

    网络编程

    1. 1.  IP地址

     设计与查看 dos里面的ping & ipconfig/all     command

    IP的三类,A类1~126,B类128~191,C类192~223

    地址是4个8位的二进制。值为0~255之间的数据。

    1. 2.  C/S 的信息传输

    先有服务器 Server :

     通过SocketSrever  创建一个服务器对象,在构造方法的时候,加入端口值。

    调用accept();实现监听。

    再有客户Customer:

      通过Socket创建一个客户对象,在构造方法的时候,输入服务器的ip地址,以及端口值。

    传输文件同第三章的I/O操作一样,都是创建流,

    然后通过 getInputStream()/getOutputStream()  实现输入与输出

    1. 3.  UDP

    UDP传输不可靠,但是比较适合一些广播,UDP的里面先打包,再通过send()/receive()方法传输数据。

    XML操作

    1. 1.  XML的基础信息

    1.1定义以及作用:

       用于数据存储以及数据交换或显示的一种可扩展标记语言(EXtensible Markup Language)。广泛用于数据库和程序之间数据的交换。XML 标签没有被预定义。您需要自行定义标签

    1.2 xml文档的组成

    a.申明标记<?xml version=”1.0” encoding=”UTF-8”?>

    b.标签元素

    c.嵌套关系需要正确,不能越级必须一一对应。

    d.元素的名称与之前类的名称的要求类似

    e.特殊字符需要处理

    1.3 DTD

       为了规范xml文档,使其标准化,方便协调用以及后续数据数据为维护。

    1. 2.  DOMXML文件的操作

    2.1     主要步骤

    //得到document

    建立解析器工程: DocumentBuilderFactory    静态方法: .newInstance();

    建立解析器:DocumentBuilder     解析器工厂对象的方法: .newDocumentBuilder

    解析得到document:    解析器对象的方法: .parse(“文件路径”);

    调用document中的一些方法,就可以得到你所需要的内容。

    //

    2.2     主要方法

    //获得根目录     getDocumentElement();                  

    //获得标签的列表对象  getElementsByTagName(String name) 输入标签的值,区分大小写

    //获得父对象   getParentNode();

    //获得子对象    getChildNodes();

    //获得兄弟对象  getgetNextSibling();/getPreviousSibling();

    //获得文本内容  getTextContent();

    //获得属性内容  getAttribute(String name)

    //删除一个节点 Node    remove()removeAttributeNode(Attr oldAttr); removeChild(Node oldChild)

    //增加一个节点     appendChild(Node newChild)

    //修改一个节点的属性  setAttribute(String name,String value)

    removeAttribute(String name)

    setAttributeNS(String namespaceURI, String qualifiedName, String value)

    //记得保存  包括关闭其中的流。

                    DOM4JXML文件的操作

    DOM4J相当于javaDOM的外挂,第三方插件。步骤一样,但是方法简单很多,特别是Xpath的技术支持,极大的提高的索引效率。

    //创建document文件
          SAXReader reader = new SAXReader();
            Document document = reader.read(url);
    //使用Xpath技术筛选需要的元素对象,返回一个List列表
    List list = document.selectNodes( "//foo/bar" );

    遍历列表可以继续筛选

    //创建添加对象

    Document document = DocumentHelper.createDocument();
            Element root = document.addElement( "root" );
     
            Element author1 = root.addElement( "author" )
                .addAttribute( "name", "James" )
                .addAttribute( "location", "UK" )
                .addText( "James Strachan" );
            
            Element author2 = root.addElement( "author" )
                .addAttribute( "name", "Bob" )
                .addAttribute( "location", "US" )
                .addText( "Bob McWhirter" );
     

    //保存到本地文件中

    FileWriter out = new FileWriter( "foo.xml" );
            document.write( out );

    //需要设定格式的时候,可以参考下面的代码

    OutputFormat format = OutputFormat.createPrettyPrint();//构造方法的重写
            writer = new XMLWriter( System.out, format );
            writer.write( document );

     

    Java高级

    集合框架和泛型

    1. 1.  定义

    集合框架用于存储一组长度不定的元素。//解决java中数组长度为固定不能改变的不足。

    1. 2.  常用的接口和类

    接口:Collection、List、Set、Map、Iterator

    类:ArrayList、LinkedList、HashSet、HashMap

    与数组对比的记忆,都需要实现 新增加一个对象,修改指定对象的值,删除一个指定对象的值,查询对象的值以及遍历整个数组。

    1. 3.  使用特点

    List:存储的元素不唯一、有序。

    Set:存储的元素唯一、无序。

    Map:元素以键值对的方式进行存储。//存在映射索引的关系,其中key是set型,value是collection型。

    1. 4.  ArrayListLinkedList的区别

    ArrayList:查找元素速度快,性能高;但是不适合频繁的对集合元素进行插入、修改、删除。

    LinkedList:在频繁对集合元素进行插入、修改、删除时效率高,速度快;但是查找速度不如ArrayList。

    //因为ArrarList里面是一排排的数据存放,删除一个后需要有一个重新排序的计算,而LinkedList 是链表,内部之间彼此连接,其删除后不需要重新排序,所以效率更高。

    1. 5.  集合常用方法:

    ²  List:

    add(Object obj)、remove(Object obj)、remove(int index)、size()、get(int index)、iterator()、clear()

    //注意里面add,remove等方法的重写,使用的场合不一样。

    ²  Set:

    add(Object obj)、remove(Object obj)、size()、iterator()、clear()

    ²  Map:

    put(Object key, Object value)、get(Object key)、keySet()、values()、size()、remove(Object key) 、clear()

    //Collections类中有个compareTo() 以及fill()方法。

    泛型:定义什么类型,就使用的什么类型。先定义类型,再进行输入,输出操作。相当于实现了数组中的存放一组固定类型的目的,将之前的object转化为自己想要的类型。

    实用类

    1. 1.  枚举

    定义

    一组固定的常量。

    语法

    访问修饰符   enum      枚举名{

          常量一,

          常量二,

          … …

    }

    用法

    声明枚举变量并赋值:Season  season  =  Season.Spring;

    switch:

    switch(枚举变量){                               //   枚举变量:枚举名  变量名

    常量一:

        … …

        Break;

    常量二:

        … …

        Break;

    }

    1. 2.  包装类

    值类型(基本数据类型)都存在一个对应的包装类。

    int->Integer、double->Double、boolean->Boolean、char->Charactor、… …

    值类型和包装类的相互转换

    基本数据类型转换为包装类

    包装类转换为基本数据类型

    Double  doub = new Double();

    包装类名  包装类对像名   = new包装类名(参数值);

    参数可以是数值型,也可以是字符串型“”。即实现数据类型的转化,将“5.5”转换为double类型的方法。

    所有类型转化为String都有.toString()方法。

    Double  Shu33 =new Double("50.5");

    double a   = Shu33.doubleValue();

    可以通过数值类型Value()将包装类转换为基本数值类型。

    对于不同类型的返回一个数值类型的值,需要使用

    parseDouble("66.5")

    基本数据类型 变量名称 = 包装对象.parse(包装名)(字符串);

    拆箱和装箱

    拆箱:将包装类转换为基本数值类型;

    装箱:将数值类型转化为包装类。

    1. 3.  Math

    Math类的作用

    提供一系列与科学计算相关的方法。

    常用方法:random()、floor()、ceil()、max()、min()、round()

    //详细的使用方法可以参考javaAPI文档。记住需要实现数学运算的时候,用 Math.调用方法(其都为静态方法)。

    Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

     ceil(double   a)       返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。

    floor(double a)       返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。

    random()         返回double 值,该值大于等于   0.0 且小于 1.0一般获取随机值使用Random类。

    1. 4.  String

    常用的方法:substring()、indexOf()、lastIndexOf()、replace、split、length()、trim() 

    //String 类是操作最多的类,其方法很多,需要参考javaAPI文档  

    构造方法:String(byte[] bytes)          可以通过字节的数组生产字符串,其他的可以参考API。

    concat(String   str)    将指定字符串连接到此字符串的结尾。其与“+”用法类似。

    contains(CharSequence s) 当且仅当此字符串包含指定的 char 值序列时,返回   true。判断是否包含

    getBytes()    使用平台的默认字符集将此   String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

    split(String   regex)     根据给定正则表达式的匹配拆分此字符串。其中“*,?,|,^”等需要转义\

    substring(int   beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。截取字符串

    trim()      返回字符串的副本,忽略前导空白和尾部空白。

    lastIndexOf(int ch)       返回指定字符在此字符串中最后一次出现处的索引。 //其有几种重写的方法。

    indexOf(int   ch)        返回指定字符在此字符串中第一次出现处的索引。  //其有几种重写的方法。

    length()       返回此字符串的长度。

    replace(char   oldChar, char newChar)      返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。       //进行修改,也有一些重写的方法,可以加一些参数。

    //当然还有一些方法,实际使用的时候需要查看API去,遇到问题先思考,再查找资料,做不出来就百度,然后就是请教其他人。

    1. 5.  Random

    作用:生成随机数。  只要知道

    常用方法:nextInt()、nextInt(int)、nextDouble()、nextXXX()

    next(int bits)           生成下一个伪随机数。 这个方法的修饰符是protected   外部不能使用。

    nextInt(int n) 返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。

    nextDouble()    返回下一个伪随机数,它是取自此随机数生成器序列的、在   0.0 和 1.0 之间均匀分布的 double 值。

    nextLong()   返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的   long 值。

    setSeed(long seed)    使用单个   long 种子设置此随机数生成器的种子。

    1. 6.  日期时间类

    ²  Date

    在类 Date 所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表示形式: 年份 y 由整数 y - 1900 表示,月份使用M由0~11的整数,日期使用d由1~31的整数,小时使用H由0~23的整数表示,分钟使用m由0~59的整数表示,秒使用s,由0~61的整数表示。

    在所有情形中,针对这些目的赋予方法的参数不需要在指定的范围内;例如,可以把日期指定为 1 月 32 日,并把它解释为 2 月 1 日的相同含义。

    语法:Date date = new Data();获取当前的时间。

    after(Date when)/before(Date when) 测试此日期是否在指定日期之后/之前。// 实现定时控制操作

    compareTo(Date   anotherDate)           比较两个日期的顺序。

    ²  Calendar   为抽象类,通过静态方法getInstance() 获得一个对象。

    Calendar calendar = Calendar. getInstance()

    set(int field,   int value)             将给定的日历字段设置为给定值。

    set(int year,   int month, int date)             设置日历字段 YEARMONTHDAY_OF_MONTH 的值。 // Set的方法重写,可以修改日期的年,月,日,小时,分钟,秒,时区等等操作

    getTime()   返回一个表示此   Calendar 时间值(从历元至现在的毫秒偏移量)的   Date 对象

    //可以创建一个Data对象

    get(int field)           返回给定日历字段的值。

    ²  SimpleDateFormat

    需要按照指定的格式输出的日期,才能让人看得懂,也能符合人们日常的生活习惯。

         

    字母

    日期或时间元素

    表示

    示例

    G

    Era 标志符

    Text

    AD

    y

    Year

    1996; 96

    M

    年中的月份

    Month

    July; Jul; 07

    w

    年中的周数

    Number

    27

    W

    月份中的周数

    Number

    2

    D

    年中的天数

    Number

    189

    d

    月份中的天数

    Number

    10

    F

    月份中的星期

    Number

    2

    E

    星期中的天数

    Text

    Tuesday; Tue

    a

    Am/pm 标记

    Text

    PM

    H

    一天中的小时数(0-23)

    Number

    0

    k

    一天中的小时数(1-24)

    Number

    24

    K

    am/pm 中的小时数(0-11)

    Number

    0

    h

    am/pm 中的小时数(1-12)

    Number

    12

    m

    小时中的分钟数

    Number

    30

    s

    分钟中的秒数

    Number

    55

    S

    毫秒数

    Number

    978

    z

    时区

    General   time zone

    Pacific Standard Time; PST; GMT-08:00

    Z

    时区

    RFC   822 time zone

    -0800

    你需要输出不同的格式,就在建立的时候,输入不同的参数,一般就是yyyy-MM-dd HH:mm:ss

    SimpleDateFormat  formater = new SimpleDateFormat(“设置的时间输出格式”);

          formater.format(“Date对象”);

    format(Date date, StringBuffer toAppendTo, FieldPosition pos)

           将给定的 Date 格式化为日期/时间字符串,并将结果添加到给定的 StringBuffer。

    输出输出

    包:java.io

    File类

    功能:除了读写之外的其他对文件/文件夹的操作。

    常用的方法:

    构造方法:File(File parent, String child)/ File(String pathname) 通过路径创建对象

    createNewFile()      当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。

    mkdir()           创建此抽象路径名指定的目录。

    createTempFile(String   prefix, String suffix)    在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。

    delete()        删除此抽象路径名表示的文件或目录。

    exits()           测试此抽象路径名表示的文件或目录是否存在。

    getName()           返回由此抽象路径名表示的文件或目录的名称。

    getParent()           返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null

    isFile()           测试此抽象路径名表示的文件是否是一个标准文件。

    isDirectory()           测试此抽象路径名表示的文件是否是一个目录。

    list()          返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。

    length()           返回由此抽象路径名表示的文件的长度。

    //还有一些其他的设置只读,隐藏等熟悉的方法,参考API。

    1. 1.  流的分类

    ²  根据方向分类:

    输入:InputStream、Reader

    输出:OutputStream、Writer

    ²  根据内容分类:

    字节流:InputStream、OutputStream

    字符流:Reader、Writer

    实现类

    (抽)InputStream

    (抽)OutputStream

    (抽)Reader

    (抽)Writer

    FileInputStream

    FileOutputStream

    InputStreamReader

    OutputStreamWriter

    DataInputStream

    DataOutputStream

    FileReader

    FileWriter

    ObjectInputStream

    ObjectOutputStream

    BufferedReader

    BufferedWriter

    序列化和反序列化

    文件读写的一般操作思路:

    1. 先通过File找到需要读写的对象,通过创建,或者指定的路径,创建一个File对象,路径指向需要读写的文件

    2. 如果是读,就需要看文件是文本文件还是二进制文件

    文本文件:先记住字节型,字符型的基础也是字节型。

    InputStream  input = new FileInputStreamfile;

    byte[] text = new byte[input. available ()];//创建读取接受的字节数组

    input.read(text);    //读取操作

    input.close();   //然后关闭即可。

    二进制文件:

    InputStream  input = new FileInputStreamfile;

    DataInputStream  dinput =new DataInputStream(input);

    /*  对于文件比较小的时候,可以使用此种方法

    byte[] text = new byte[input. available ()]; //创建读取接受的字节数组

    dinput.read(text);    //读取操作

    */

    byte[] text = new byte[1024];   //一般读取大的文件,需要分多次读取,就通过循环实现读取。

    int count = dinput.read(text);

    while( count != -1){

    count = dinput.read(text,0,count);

    }

    input.close();  

    dinput.close();   //然后关闭即可。

    序列化文件:

       就是将DataInputStream 更换成ObjectDataInputStream,方法换成readObject()即可。

    3. 如果是写,就需要看文件是文本文件还是二进制文件

    文本文件:先记住字节型,字符型的基础也是字节型。

    先得到一个byte的数组,一般有String里面getBytes()的方法。

    OUTputStream  output = new FileOutputStreamfile;

    String str=********;

    byte[] text = Str.getBytes();//创建读取接受的字节数组

    input.write (text);    //读取操作

    input.close();   //然后关闭即可。

    二进制文件:

    OutputStream  outnput = new File OutputStreamfile;

    DataOutputStream  doutput =new DataOutputStream (input);

    //无论如何一定要先得到一个字节的数组,放到内存中     可以是边读边写,例如拷贝。

    byte[] text =******

    doutput.write(text)

    /*  对于文件比较小的时候,可以使用此种方法

    byte[] text = new byte[input. available ()]; //创建读取接受的字节数组

    dinput.read(text);    //读取操作

    */

    output.close();  

    doutput.close();   //然后关闭即可。

    序列化文件:

       就是将DataOutputStream 更换成ObjectDataOutputStream,方法换成writeObject()即可。

       序列化和反序列化的对象必须使用Serializable  接口,否则读写的过程就报错。

    4. 小结

    读写操作是软件的基本功能之一,是后续XML技术的基础,对需要找到需要更改的对象,然后通过read或write的方法对文件进行修改,修改后再保存到本机磁盘。是实现动态存储信息持续化的基础。只要知道如何实现何种功能即可,具体的情况需要查看不同的帮助文件,实现最优。

    多线程

    1. 1.  进程和线程的区别

    进程:一个独立的运算程序;

    线程:CPU计算的最小单元,就是一个独立计算的片段,其属于进程的一部分。

    1. 2.  Java中使用线程的步骤

    a.定义线程;b.启动线程;c.执行线程;d.关闭线程。

    1. 3.  Java中定义线程的2中方式

    (1)继承Thread类,实现其run方法  //extends Thread

    (2)使用Runnable接口     // implements Runnable

     在类中定义run的方法,也就是要执行的一些代码,通过类的对象,调用start()方法,就开始线程的执行,以及Thread.sleep()可以定义当前类主进行main()方法 休眠的时间。

      系统默认会运行java中的mian()方法,mian方法里面就可以启动其他的线程,提高程序的运行效率。

    1. 4.  线程的优先级

    通过setPriority(int grade);设置一个线程的优先级别,其值为1~10之间,10表示优先级别最高。

    优先级别高,优先被执行的概率高。

    1. 5.  线程的生命周期
      1. 新生,被创建的时候;
      2. 可运行,start启动后;
      3. 阻塞,没有得到时间片的休眠状态
      4. 死亡,就是运行完毕,也或者是stop()方法被执行。一般自动运行完了就死亡了,不用刻意的管理。
    2. 6.  线程的同步

    哪里需要争夺资源,就在哪个方法前面加上synchronized的关键字。为了防止同时修改一个内存地址的数据,出现意想不到的问题。

    1. 7.  线程常用方法

    线程越多,程序运行的越快,但是主程序是由运行最慢的那个程序所花费的时间决定的,因此对于大的运算的数据或计算,为了提高效率,尽量将其拆分为多个线程同步运算,这样就提高程序等待的时间。

    从客户体验的角度,程序开发做到以下三点,客户自然就会增加:

    别让我等;别让我想;别让我烦。

    所以多线程技术对于程序开发十分的重要,能够减少客户等待的时间,从而提高效率。

    网络编程

    1. 1.  IP地址

     设计与查看 dos里面的ping & ipconfig/all     command

    IP的三类,A类1~126,B类128~191,C类192~223

    地址是4个8位的二进制。值为0~255之间的数据。

    1. 2.  C/S 的信息传输

    先有服务器 Server :

     通过SocketSrever  创建一个服务器对象,在构造方法的时候,加入端口值。

    调用accept();实现监听。

    再有客户Customer:

      通过Socket创建一个客户对象,在构造方法的时候,输入服务器的ip地址,以及端口值。

    传输文件同第三章的I/O操作一样,都是创建流,

    然后通过 getInputStream()/getOutputStream()  实现输入与输出

    1. 3.  UDP

    UDP传输不可靠,但是比较适合一些广播,UDP的里面先打包,再通过send()/receive()方法传输数据。

    XML操作

    1. 1.  XML的基础信息

    1.1定义以及作用:

       用于数据存储以及数据交换或显示的一种可扩展标记语言(EXtensible Markup Language)。广泛用于数据库和程序之间数据的交换。XML 标签没有被预定义。您需要自行定义标签

    1.2 xml文档的组成

    a.申明标记<?xml version=”1.0” encoding=”UTF-8”?>

    b.标签元素

    c.嵌套关系需要正确,不能越级必须一一对应。

    d.元素的名称与之前类的名称的要求类似

    e.特殊字符需要处理

    1.3 DTD

       为了规范xml文档,使其标准化,方便协调用以及后续数据数据为维护。

    1. 2.  DOMXML文件的操作

    2.1     主要步骤

    //得到document

    建立解析器工程: DocumentBuilderFactory    静态方法: .newInstance();

    建立解析器:DocumentBuilder     解析器工厂对象的方法: .newDocumentBuilder

    解析得到document:    解析器对象的方法: .parse(“文件路径”);

    调用document中的一些方法,就可以得到你所需要的内容。

    //

    2.2     主要方法

    //获得根目录     getDocumentElement();                  

    //获得标签的列表对象  getElementsByTagName(String name) 输入标签的值,区分大小写

    //获得父对象   getParentNode();

    //获得子对象    getChildNodes();

    //获得兄弟对象  getgetNextSibling();/getPreviousSibling();

    //获得文本内容  getTextContent();

    //获得属性内容  getAttribute(String name)

    //删除一个节点 Node    remove()removeAttributeNode(Attr oldAttr); removeChild(Node oldChild)

    //增加一个节点     appendChild(Node newChild)

    //修改一个节点的属性  setAttribute(String name,String value)

    removeAttribute(String name)

    setAttributeNS(String namespaceURI, String qualifiedName, String value)

    //记得保存  包括关闭其中的流。

                    DOM4JXML文件的操作

    DOM4J相当于javaDOM的外挂,第三方插件。步骤一样,但是方法简单很多,特别是Xpath的技术支持,极大的提高的索引效率。

    //创建document文件
          SAXReader reader = new SAXReader();
            Document document = reader.read(url);
    //使用Xpath技术筛选需要的元素对象,返回一个List列表
    List list = document.selectNodes( "//foo/bar" );

    遍历列表可以继续筛选

    //创建添加对象

    Document document = DocumentHelper.createDocument();
            Element root = document.addElement( "root" );
     
            Element author1 = root.addElement( "author" )
                .addAttribute( "name", "James" )
                .addAttribute( "location", "UK" )
                .addText( "James Strachan" );
            
            Element author2 = root.addElement( "author" )
                .addAttribute( "name", "Bob" )
                .addAttribute( "location", "US" )
                .addText( "Bob McWhirter" );
     

    //保存到本地文件中

    FileWriter out = new FileWriter( "foo.xml" );
            document.write( out );

    //需要设定格式的时候,可以参考下面的代码

    OutputFormat format = OutputFormat.createPrettyPrint();//构造方法的重写
            writer = new XMLWriter( System.out, format );
            writer.write( document );

     

  • 相关阅读:
    springboot对JPA的支持
    Hibernate-什么是orm思想
    利用Struts拦截器完成文件上传功能
    Struts2的CRUD
    struts2的初步认识
    Maven搭建
    java虚拟机
    Map集合
    Set集合(TreeSet)
    Set集合的
  • 原文地址:https://www.cnblogs.com/huyang1988/p/5040521.html
Copyright © 2020-2023  润新知