day04 API

Array
01数组的排序

/**
 * 数组的排序:冒泡
 *   数组中的元素,进行排序,默认都是升序
 *   4 3 1 2  -->  1 2 3 4
 *   排序的方法非常多:
 *      冒泡,选择,插入,二分,希尔,快速
 *
 *   数组排序: 核心思想, 数组中的元素比较,换位置
 */
public class ArrayTest01数组的排序 {
    public static void main(String[] args) {
        int []arr={5,1,2,3,4,6,-1,0};
        bubbleSort(arr);
        iterator(arr);

    }
    /**
     * 定义方法: 对数组进行升序排列
     * 数组作为参数传递
     */
    public static void bubbleSort(int[]arr){
        //外循环,次数,长度-1
        for (int x = 0; x < arr.length-1; x++) {
            //内循环,每次循环的次数递减  长度-外循环的变量
            for (int y = 0; y < arr.length-x-1; y++) {
                //比较, y索引和y+1索引比较
                if(arr[y]>arr[y+1]){
                    //位置交换
                       int temp=arr[y];
                       arr[y]=arr[y+1];
                       arr[y+1]=temp;
                }
            }
        }
    }

    //定义方法遍历  迭代
    public static void iterator(int[]arr){
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

02数组的二分搜索

/**
 *  数组的二分搜索
 *    数组的搜索: 在一个数组,查找指定的一个元素
 *    如果在数组中找到了该元素,返回所在的索引
 *    如果找不到元素,返回负数
 *
 *  二分搜索,折半
 *  前提: 数组 必须有序
 */
public class ArrayTest02数组的二分搜索 {
    public static void main(String[] args) {
        int []arr={1,4,5,9,11,15,17,20};
       int index= binarySearch(arr,17);
        System.out.println(index);

    }
    /**
     * 实现数组二分搜索
     * 传递数组,传递要找的元素key
     * 返回元素出现的索引
     * 找不到返回负数
     */
    public static int binarySearch(int[]arr,int key){
        //定义变量,数组最小索引
        int min=0;
        //定义变量,数组的最大索引
        int max=arr.length-1;
        //定义变量,数组的中间索引
        int mid;
        //折半计算  (min+max)/2
        // min 不能大于max ,才能折半
        while(min<=max){
            //进行折半
            mid=(min+max)/2;
            //数组的中间索引元素,和关键词比较
            if(arr[mid]>key){
                //移动最大索引
                max=mid-1;
            }else if(arr[mid]<key){
                //移动最小索引
                min=mid+1;
            }else{
                //找到了返回索引
                return mid;
            }
        }
        //折半结束,没有找到
        return -1;
    }
}

03数组操作工具类

import java.util.Arrays;

/**
 *  数组操作工具类
 *    java.util.Arrays 专门用于操作数组的
 *    所有方法全部静态
 *    不需要创建对象,不能建立对象,构造方法私有
 */
public class ArrayTest03数组操作工具类 {
    public static void main(String[] args) {
        method03();
    }

    /**查索引
     * static int binarySearch(数组,关键字)
     * 数组的二分搜索法
     * 找不到, 返回 (-插入点-1)
     */
    public static void method03(){
        int []arr={1,6,9,11,17,20,33};
        int index = Arrays.binarySearch(arr, 33);
        System.out.println(index);
    }




    /**排序
     * static void sort(传递数组)
     * 对数组升序排列,快速排序法
     */
    public static void method02(){
        int []arr={1,0,2,5,8,9};
        Arrays.sort(arr);
        String str = Arrays.toString(arr);
        System.out.println(str);
    }





    /**
     *  数组变成字符串
     *  static String toString(传递数组)
     */
    public static void method01(){
        int []arr={1,4,6,2,0,6,8};
        String str = Arrays.toString(arr);
        System.out.println(str);
    }
}

-------------------------------------------------------

Calendar日历类

import java.util.Calendar;
import java.util.Date;

/*
* java.util.Calendar 表示日历对象类
* 是抽象类,无对象,使用他的子类GregorianCalendar
*
* 日历中的名词:  日历字段(Field)
* 表示日历的组成部分,包括 年,月,日,时,分....
* 日历字段数据,都是整数int
*
* Calendar类定义静态方法,不用new,通过调用
*    static Calendar getInstance()返回子类GregorianCalendar对象
* */
public class CalendarTest01 {
    public static void main(String[] args) {
        //父类的静态方法,获取子类对象
        Calendar calendar = Calendar.getInstance();

        //日历转日期
        Date date = calendar.getTime();
        System.out.println(date);

        //日历类方法,int get(int)获取日历字段中的值
        //传递日历字段,返回字段中对应的数据,例如:get(年)返回2019
        System.out.println(calendar.get(Calendar.YEAR)+"年"+(calendar.get(Calendar.MONTH)+1)+"月"+calendar.get(Calendar.DAY_OF_MONTH)+"日");


    }
}

02方法add和set

import java.util.Calendar;

/*
* Calendar的方法add,set
* */
public class CalendarTest02方法add和set {
    public static void main(String[] args) {
        method01();
    }


    /**
     * add方法设置日历偏移量
     * add(int field,int value)
     * field偏移的字段
     * value偏移的具体数据
     */

    public static void method02(){
        Calendar calendar = Calendar.getInstance();
        System.out.println( calendar.get(Calendar.YEAR)+"年"+ (calendar.get(Calendar.MONTH)+1)  +"月" +calendar.get(Calendar.DAY_OF_MONTH)+"日");
        //日历对象方法add偏移,现在开始向后偏移10天
        calendar.add(Calendar.DAY_OF_MONTH,10);
        System.out.println( calendar.get(Calendar.YEAR)+"年"+ (calendar.get(Calendar.MONTH)+1)  +"月" +calendar.get(Calendar.DAY_OF_MONTH)+"日");
    }





    /*
    * set 方法设置日历(默认跟随操作系统)
    * set(int field,int value)日历设置到指定的字段上
    * set(int year,int month,int day)设置到年月份
    * */

    public static void method01(){
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.get(Calendar.YEAR)+"年"+(calendar.get(Calendar.MONTH)+1)+"月"+calendar.get(Calendar.DAY_OF_MONTH)+"日");
        //设置日历,月份设置到3月份
        //calendar.set(Calendar.MONTH,2);

        //设置日历,2020年的5月1日
        calendar.set(2020,4,1);
        System.out.println(calendar.get(Calendar.YEAR)+"年"+(calendar.get(Calendar.MONTH)+1)+"月"+calendar.get(Calendar.DAY_OF_MONTH)+"日");

    }
}

03判断是否为闰年

import java.util.Calendar;

/*
*  指定年份,计算是否闰年
 *  计算方法.年份/4  /400
 *  年份已知,日历设定到指定年份的3月1日
 *  向前偏移1天,看这天是28还是29
* */
public class CalendarTest03判断是否为闰年 {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        int year=2020;//设定年份
        //日历设置到该年份的3月1日
        calendar.set(year,2,1);
        //日历向前偏移1天
        calendar.add(Calendar.DAY_OF_MONTH,-1);
        //取出天数
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(day);
    }
}

-------------------------------------------------------

Date日期类
01日期格式化
日期转字符串

import java.text.SimpleDateFormat;
import java.util.Date;

/*
* 对日期进行格式化:符合中国阅读习惯
* java.text.DateFormat  日期进行格式化
* DateFormat是抽象类,没有对象
* 使用他的子类对象是SimpleDateFormat,其不是抽象的
* DateFormat是抽象方法,其子类SimpleDateFormat必然会重写,需要new
* 如果不是抽象方法,子类对象直接调用
*
*
* 自定义格式:2019年11月18日  10点50分20秒
*    y:年份
*    M:月份
*    d:月中天数
*    H:几点
*    m:分钟
*    s:秒
*
*    格式化步骤:
*       1:创建子类对象SimpleDateFormat,不是静态,直接创建
*          调用String类型的构造方法,传递日期格式
*       2:子类对象调用方法  format
*          String  format(Date data)传递日期对象,返回格式化后的字符串
*
* */
public class DateFormatTest01日期转字符串 {
    public static void main(String[] args) {
        //1:创建子类对象SimpleDateFormat
        //2019年11月18日  10点50分20秒
        SimpleDateFormat s = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒");
       //2:子类对象调用方法  format,传递日期对象
        String str = s.format(new Date());
        System.out.println(str);
    }
}

字符串转日期

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
* 字符串转成日期对象使用
* String-->Date日期类
*  SimpleDateFormat对象的方法  parse
*
*  Date-->String
*   SimpleDateFormat对象的方法  format
*
*   实现步骤:
*      1:创建对象SimpleDateFormat
*         构造方法传递日期格式
*      2:调用对象的方法 parse
*         Date parse(String 日期)返回Date对象
* */
public class DateFormatTest02字符串转日期 {
    public static void main(String[] args) throws ParseException {
        //1:创建对象SimpleDateFormat
        SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
        //注意:字符串日期格式,必须和构造方法中的日期格式一样
        String str="2019-11-18";
        // 2:调用对象的方法 parse
        Date date = s.parse(str);
        System.out.println(date);
    }
}

02日期与毫秒互转

import java.util.Date;

/*
* 日期对象:java.util.Date
* 表示日期对象类
* 毫秒(千分之一秒)  1000毫秒=1秒
*
* 构造方法:
*     无参数构造方法
*     有参数构造方法,参数传递的是毫秒
*
*  日期类Date:
*     重要应用:实现类日期和毫秒之间的互转
*     日期不能进行数学计算,但是毫秒可以,他是整数
*
*
*     日期转成毫秒:new Date().getTime()  获取毫秒
*     毫秒转成日期:第一种:new Date(毫秒)
 *                第二种:new Date().setTime(毫秒)设定日期
* */
public class DateTest日期与毫秒互转 {
    public static void main(String[] args) {
        method04();
    }




    /*
    * Date类的方法 long getTime()
    * 日期转成毫秒
    * 返回当前日期对应的毫秒值
    * */
    public static void method03(){
        Date date = new Date();
        long time = date.getTime();
        System.out.println(time);//1574076660117此时此刻对应的毫秒值
    }






    /*
     * Date类的方法  void setTime(long time)
     * 第二种:毫秒转成日期
     * 传递毫秒,日期设定在毫秒上
     * */
    public static void method04(){
        Date date = new Date();
        date.setTime(1574076660117L);
        System.out.println(date);
    }




    /*
    * Date类有参构造方法
    * 第一种:毫秒转日期
    * Date(long time)传递的参数是毫秒,标准格林威治时间
    * 原点:1970-1-1:0:0:0   java日期的原始时间,是0毫秒
    * 现在是2019年
    *
    * 含义:日期设定到毫秒值上
    * */
    public static void method02(){
        Date date = new Date(15510000300303215L);
        System.out.println(date);
    }





    /*
    * Date类的无参构造方法
    * Mon Nov 18 10:14:44 CST 2019
    * 创建日期对象,输出的时间和日期跟随操作系统
    *
    * */
    public static void method01(){
        Date date = new Date();
        System.out.println(date.toString());
    }
}

-------------------------------------------------------

Object
01

/*
* java.lang.Object类,所有类的父类
*
*     private static native void registerNatives();
        static {
            registerNatives();
        }
          native: 本地修饰符,本地方法
        这样本地方法,不是由Java语言编写的,是C++语言编写
        JVM运行期间,对内存进行划分,独立内存位置 (本地方法栈  native stack)
        运行本地方法使用的内容
        本地方法的意义: 和当前的操作系统进行交互使用

        运行一个类的时候,Object先进入方法区,运行自己的静态成员,和本机的操作系统交互
* */
public class ObjectTest extends Object{
    public static void main(String[] args) {
        System.out.println("hello");
    }
}

02toString

public class Person {
  private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    //需要做有意义事情,重写此方法,返回类中成员变量的值
    public String toString(){
        return name+"..."+age;
    }
}

import java.util.ArrayList;

/*
* Object类的方法
*   public String toString() 返回对象的字符串表现形式
*
*   定义的Person类,继承Object
*   拥有方法toString()
*
*   结论:
*      调用父类的方法toString()输出对象的地址
*      输出语句,直接打印对象,输出对象的地址
*
*      在输出语句中,默认调用对象的toString()方法
*
*      toString()方法的执行结果:分析Object类的定义方法
*
*       public String toString(){
 *          return getClass().getName()+"@"+ Integer.toHexString(  hashCode()  ) ;
 *      }
 *
 *      需求:看对象内存地址,没有意义,因此
 *           需要做有意义的事情,也就是需要重写此方法,返回类中成员的变量的值
 *           方便在对象输出的时候,看到成员变量的值
*
*
*
* */
public class ObjectTest {
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("张三");
        person.setAge(30);
        //调用Person对象的方法toString
        String s = person.toString();
        System.out.println(s);
        //com.itheima.Object.object02toString.Person@6e0be858
        //出现地址值,说明这个子类没有重写toString,只是默认调用了,需要人工重写也就是需要以下操作,类似的有Random
        //  public String toString()
        System.out.println(person);
        System.out.println(person.toString());

        //而 ArrayList默认调用了,并且默认重写了toString(),类似的还有Scanner
        ArrayList<String> list = new ArrayList<>();
        list.add("aa");
        list.add("cc");
        list.add("bb");
        System.out.println(list);

    }
}

03equals

public class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Person(String name, int age) {

        this.name = name;
        this.age = age;
    }

    public Person() {

    }
    //需要做有意义事情,重写次方法,返回类中成员变量的值
    public String toString(){
        return name + "..." +age;
    }
    /*
    * 重写父类方法equals,建立自己的比较方式
    * 比较两个对象的年龄,年龄相同返回true
    *
    * public boolean equals(Object obj)
    * */
    public boolean equals(Object obj){
        //判断  obj对象是不是p1
        //this是调用者,谁调用我,我就是谁。调用者对象p1,如果this对象的内存地址和传递的对象obj相等(说明是一个对象,自己跟自己比)
        if(this==obj)
            return true;


        //非空判断,传递的对象obj如果是null,就不用比较了
            if(obj==null)
                return false;

            //比较的对象this和obj
           //age是Person的特有成员,obj对象强制转成Person
            //判断obj是不是Person的对象
        if(obj instanceof Person){
            Person p=(Person)obj;
            //比较对象this和p的年龄是否相同
            return this.age==p.age;
        }
        return false;
    }
}

/*
* Object类的方法  equals
* Java语言认为,所有的对象都具有比较性,方法的作用进行两个对象的比较
*
*
* public boolean equals(Object obj)
* Person类继承Object,拥有方法equals
* Object类中对象比较的方法,equals默认比较的对象是内存地址是否相同
*
* 两个对象都是new出来的,地址不一样
* 北清路  1号
* 建材城西路  2号
*
*
* 比较地址无意义,重写方法equals建立Person类自己的比较形式
* 不打算比较地址,比较两个对象的年龄
* */
public class ObjectTest {
    public static void main(String[] args) {
        Person p1 = new Person("张三",20);
        Person p2 = new Person("李四",21);
        //对象比较,p1对象调用方法equals传递p2对象,无意义,需要重写
        boolean b = p1.equals(p2);
        System.out.println(b);


        //扩展
        String s1=new String("aa");
        String s2=new String("aa");
        /**
         * String类继承Object
         * 重写父类的方法equals,比较的是字符串内容
         * 不是地址
         */
        System.out.println(s1.equals(s2));


    }


}

-------------------------------------------------------

Regex正则表达式

/*
* 正则表达式
*      正则技术专门用于处理(复杂)字符串的功能
*      String,StringBuilder不够用
*
*  正则表达式:本质上就是一种规则,使用字符串和规则进行匹配
*
*  字符规则:
*      [abc]  :这个字符必须abc
*      [^abc]  :这个字符不能是abc
*      [a-zA-Z]  :这个字符可以是所有的字母
*      [^a-zA-Z]  :这个字符不可以是所有的字母
*      [0-9]  :这个字符必须是数字
*      [^0-9] :    这个字符不能是数字
*      [a-zA-Z0-9] : 这个字符可以是字母或者数字
*      [^a-zA-Z0-9] : 这个字符不可以是字母或者数字
*
*
*  预定义字符:
*        . : 匹配任意字符
*        \d : 这个字符必须是数字[0-9]
*        \D : 这个字符不能是数字[^0-9]
*        \w : 这个字符只能是单词字符 [a-zA-Z0-9_]
*         \W : 这个字符不能是单词字符 [^a-zA-Z0-9_]
*
*   数量词
*       X* :  X这个字符出现0次或者多次
*       X? :  X这个字符出现一次或者一次也没有
*       X+ :  X这个字符出现一次或者多次
*       X{m}: X这个字符出现正好m次
*       X{m,}:X这个字符出现至少m次
*       X{m,n}:X这个字符出现至少m次,但是不超过n次
*
*   * */
public class RegexTest {
    public static void main(String[] args) {
        method03();

        System.out.println("\"hello\"");//扩展
    }

    /*
     * 定义正则表达式,检测电子邮件
     */

    public static void method03(){
        String email="mys2s@sina.com.cn.asia";
          /* @前 字母小写 数字 _  长度不固定 +
           @后 域名小写字母数字  +
           .后面  字母小写  +
         *
         */
          String regex="[a-z0-9]+@[a-z0-9]+(\\.[a-z]+)+";
        boolean b = email.matches(regex);
        System.out.println(b);
    }




    /*
     * 定义正则表达式,检测手机号码 格式
     */
    public static void method02(){
        String tel="18000000000";
        //手机规则: 全数字 必须1开头 必须11位  第二位可以是 3456789
        String regex="1[3459678][\\d]{9}";
        boolean b = tel.matches(regex);
        System.out.println(b);
    }




    /*
     * 定义正则表达式,检测QQ号码
     * String类方法 boolean matches(String 正则规则)
     * 字符串和规则进行匹配,完全一致,返回true
     */
    public static void method01(){
        String qq="123123132";
        //检测,号码是否合法
        //全数字,0 不能开头 长度5-12
        String regex="[1-9][0-9]{4,11}";
        //字符串对象调用方法matches(传递规则)
        boolean b = qq.matches(regex);
        System.out.println(b);
    }


}

-------------------------------------------------------

System

public class Person {
    protected void finalize() throws Throwable {
        System.out.println("垃圾回收");
    }
}

/*
* java.lang.System类
* System类包含一些有用的类字段和方法。他不能被实例化
* System类不能创建对象,里面的成员全部静态修饰,直接类名.调用即可
* 无需对象,System类私有修饰了构造方法
* 方法介绍:
*      static void exit(int )结束JVM
 *     static long currentTimeMillis()获取当前时间的毫秒值
 *     static void arraycopy() 复制数组中的元素
 *     static void gc() 开启垃圾回收器
 *
 *
 *     String   不变对象  "abc"  ['a','b','c']
 *     StringBuilder  可变对象
 */

public class SystemTest {
    public static void main(String[] args) {
        method04();
    }

    /**
     * static void arraycopy(Object src,int srcPos,Object desc,int descPos,int length) 复制数组中的元素
     * Object src: 要复制的源数组
     * int srcPos : 源数组的开始索引
     * Object desc : 要复制到的目的数组
     * int descPos : 目的数组开始索引
     * int length : 复制的数组元素的个数
     */
    public static void method04(){
        int[]src={1,2,3,4,5};
        int[]desc={6,7,8,9,0};
        System.arraycopy(src,1,desc,2,2);
        for (int i = 0; i < desc.length; i++) {
            System.out.println(desc[i]);
        }
    }






    //static void gc() 开启垃圾回收器
    //使用完毕的对象,在堆内存中,成为垃圾,JVM会不定时收取垃圾
    public static void method03(){
        //Person person = new Person();person=null
        new Person();
        new Person();
        new Person();
        new Person();
        new Person();
        new Person();
        new Person();
        new Person();
        System.gc();

    }




    // static long currentTimeMillis()获取当前时间的毫秒值
    public static void method02(){
        long start = System.currentTimeMillis();
        for (int i = 0; i < 1000; i++) {
            System.out.println(i);
        }
        long end = System.currentTimeMillis();
        System.out.println(end-start);
    }



    //static void exit(int 状态码)结束JVM
    public static void method01(){
        while(true){//死循环
            System.exit(0);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值