黑马程序员11——单例设计模式 Runtime类 日期 日历 数组高级部分 大数据运算

来源:互联网 发布:杭州做网络推广的公司 编辑:程序博客网 时间:2024/06/14 15:46

------- android培训、java培训、期待与您交流! ----------


1. 单例设计模式

  设计模式,解决实际发送的问题,前提是OOP思想
  单例设计模式:保证一个类的对象,在内存中的唯一性
  
class Person{    private Person(){}    private static final Person p = new Person();    public static Person get(){       return p;    }  }  class Demo{    main(){      Person p = Person.get();    }  }

  如何实现这个要求
    A 不能让你去new对象,建立对象,必须调用类中的构造方法,私有化了
    B 私有构造方法后,虽然外面的类,不能创建对象了,但是自己本类是可以访问私有成员的
      自己本类中,创建自己类的对象
    C 外面的类,如果或者这个对象呢,提供公共方法访问这个对象
package cn.itcast.single;/* * 实现一个类对象在内存中的唯一性 * 单例设计模式 * 下面的写法 * private static final Single s = new Single(); * 类运行加载的时候,进入了静态区,直接创建了一个对象出来 * 饿汉式写法 * 饿汉式比较常见,但是面试不考class Single{//私有构造方法private Single(){}//本类中创建自己的对象private static final Single s = new Single();//提供公共方法。返回这个对象public static Single getInstance(){return s;}} *///单例模式的,懒汉式写法,延迟加载//懒汉式,如果多线程同时访问这个方法,对象的不唯一class Single{//私有构造方法private Single(){}//定义本类类型的成员变量,不创建对象private static Single s = null;//提供一个公共方法,返回这个对象public static Single getInstance(){if( s == null )s = new Single();return s;}}public class SingleDemo {public static void main(String[] args) {//通过类名,调用静态方法,获取对象,自己不能创建Single s = Single.getInstance();System.out.println(s);Single s1 = Single.getInstance();System.out.println(s1);}}


2. Runtime类
  java.lang.Runtime
  Runtime类对象,通过getRuntime方法获取,不能自己创建
  是单例设计模式编写的


  Runtime r = Runtime.getRuntime();
  Process exec(String s)执行,开启一个程序
  传递的字符串是一个命令,windows会在环境变量中找这个命令


3. 日期类
 日期这个事物,被视为对象,就有了这个事物的描述类
 java.util.Date类


 构造方法
   空参数的构造方法
     获取到运行的时候,操作系统上的时间和日期
   带有一个long类型参数
     传递一个long参数,毫秒值,获取到这个毫秒值指定的时间和日期
     将毫秒值,转成日期对象
 
 long getTime()将日期对象转成毫秒值
 System.currentTimeMillis()


 void setTime(long) 传递一个毫秒值,将毫秒值变成日期对象
 日期对象 <==> 毫秒值 之间的相互转换


 小结:
   毫秒值转日期  构造方法, setTime
   日期对象转毫秒值  getTime   System.currentTimeMillis()


 boolean after(Date d) 测试一个日期是否在另一个日期之后
 boolean before(Date d) 测试一个日期是否在另一个日期之前
 int compareTo
 
4. 日期的格式化
  将日期格式化为我们习惯看到的格式
  java.text.DateFormat  抽象类
     String format(Date d)日期格式化,返回字符串


  java.text.SimpleDateFormat 子类
    构造方法:
      SimpleDateFormat(String pattern) 传递一个字符串的日期规则


5. 日期的风格化
  java.text.DateFormat  抽象类
    static DateFormat getDateInstance() 
      return new SimpleDateFormat();
  静态方法,返回的是DateFormat类的子类对象


   static DateFormat getDateTimeInstance(int dateStyle, int timeStyle)
   int dateStyle, int timeStyle 日期,时间的样式,2个int值
   在DateFormat类中,定义好了
   static int LONG 


6. 将字符串转成日期对象
  从图形界面,还是从手机上,网页上收到日期都是String格式
    DateFormat类,非静态方法 Date parse(String s)字符串转成日期对象


  计算两个日期相差多少天
  2014-7-1  2015-2-8
  日期不能数学计算
  两个字符串转成日期对象,日期对象转成毫秒值
package cn.itcast.date;/* * 计算两个日期相差多少天 */import java.util.Scanner;import java.util.Date;import java.text.DateFormat;import java.text.SimpleDateFormat;public class DateFormatTest {public static void main(String[] args) throws Exception{//接收用户的输入Scanner sc = new Scanner(System.in);System.out.println("请输入日期");String date1 = sc.nextLine();System.out.println("请输入日期");String date2 = sc.nextLine();//字符串,转成日期对象DateFormat df = DateFormat.getDateInstance();Date d1 = df.parse(date1);Date d2 = df.parse(date2);//日期对象转成毫秒值long time1 = d1.getTime();long time2 = d2.getTime();//日期的毫秒值减发long time3 = Math.abs(time1 - time2);System.out.println(time3/1000/60/60/24);}}



7. 日历类
  Date方法过时,JDK1.1开始,被日历类取代
  java.util.Calendar
 
  日历字段:年,月,日,星期,在日历类中,静态常量表示


  是一个抽象类,看到了子类GregorianCalendar 
  Calendar类中,有一个静态方法,getInstance()直接返回子类对象


  java.util.GregorianCalendar[time=1405577829067,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,
  
  YEAR=2014,MONTH=6,WEEK_OF_YEAR=29,WEEK_OF_MONTH=3,DAY_OF_MONTH=17,DAY_OF_YEAR=198,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=2,HOUR_OF_DAY=14,MINUTE=17,SECOND=9,MILLISECOND=67,ZONE_OFFSET=28800000,DST_OFFSET=0]


  月份 0-11  星期0开头(星期日)
  获取日历中的需要的内容


  Calendar类中有一个获取的方法,专门用户获取日历字段,int get(日历字段)
  get方法,调用一次,只获得一个日历字段


  星期几的问题  星期0  星期一 。。。 星期六
  get(DAY_OF_WEEK)0-6
  数组 {星期日.星期一.星期六}
  查表法
 
  设置日历的方法
   void set(int field, int value) 第一个参数,日历字段,第二个参数具体的数据
   set(Calendar.MONTH,10)


   void set(int year, int month, int date) 
   void setTime(Date date) 传递一个日期对象,日历就会设置在这个日期上


   setTime(new Date(654765675L))
  
  日历偏移量
  add(int,int)偏移的字段,偏移的具体数值


 8. 数组高级部分
   数组排序,折半查找法


   数组的排序,将一个无序数组,排列成有序数组
   升序排列  ,小 -> 大


   折半查找法
     一个有顺序的数组,在这个数组中,找有没有指定的元素
     如果有,返回出现的下标,没有返回负数


     如果数组是无序,可以使用折半查找法,但是结果不准确
     不能排序 6 5 7 1 2 4
 
9. 数组的工具类 
  Java中,有一个类,专门操作数组
  java.util.Arrays,全部是静态方法
  排序,折半...


  sort()数组的升序,快速排序法


  int binarySearch(数组,查找的数据)
  找不到,返回负数,-插入点-1
  将你的需要找的数据,放在数组中,保证有序,插入点


  静态方法toString()将数组变成字符串




10. 大数据运算
 对于超级大数,不能在用基本数据类型表示
 提供了高精度计算,适合做财务软件


 java.math包中
   BigInteger
     构造方法,传递字符串格式的数字,数字包装成BigInteger
     + - * / 不采用运算符实现,采用方法实现
   加法运算
      BigInteger add(BigInteger val) 
   
   减法运算
      BigInteger subtract(BigInteger val) 
 
   乘法运算
     BigInteger multiply(BigInteger val) 
 
   除法运算
      BigInteger divide(BigInteger val) 
 
   BigDecimal
     构造方法,传递字符串格式的数字,包装成BigDecimal对象
      除法运算 
      BigDecimal divied(BigDecimal big)
      Non-terminating decimal expansion; no exact representable decimal result.
      除法出现了无限不循环小数


       BigDecimal divied(BigDecimal big,保留位数,舍入的模式)


       ROUND_HALF_UP 四舍五入

0 0
原创粉丝点击