java基础第15天


StringBuffer概述


1 什么叫缓冲区
  等待使用的数据存放在缓冲区中。


2 什么是StringBuffer
  等待使用的String存放在StringBuffer中。
  把 String转换成StringBuffer,然后在StringBuffer加工,最后再把StringBuffer转换回String。


3 StringBuffer的好处(与String的不同之处)
  String是不可变的,而StringBuffer是可变的!
  如果一个字符串需要在计算过程中不断的发生变化,能使用应该先使用StringBuffer,然后在从 StringBuffer中把计算后的String提取出来。


4 StringBuffer与数组的不同之处
数组长度是不可变的,而StringBuffer长度是可变的;
数组只有存放一种数组类型,但可以向StringBuffer中添加任何类型的数据,但提取出来后就都变成字符串了。


StringBuffer构造器
  刚刚使用StringBuffer时,我们可以先不去考虑容量的问题。因为你的程序可能不会太在意这么              一点点的“浪费”!
  对容量的了解可以先放放!
  
  优化:节省空间(但有可能会浪费)或时间即(可能会浪费空间)所谓的优化!
1 StringBuffer()
  创建空缓冲区,容量为16个字符位置(默认)。


2 StringBuffer(int capacity)
  创建缓冲区,容量为capacity。




3 StringBuffer(String str)
  创建包含指定字符串str的缓冲区,容量为str.length() + 16


4 长度与容量的区别
int length():返回缓冲区中字符的个数。
int capacity():返回缓冲区当前容量个数。


StringBuffer的添加删除元素操作
  StringBuffer类,有很多方法,本来应该是返回void,但它都会返回StringBuffer,返回的就是自己本身。
1 StringBuffer append(type data)
  其中参数type表示很多种重载的意思。自行查阅API文档了解详情。
  把参数转换成String类型,追加到缓冲区的尾部。
  返回值为:this,即当前StringBuffer对象。
  返回当前对象的用意:支持链式编码,俗称“连点操作”。


2 StringBuffer insert(int offset, type data)
  把指定的数据插入到指定的位置。


3 StringBuffer delete(int start, int end)
  删除缓冲区中指定区间的字符。会删除start位置上的字符,但不删除end位置上的字符。


StringBuffer其他功能


1 StringBuffer replace(int start, int end, String str)
  String类也有replace方法,但它是返回一个替换后的新串,而原串没有改变。
  但StringBuffer是把自己改变了,而返回值只是为了链式操作。


2 String substring(int start)
  截取子串,与String类的这个功能相同!
  这个不改变本身。只是返回一个子串,而本身没有被截取!


3 String substring(int strat, int end)




4 StringBuffer reverse()




练习:把字符串反转输出


1 第一种形式:使用字符数组,反转输出




2 第二种形式:使用StringBuffer的reverse()方法




StringBuilder


1 StringBuilder与StringBuffer的比较
  StringBuffer是线程安全的!但效率低!(推荐:多线程用!)
  StringBuilder是线程不安全的!但效率高!(推荐:单线程用!)
  


2 StringBuilder被编译器使用




3 编译器的优化在循环中很差




练习:使用StringBuilder把int[]转换成String




基本类型包装器概述


1 什么是基本类型包装器类
  Object o = 可以是任何引用类型。
  public static void fun(Object o) {}//可以使用任何引用类型来调用这个方法


2 为什么需要基本类型包装器类




3 所有基本类型与对应的包装器类


基本类型 包装器类
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character




Integer的常量与进制转换方法


1 MAX_VALUE和MIN_VALUE




2 把整数转换成其他进制的方法
static String toBinaryString(int i)
static String toOctalString(int i)
static String toHexString(int i)
static String toString(int i, int radix)


Integer类的构造器


1 Integer(int i)
  把int转换成Integer


2 Integer(String s)
  把String转换成Integer。


3 重载了toString()方法








与对应基本类型的转换方法


int类型转换成Integer类型
Integer(int i)构造器
static Integer valueOf(int i)静态方法


2 Integer类型转换成int类型
  int intValue()
  String转换到Integer
  
Integer i = Integer.valueOf(100);//String转换到Integer
int num = i.intValue();//Integer类型转换成int类型






1 String转换到Integer
  new Integer(String)//Integer i1 = new Integer(100);
  Integer.valueOf(String)


2 String转换到int
把String转换到Integer,再把Integer转换成int;
直接把String转换到int。int Integer.parseInt(String)


String s = "124";
int num = Integer.parseInt(s);
System.out.println(num);




练习:给多个整数构成字符串排序
  给多个整数构成字符串排序。
  由多个整数构成的字符串:3,6,9,2,5,8,1,4,7。排序后的结果为:1,2,3,4,5,6,7,8,9。


自动打包(装箱)解包(拆箱)


1 自动打包(从int到Integer)
  Integer i = 100;


2 自动解包(从Integer到int)
  Integer i = new Integer(100);
  int a = i;


3 自动解包,再打包
  Integer i = new Integer(1);
  i += 2;


4 与自动打包解包相关的面试题
  Integer i1 = 100;
  Integeri2 = 100;
  Integer i3 = 200;
  Integer i4 = 200;
  System.out.println(i1 == i2);
  System.out.println(i3 == i4);
Math类介绍


1 完全静态方法类
因为没有实例方法,所以就不需要创建本类实例;
因为不需要实例,也就不需要有构造器;
因为怕有默认构造器,所以需要有private构造器;
这样的类好像也不需要有子类,所以Math是final类。


2 方法介绍
static double abs(double):返回参数的绝对值
static double max(double d1, double d2):返回参数d1和d2中的大者。
static double min(double d1, double d2) :返回参数d1和d2中的小者。
static double sqrt(double):求参数的平方根
static double cbrt(double):求参数的立方根
static double pow(double a, double b):求a的b次方
static double ceil(double):返回大于等于参数的最小整数。
static double floor(double):返回小于等于参数的最大整数。
static long round(double):四舍五入
static int round(float):四舍五入
static double random():返回一个0~1之间的随机数。


















1 String转换到Integer




2 String转换到int
把String转换到Integer,再把Integer转换成int;
直接把String转换到int。


练习:给多个整数构成字符串排序
  给多个整数构成字符串排序。
  由多个整数构成的字符串:3,6,9,2,5,8,1,4,7。排序后的结果为:1,2,3,4,5,6,7,8,9。


自动打包(装箱)解包(拆箱)


1 自动打包(从int到Integer)
  Integer i = 100;


2 自动解包(从Integer到int)
  Integer i = new Integer(100);
  int a = i;


3 自动解包,再打包
  Integer i = new Integer(1);
  i += 2;


4 与自动打包解包相关的面试题
  Integer i1 = 100;
  Integeri2 = 100;
  Integer i3 = 200;
  Integer i4 = 200;
  System.out.println(i1 == i2);
  System.out.println(i3 == i4);
Math类介绍


1 完全静态方法类
因为没有实例方法,所以就不需要创建本类实例;
因为不需要实例,也就不需要有构造器;
因为怕有默认构造器,所以需要有private构造器;
这样的类好像也不需要有子类,所以Math是final类。


2 方法介绍
static double abs(double)
static double max(double d1, double d2)
static double min(double d1, double d2)
static double sqrt(double)
static double cbrt(double)
static double pow(double a, double b)
static double ceil(double)
static double floor(double)
static long round(double)
static int round(float)
static double random()


日期相关类
Date类


1 Date类概述
  Date类对象表示日期和时间,即年、月、日、时、分、秒。


2 Date类的构造器
Date()
Date(long) – new Date(0)表示(1970年1月1日,00:00:00)。但因为中国是东八区,所以是表示(1970年1月1日,08:00:00)。其中参数可以是负数,表示“基准时间”之前。


3 Date类的方法
boolean after(Date when):当前时间是否在参数时间之后。d1.after(d2)
boolean before(Date when):当前时间是否在参数时间之前
int compareTo(Date date):当this>data返回正数,this<date返回负数,否则返回0。d1.compareTo(d2)
boolean equals(Date date):比较当前时间和参数时间是否相等。
long getTime():获取当前时间毫秒值
void setTime(long time):设置当前时间毫秒值
String toString()


日期格式化器


1 DateFormat概述
  它是一个抽象类,在java.text包下。
  我们中需要学习一个方法,format(Date)


2 获取DateFormat实例的方法
  我们知道它有一个子类:SimpleDateFormat


3 获取DateFormat实例的其它方法
获取只对日期格式化的DateFormat实例;
获取只对时间格式化的DateFormat实例;
获取对日期和时间格式化的DateFormat实例;


4 获取DateFormat实例(完全FULL、长LONG、中SHORT、短MEDIUM)
获取完整格式的DateFormat实例;
获取长格式的DateFormat实例;
获取中格式的DateFormat实例;
获取短格式的DateFormat实例;


SimpleDateFormat


1 SimpleDateFormat类概述
  DateFormat类的子类!
  其实DateFormat类的所有获取DateFormat实例的方法,返回的都是SimpleDateFormat类的对象。


2 SimpleDateFormat构造器(指定格式)
  SimpleDateFormat(String pattern):指定模式字符串来构造对象。
  其中参数表示一个模式字符串,它表示如何格式化Date对象。这其中需要使用模式字符!
  y – 表示年
  M – 表示月
  d -- 表示日期
  H – 表示小时(0~23)
  m – 给分钟
  s – 表示秒钟
  
  例如:new SimpleDateFormat(“yyyy年MM月dd日”);
  如果使用了错误的模式字符,那么构造器会抛出异常。


3 把String转换成Date对象
  把String转换成Date需要使用SimpleDateFormat类的Date parse(String)方法
  例如:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse("2012-12-28 18:12:34");
System.out.println(date);
  
  注意,parse()方法声明了ParseException。当parse()方法的参数不能匹配SimpleDataFormat的模式字符串时,那么就抛出ParseException。


其它格式化


Date d = new Date();
String str = String.format("%tF %<tR", d);
System.out.println(str);
str = String.format("%tF %<tT", d);
System.out.println(str);


练习
作业!
计算2000-08-08到2012-12-21相差多少天
把两个字符串转换成Date
再把两个Date转换成两个毫秒值
用两个毫秒值相减
把间隔的毫秒值转换成天


Carlendar
  Carlendar抽象类
1 获取Carlendar
  Carlendar c = Calendar.getInstance();
  getInstance()方法返回的是Carlendar子类的实例对象。
  Carlendar类只有一个子类:GregorianCarlendar。


2 GregorianCarlendar构造器
GregorianCarlendar():构造当前时间;
GregorianCarlendar(int year, int month, int day):指定年、月、日来构造时间;
GregorianCarlendar(int year, int month, int day, int hour, int minute):指定年、月、日、时、分来构造时间;
GregorianCarlendar(int year,int month,int day,int hour, int minute, int second):指定年、月、日、时、分、秒来构造时间。


3 Calendar的获取方法
  get(int field),获取属性。
获取年:get(Calendar.YEAR);
获取月:get(Calendar.MONTH),注意,如果当前月份是1,那么返回值为0;
获取日:get(Calendar.DATE);
获取星期:get(Calendar.DAY_OF_WEEK),注意,如果当前是星期日,那么返回值为1。
获取小时:get(Calendar.HOUR_OF_DAY)
获取分钟:get(Calendar.MINUTE)
获取秒钟:get(Calendar.SECOND)


3 Calendar的设置方法
  set(int field, int value)
设置年:set(Calendar.YEAR, 2050)
设置月:set(Calendar.MONTH, 11),设置月份为12月!!!
设置日:set(Calendar.DATE, 28)


4 Calendar的add方法
  add(int field, int value)
  这个方法用来相对当前时间来设置属性
设置年:add(Calendar.YEAR, 1),如果当前是2010年,那么这个方法就是把年份+1。
这个方法也可以用来相对设置其他属性,这里不在赘述!


5 与Date之间的转换
setDate(Date):使用Date对象设置当前Calendar对象
Date getDate():把当前对象转换成Date对象。


6 获取最大值方法
int getActualMaximum(int filed):获取指定字段的真实最大值。例如:c.getActualMaximum(Calendar.DATE),如果当前日历为2月,那么返回值为28。即2月的最大天数。


5 练习






分析:
打印星期头:日 一 二 三 四 五 六
获取当日:int today = c.get(Calendar.DATE)
设置当日1号:c.set(Calendar.DATE, 1)
输出相应的空格,保证1号出现在正确的位置上。
获取当前月一共多少天:int maxDay = c.getActualMaxImum(Calendar.DATE);
知道了当前月一共多少天,就可以确定循环的次数。
循环内:
获取当前日期:int day = c.get(Calendar.DATE);
如果day<10,打印一个空格补位;
打印day;
如果day==today,打印一个星号和一个空格,否则打印两个空格;
如果day是星期六,那么打印换行
让日期自增一天。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值