11.Java常用类:

  1. StringBuffer

    • StringBuffer 是使用缓冲区的,本身也是操作字符串的,但是与String类不同,String类的内容一旦声明之后则不可以改变,改变的只是其内存地址的指向,而StringBuffer中的内容是可以改变的,对于StringBuffer而言,本身是一个具体的操作类,所以不能像String那样采用直接赋值的方式进行对象的实例化,必须通过构造方法完成.
    • 在StringBuffer中使用append()方法,完成字符串的连接操作
    • public StringBuffer insert(int offset,String str)// 在第几个字符后面插入数据
      public StringBuffer reverse() //字符串反转操作
      public StringBuffer replace(int start,int end,String str)// 替换指定范围的内容
      public String substring(int start,int end) //字符串截取
      public StringBuffer delete(int start, int end) //移除此序列的字符串中的字符
      public int indexOf(String str)//查找指定的内容是否存在,如果存在返回位置,否则否则返回-1.
      public int length() //返回长度(字符数).
  2. Runtime
    • 运行时,是一个封装了JVM进程的类,每个JAVA程序实际上都是启动了一个JVM进程,那么每个JVM进程都是对应这个Runtime实例,此实例是由JVM为其实例化的.本类的定义中没有构造方法,构造方法被私有化了,在此类中肯定有一个方法可以返回本类的实例化对象.
    • public static Runtime getRuntime() //取得Runtime类的实例(如:Runtime run=Runtime.getRuntime();)
      public long freeMemory() //返回Java虚拟机中的空闲内存量
      public long maxMemory() //返回JVM的最大内存量
      public void gc() //运行垃圾回收器,释放空间 (如: Runtime run=Runtime.getRuntime(); run.gc();)
      public Process exec(String command)throws IOException //执行本机命令(如调用本机的记事本程序: Runtime run=Runtime.getRuntime();Process p=null; p=run.exec(“notepad.exe”);//需要异常处理 p.destroy();//结束进程)
  3. 国际化程序
    • 国际化的操作就是指一个程序可以同时适应多门语言
    • 想要实现Java程序的国际化操作必须通过以下的三个类完成
      • 1)java.util.Locale:用于表示一个国家语言类
      • 2)java.util.ResourceBundle:用于访问资源文件
      • 3)java.textMessageFormat:格式化资源文件的占位字符串
  4. 日期操作类
    • Date类:直接实例化Date对象:Date 名称=new Date();

      • Calendar类:可以按照自己需要的格式显示的时间,则就可以使用Calendar类
      • Calendar类是一个抽象类,既然是一个抽象类则肯定无法直接使用,此时就要利用对象多态性的概念.通过向上的转型关系实例化本类对象.
      • Calendar类取得一个完整的日期:
      • Calendar calendar=new GregorianCalendar();
        calendar.get(Calendar.YEAR) ; //取得年份
        calendar.get(Calendar.MONTH) ; //取得月份,注意:此处的月份比实际的少一个月,要打印时要+1;
        calendar.get(Calendar.DAY_OF_MONTH) ; //取得日期calendar.get(Calendar.HOUR_OF_DAY) ; //取得小时calendar.get(Calendar.MINUTE) ; //取得分
        calendar.get(Calendar.SECOND) ; //取得秒
        calendar.get(Calendar.MILLISECOND) ; //取得毫秒
    • DateFormat类:此类是一个日期的格式化类,专门格式化日期的操作.此类是定义在java.text包中的.
    • public static final DateFormat getDateInstance() //得到日期的DateFormat对象
      public static final DateFormat getDateTimeInstance() //得到日期时间的DateFormat对象
      public final String format(Date date) //直接使用DateFormat类完成Date类的转换功能
    • SimpleDateFormat类:
      • (一)此类 功能是完成日期的显示格式化的

        • 1)y 表示年, 年份是四位数字,所以需要使用”yyyy”表示年.
        • 2)M 表示月, 月份是两位数字,所以需要使用”MM”表示月.
        • 3)d 表示日, 日是两位数字,所以需要使用”dd”表示日.
        • 4)H 表示时, 时是两位数字,所以需要使用”HH”表示时.
        • 5)m 表示分, 分是两位数字,所以需要使用”mm”表示分.
        • 6)s 表示秒, 秒是两位数字,所以需要使用”ss”表示秒.
        • 7)S 表示毫秒,毫秒是三位数字,所以需要使用”SSS”表示毫秒.
      • (二)在SimpleDateFormat类使用的时候,必须注意的是在构造对象时要传人匹配的模板
        • 1)构造方法:publicSimpleDateFormat(String pattern)
        • 2)转换: public Date parse(String source) throws ParseException 此时取得的是全部的时间数.
        • 3)格式化: public final String format(Date date) 将时间重新格式化成字符串显示.
      • (三)具体的一个示例:
      • String strDate = "2008-10-19 10:11:30.345" ;// 准备第一个模板,从字符串中提取出日期数字
        String pat1 = "yyyy-MM-dd HH:mm:ss.SSS" ;// 准备第二个模板,将提取后的日期数字变为指定的格式
        String pat2 = "yyyy年MM月dd日 HH时mm分ss秒SSS毫秒" ;
        SimpleDateFormat sdf1 = new SimpleDateFormat(pat1) ; // 实例化模板对象
        SimpleDateFormat sdf2 = new SimpleDateFormat(pat2) ; // 实例化模板对象
        Date d = null ;
        try{
        d = sdf1.parse(strDate) ; // 将给定的字符串中的日期提取出来
        }catch(Exception e){ // 如果提供的字符串格式有错误,则进行异常处理
        e.printStackTrace() ; // 打印异常信息
        }
        System.out.println(sdf2.format(d)) ; // 将日期变为新的格式
      • (四)得到系统时间:
      • SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") ;
        System.out.println("系统日期:"+sdf.format(new Date()) );
      • (五)得到中文时间:
      • SimpleDateFormat sdf= new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒SSS毫秒") ;
        System.out.println("中文日期:"+sdf.format(new Date()) );
      • (六)得到时间戳:
      • SimpleDateFormat sdf= new SimpleDateFormat("yyyyMMddHHmmssSSS") ;
        System.out.println("时间戳:"+sdf.format(new Date()) );
  5. Math与Random类
    • Math类

      • Math.abs(-1);//求-1的绝对值
        Math.cbrt(8);//求2的立方根
        Math.max(1,5);//求两个数的最大值
        Math.min(2,4);//求两个数的最小值
        Math.sqrt(9);//求9的平方根
        Math.pow(2,3);//求2的3次方
        Math.round(2.6);//2.6的四舍五入(这个四舍五入是将小数点后面的全忽略掉了,要想准确的四舍五入则使用BigDecimal类完成)
    • Random类:Random类的主要功能是产生随机数,可以产生一个指定范围的随机数.
      • public int nextInt(int n);//产生一个0到n之间的一个整数
  6. NumberFormat类
    • 表示数字的格式化类.
    • 定义格式: public abstract class NumberFormat extends Format
    • 方法:
    1. public static Locale[] getAVailableLocales() 返回所有语言环境的数组
      public static final NumberFormat getInstance() 返回当前默认语言环境的数字格式
      public static NumberFormat getInstance(Locale inLocale) 返回指定语言环境的数字格式
      public static final NumberFormat getCurrencyInstance() 返回当前默认环境的货币格式
      public static NumberFormat getCurrencyInstance(Locale inLocale) 返回指定语言环境的数字格式
    • NumberFormat nf = null ;    // 声明一个NumberFormat对象
      nf = NumberFormat.getInstance() ; // 得到默认的数字格式化显示
      System.out.println("格式化之后的数字:" + nf.format(10000000)) ;
      System.out.println("格式化之后的数字:" + nf.format(1000.345)) ;
    • DecimalFormat的基本使用:可以按照自己的格式格式化数字
      • (一)格式化模板:
      •  标记   位置   描述
        1) 0   数字 //每个0表示一位,如果该位不存在则显示0
        2) #   数字 //每个#表示一位,如果该位不存在则不显示
        3) .   数字 //小数点分隔符或货币的小数分隔符
        4) -   数字 //代表负号
        5) ,   数字 //分组分隔符
        6) E   数字 //分隔科学计数法中的尾数和指数
        7) ;   子模式边界 //分隔正数和负数子模式
        8) %   前缀或后缀 //数字乘以100并显示为百分数
        9) \u2030   前缀或后缀 //数字乘以1000兵显示为千分数
        10) ¤ (\u00A4)   前缀或后缀 //货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符。
        11) ‘   前缀或后缀 //用于在前缀或或后缀中为特殊字符加引号,例如 "'#'#" 将 123 格式化为 "#123"。要创建单引号本身,请连续使用两个单引号:"# o''clock"。
      • (二)示例:
      • DecimalFormat df = null ;
        df = new DecimalFormat("###,###.###") ;
        String str = df.format(111222.34567) ;
        System.out.println(str) ;
        df = new DecimalFormat("000,000.000") ;
        String str = df.format(111222.34567) ;
        System.out.println(str) ;
        df = new DecimalFormat("###,###.###¥") ;
        String str = df.format(111222.34567) ;
        System.out.println(str) ;
        df = new DecimalFormat("000,000.000¥") ;
        String str = df.format(111222.34567) ;
        System.out.println(str) ;
        df = new DecimalFormat("##.###%") ;
        String str = df.format(0.345678) ;
        System.out.println(str) ;
        df = new DecimalFormat("00.###%") ;
        String str = df.format(0.345678) ;
        System.out.println(str) ;
        df = new DecimalFormat("##.###%") ;
        String str = df.format(0.0345678) ;
        System.out.println(str) ;
        df = new DecimalFormat("###.###\u2030") ;
        String str = df.format(0.345678) ;
        System.out.println(str) ;
  7. 大操作数(BigIntger,BigDecimal)
    • 操作整型:BigInteger
    • public BigInteger(String val) //将一个字符串变形为BigInteger类型的数据
      public BigInteger add(BigInteger val) //加法
      public BigInteger subtract(BigInteger val)// 减法
      public BigInteger muItiply(BigInteger val) //乘法
      public BigInteger divide(BigInteger val) //除法
      public BigInteger max(BigInteger val) //返回两个大数字中的最大值
      public BigInteger min(BigInteger val) //返回两个大数字中的最小值
      public BigInteger[] divideAndRemainder(BigInteger val)// 除法操作,数组的第一个元素为除法的商,第二个为元素为除法的余数
    • 示例:
    • BigInteger bi1 = new BigInteger("123456789") ;// 声明BigInteger对象
      BigInteger bi2 = new BigInteger("987654321") ;// 声明BigInteger对象
      System.out.println("加法操作:" + bi2.add(bi1)) ; // 加法操作
      System.out.println("减法操作:" + bi2.subtract(bi1)) ; // 减法操作
      System.out.println("乘法操作:" + bi2.multiply(bi1)) ; // 乘法操作
      System.out.println("除法操作:" + bi2.divide(bi1)) ; // 除法操作
      System.out.println("最大数:" + bi2.max(bi1)) ; // 求出最大数
      System.out.println("最小数:" + bi2.min(bi1)) ; // 求出最小数
      BigInteger result[] = bi2.divideAndRemainder(bi1) ;// 求出余数的除法操作
      System.out.println("商是:" + result[0] + ";余数是:" + result[1]) ;
    • 操作小数:BigDecimal
    • public BigDecimal(double val)// 将double表示形式转换为BigDecimal
      public BigDecimal(int val) //将int表示形式转换为BigDecimal
      public BigDecimal(String val) //将字符串表示形式转换为BigDecimal
      public BigDecimal add(BigDecimal augend)// 加法
      public BigDecimal subtract(BigDecimal Subtrahend) //减法
      public BigDecimal multiply(BigDecimal multiplicand) //乘法
      public BigDecimal divide(BigDecimal divisor) //除法
  8. Arrays数组类:Arrays表示数组的操作类,是直接定义在java.util包中的.
  9. pubic static boolean equals(int[] a,int[] a2) //判断两个数组是否相等,此方法被重载多次,可判断各种数据类型的数组
    public static void fill(int[] a,int val)// 将指定内容填充到数组之中,此方法被重载多次,可以填充各种数据类型的数组
    public static void sort(int[] a)// 数组排序,此方法被重载多次,可以对各种类型的数组进行排序
    public static int binarySearch(int[] a,int key) //对排序后的数组进行检索,此方法被重新多次,可以对各种类型数组进行搜索
    public static String toString(int[] a) //输出数组信息,此方法被重载多次,可以输出各种数据类型的数组.
  10. 比较器
    • Comparable接口的作用

      • 定义:

        • public interface Comparable<T>{
            public int compareTo(T o);
          }
      • 此方法返回一个int类型的数据,但是此int的值只能是一下三种:
        • 1: 表示大于
        • -1:表示小于
        • 0:表示相等
    • Comparator
    • 定义格式: 
      public interface Comparator<T>{
      public int compare(T o1,T o2);
      boolean equals(Object obj);
      }
  11. 正则表达式
    • 正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证,拆分,替换功能.
    • Pattern:主要作用是进行正则规范(如”[0-9]”就属于正则规范)的编写,在Pattern类中如果要想取得Pattern类实例,则必须调用compile()方法
    • public static Pattern compile(String regex) //指定正则表达式规则
      public Matcher matcher(CharSequence input)// 返回Matcher类实例
      public String[] split(CharSequence input) //字符串拆分
    • Matcher:主要是执行规范,验证一个字符串是否符合其规范.
    • public boolean matches() //执行验证
      public String replaceAll(String replacement //字符串替换
    • 示例:
      • (一) 匹配
      • String str = "1983-07-27" ;    // 指定好一个日期格式的字符串
        String pat = "\\d{4}-\\d{2}-\\d{2}" ; // 指定好正则表达式
        Pattern p = Pattern.compile(pat) ; // 实例化Pattern类
        Matcher m = p.matcher(str) ; // 实例化Matcher类
        if(m.matches()){ // 进行验证的匹配,使用正则
        System.out.println("日期格式合法!") ;
        }else{
        System.out.println("日期格式不合法!") ;
        }
      • (二) 拆分
      • String str = "A1B22C333D4444E55555F" ;    // 指定好一个字符串
        String pat = "\\d+" ; // 指定好正则表达式
        Pattern p = Pattern.compile(pat) ; // 实例化Pattern类
        String s[] = p.split(str) ; // 执行拆分操作
        for(int x=0;x<s.length;x++){
        System.out.print(s[x] + "\t") ;
        }
      • (三) 拆分替换
      • String str = "A1B22C333D4444E55555F" ;    // 指定好一个字符串
        String pat = "\\d+" ; // 指定好正则表达式
        Pattern p = Pattern.compile(pat) ; // 实例化Pattern类
        Matcher m = p.matcher(str) ; // 实例化Matcher类的对象
        String newString = m.replaceAll("_") ;
        System.out.println(newString) ;
      • (四) 拆分替换验证
      • String str1 = "A1B22C333D4444E55555F".replaceAll("\\d+","_") ;
        boolean temp = "1983-07-27".matches("\\d{4}-\\d{2}-\\d{2}") ;
        String s[] = "A1B22C333D4444E55555F".split("\\d+") ;
        System.out.println("字符串替换操作:" + str1) ;
        System.out.println("字符串验证:" + temp) ;
        System.out.print("字符串的拆分:") ;
        for(int x=0;x<s.length;x++){
        System.out.print(s[x] + "\t") ;
        }
      • (五) 拆分
      • String info = "LXH:98|MLDN:90|LI:100" ;    // 定义一个字符串
        // 拆分的形式:
        /*
        LXH --> 98
        MLDN --> 90
        LI --> 100
        */
        String s[] = info.split("\\|") ;
        System.out.println("字符串的拆分:") ;
        for(int x=0;x<s.length;x++){
        String s2[] = s[x].split(":") ;
        System.out.println(s2[0] + "\t" + s2[1]) ;
        }

12.定时调度

  1. 定时调度:每当一端时间,程序会自动执行,称为定时调度.必须保证程序始终运行着才可以,也就是说是想当于定时调度是在程序之外又启动了一个新的线程.
  2. Timer:是一种线程设施,可以用来实现在某一个时间或某一端时间后,安排某一个任务执行一次,或定期重复执行.该功能要与TimerTask配合使用,TimerTask类用来实现由Timer安排的一次或重复执行的某一个任务.每个Timer对象对应的是一个线程,因为次计时器所执行的任务应该迅速完成,否则可能会延迟后续任务的执行,而这些后续的任务就有可能堆在一起,等到该任务完成后才能快速连续执行.
  3. public Timer() //用来创建一个计时器并启动该计时器
    public void cancel() //用来终止该计时器,并放弃所有已安排的任务.对当前正在执行的任务没有影响
    public int purge() //将所有已经取消的任务移除,一般用来释放内存空间
    public void schedule(TimerTask task,Date time) //安排一个任务在指定的时间执行,如果已经超过该时间,则立即执行.
    public void schedule(TimerTask task,Date firstTime,long period) //安排一个任务在指定的时间执行,之后以固定的频率(单位:毫秒)重复执行.
    public void schedule(TimerTask task,long delay) //安排一个任务在一端时间(单位:毫秒) 后执行.
    public void schedule(TimerTask task,long delay,long period) //安排一个任务在一段时间(单位:毫秒)后执行,之后以固定的频率(单位:毫秒)重复执行
    public void scheduleAtFixedRate(TimerTask task,Date firstTime,long period) //安排一个任务在指定的时间执行,之后以近似固定的频率(单位:毫秒)重复执行
    public void scheduleAtFixedRate(TimerTask task,long delay,long period) //安排一个任务在一段时间(单位:毫秒)后执行,之后以近似固定的频率(单位:毫秒)重复执行.
  4. schedule()与scheduleAtFixedRate()方法的区别:
    • 两者的区别在与重复执行任务时,对于时间间隔出现延迟的情况处理:

      • schedule() 方法的执行时间间隔永远是固定的,如果之前出现了延迟的情况,之后也会继续按照设定好的时间间隔时间来执行
      • scheduleAtFixedRate()方法可以根据出现的延迟时间自动调整下一次间隔的执行时间.
  5. TimerTask:要想执行具体的任务,则必须使用TimerTask类. TimerTask类是一个抽象类.如果要使用该类,需要自己建立一个类来继承此类,并实现其中的抽象方法.
  6. public void cancel() //用来终止此任务,如果该任务只执行一次且还没有执行,则永远不会再执行,如果为重复执行任务,则之后不会再执行(如果任务正在执行,则执行完成不会再执行).
    public void run() //该任务所要执行的具体操作,该方法为引入的接口Runnable中的方法,子类需要覆写此方法.
    public long scheduleExecutionTime() //返回最近一次要执行该任务的时间(如果正在执行,则返回此任务的执行安排时间),一般在run()方法中调用,用来判断当前是否有足够的时间来执行完成该任务.
  7. 示例:
  8. import java.util.TimerTask ;
    import java.util.Date ;
    import java.text.SimpleDateFormat ;
    class MyTask extends TimerTask{ // 任务调度类都要继承TimerTask
    public void run(){
    SimpleDateFormat sdf = null ;
    sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") ;
    System.out.println("当前系统时间为:" + sdf.format(new Date())) ;
    }
    };
    import java.util.Timer ;
    public class TestTask{
    public static void main(String args[]){
    Timer t = new Timer() ; // 建立Timer类对象
    MyTask mytask = new MyTask() ; // 定义任务
    t.schedule(mytask,1000,2000) ; // 设置任务的执行,1秒后开始,每2秒重复
    }
    };

Java 基础知识总结 2的更多相关文章

  1. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  2. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  3. Java基础知识系列——String

    最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...

  4. 学习android学习必备的java基础知识--四大内部类

    学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...

  5. JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)

    本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...

  6. java基础知识梳理

    java基础知识梳理 1 基本数据类型

  7. java基础知识回顾之---java String final类普通方法

    辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      ...

  8. Java 基础知识(一)

    Java基础知识篇: 一.关键字解释 1. final:修饰非抽象类,非抽象方法和属性, 以及修饰方法参数,代表“无法改变的”.出于对设计或者效率的考虑使用该关键字. final类无法被继承,fina ...

  9. java 基础知识三 java变量

    java  基础知识 三 变量 1.作用域 {} 包围起来的代码 称之为代码块,在块中声明的变量只能在块中使用 2.常量 就是固定不变的量,一旦被定义,它的值就不能再被改变. 3.变量 变量必须在程序 ...

  10. java 基础知识二 基本类型与运算符

    java  基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...

随机推荐

  1. 启程、对C的继承

    Cocoa和Object-c是苹果公司OS X和IOS操作系统的核心.   .m扩展名表示文件使用的是Objective-c代码.   与C语言一样,Objective-c使用头文件来包含结构体.符号 ...

  2. JavaScript中非常强大的Swiper

    刚开始学习javaScript的时候,做轮播图(比如手机淘宝首页的广告位置)是使用html和css结合js的for语句.传参等知识写出来的.但学到js事件时,其实用Swiper更加好写,Swiper的 ...

  3. 关于zepto在chrome中触发两次的解决方案

    复现条件:chrome 55+ 1.zepto tap的实现及double fire的原因 在监听DOM根节点的时候,touchStart后通过XY的坐标偏差,与tapTime的计时判断Tap/Lon ...

  4. XCel 项目总结 - Electron 与 Vue 的性能优化

    XCEL 是由凹凸实验室推出的一个 Excel 数据清洗工具,其通过可视化的方式让用户轻松地对 Excel 数据进行筛选. XCEL 基于 Electron 和 Vue 2.0 进行开发,充分利用 E ...

  5. C#调用PB写的com组件dll

    背景 小编为了使用C#去模仿PB代码的加密算法,结果发现PB算法中,的long类型只有21亿,实际上传入的数值达到了78亿,造成了数据溢出,精度丢失的情况. 然而PB的算法已经使用C#不可以还原(C# ...

  6. 【Zookeeper】源码分析之服务器(二)

    一.前言 前面阐述了服务器的总体框架,下面来分析服务器的所有父类ZooKeeperServer. 二.ZooKeeperServer源码分析 2.1 类的继承关系 public class ZooKe ...

  7. 读书笔记 effective c++ Item 30 理解内联的里里外外 (大师入场啦)

    最近北京房价蹭蹭猛涨,买了房子的人心花怒放,没买的人心惊肉跳,咬牙切齿,楼主作为北漂无房一族,着实又亚历山大了一把,这些天晚上睡觉总是很难入睡,即使入睡,也是浮梦连篇,即使亚历山大,对C++的热情和追 ...

  8. jquery 日期获取

    来自:http://blog.csdn.NET/liujun198773/article/details/7554628  感谢 $(function(){ var mydate = new Date ...

  9. virtualBox,webstorm,开虚拟机传代码

    一起git一个新技能 利用virtualBOX在本地开一个虚拟机,然后设置webstorm连接到虚拟机,将代码传到虚拟机里. 以下详细讲解: 第一步: 第二步:管理虚拟机的设置(我是用的是Xshell ...

  10. OnsenUI和AngularJS配合搭建混合应用的基本步骤

    混合开发的热潮已经掀起,实现混合开发的方式很多.今天给大家介绍一个实现混合开发的基本方法-OnsenUI和AngularJS配合. OnsenUI是一个可以实现混合开发的前端框架,包含了很多前端设计中 ...