您的位置:首页 > 职场人生

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

2014-08-17 16:55 453 查看
------- 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 四舍五入
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐