黑马程序员——异常处理(2)

来源:互联网 发布:windows xp 精简版 iso 编辑:程序博客网 时间:2024/06/03 14:08
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

11StringBuffer 与 StringBuilder

String是不可变类,一旦String对象被创建,包含在对象中的字符序列是不可变的,直到对象被销毁;

 

StringBuffer 与 StringBuilder对象则是可变的!

 

举例说明这两个的好处:(不用每次新建对象,效率高!)

 

package reviewDemo;

 

public class Demo22 {

public static void main(String[] args) {

String s = "";

long begintime = System.currentTimeMillis();

for(int i = 1;i <= 100000;i++){

s += i;

}

long endtime = System.currentTimeMillis();

long time = endtime - begintime;

System.out.println("运行时间为:"+time);

StringBuffer s1 = new StringBuffer();

s = "";

begintime = System.currentTimeMillis();

for(int i = 1;i <= 100000;i++){

s = ""+i;

s1 = new StringBuffer(s);

}

endtime = System.currentTimeMillis();

time = endtime - begintime;

System.out.println("运行时间为:"+time);

}

}

 

输出:

运行时间为:82922

运行时间为:15

可以看得出:StringBuffer这两个效率相当高!

 

StringBuffer:  是线程安全的;

StringBuilder: 是线程不安全的,性能高点,推荐使StringBuilder(jdk1.5出现)

StringBuffer的字符序列是可变的(通过append等方法操作)

StringBuffer  和  String之间的转换;

String toString() 返回此序列中数据的字符串表示形式。 

StringBuffer(String str):以指定的字符串创建StringBuffer对象。

 

 

 

StringBuffer方法

 

public StringBuilder()构造一个不带任何字符的StringBuilder对象。 

StringBuffer(String str) :构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。

StringBuffer append(Object o) :将指定的任意类型对象追加到此StringBuffer 对象。 

StringBuffer insert(int offset, Object o) :将任意类型参数的字符串表示形式插入此序列中。 

StringBuffer delete(int start, int end) :移除此序列的子字符串中的字符。 

StringBuffer deleteCharAt(int index): 移除此序列指定位置的 char。  

 

Eg

 

package reviewDemo;

 

/**

 * 用StringBuilder 或StringBuffer:

把字符串“ABCDE”;

转变成字符串“A,B,C,D”

 */

 

public class Demo23 {

public static void main(String[] args) {

//第一种方法:往里面插入;

StringBuilder sb = new StringBuilder("ABCDE");

sb.deleteCharAt(sb.length()-1);

System.out.println(sb);

for (int i = 0; i < sb.length(); i+=2) {

sb.insert(i, ",");

}

sb.deleteCharAt(0);

System.out.println(sb);

//第二种方法:往里面追加,要追加必须遍历,必须换为数组!

sb = new StringBuilder("ABCDE");

sb.deleteCharAt(sb.length()-1);

System.out.println(sb);

char []cs = sb.toString().toCharArray();

StringBuilder sb1 = new StringBuilder();

for (char c : cs) {

sb1.append(c).append(",");

}

sb1.deleteCharAt(sb1.length()-1);

System.out.println(sb1);

}

 

 

编写一个程序,这个程序把一个整数数组中的每个元素用逗号连接成一个字符串,例如,根据内容为{123}的数组形成内容为"1,2,3"的字符串。

 

package reviewDemo;

/**

 * 编写一个程序,

 * 这个程序把一个整数数组中的每个元素用逗号连接成一个字符串,

 * 例如,根据内容为{1,2,3}的数组形成内容为"1,2,3"的字符串。

 */

 

public class Demo24 {

public static void main(String[] args) {

int []i = {1,2,3,4,5};

StringBuilder sb = new StringBuilder();

for (int j : i) {

sb.append(j).append(",");

}

sb.deleteCharAt(sb.length()-1);

System.out.println(sb);

}

}

 

 

 

 

12Math和RandomUUID

 

Math

public final class Math extends Object

以下X表示double,float,int, long

abs(X x):求绝对值

max(X x1,X x2):求最大值

min(X x1,X x2):求最小值

public static double random():返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。和使用new java.util.Random一样

Math.PI;

 

Random类

负责生成伪随机数;

Random() 创建一个新的随机数生成器。 

int nextInt() 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。 

int nextInt(int n)  返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值n(不包括)之间均匀分布的 int 值。 

 

package reviewDemo;

 

public class Demo26 {

public static void main(String[] args) {

System.out.println(Math.E);//2.718281828459045

int a = 12;

int b = 25;

System.out.println(Math.max(a,b));//这里可以使用静态导入(导入Math类中的方法,这样的话前面就不用写上Math.

System.out.println(Math.min(a,b));

}

}

 

 

package reviewDemo;

 

import java.util.UUID;

 

public class Demo27 {

public static void main(String[] args) {

UUID u = UUID.randomUUID();

String s = u.toString();

System.out.println(s);//此时是随机生成的,肯定每次都不一样,全网唯一!

u = new UUID(1222222222, 12);//根据构造方法来

s = u.toString();

System.out.println(s);//这一个的UUID是固定的。

}

}

 

我的总结:UUID(用来标示文件名等(免得文件上传因为名字可能一样而被覆盖),可以保证全网唯一!)

 

UUID:用唯一标识符 (UUID) 的类。 UUID 表示一个 128 位的值。

UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。

标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx (8-4-4-4-12),其中每个 是 0-9 或 a-f 范围内的一个十六进制的数字;

UUID uuid = UUID.randomUUID();

String uid = uuid.toString();

 

 

13Date和Calendar

 

处理日期,时间;

大部分的方法已过时,不推荐使用,但是你使用过时的方法也不会报错。

Date() 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。

Date(long date)  分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 月 日 00:00:00 GMT)以来的指定毫秒数。

 

SimpleDateFormat

 

java.text.SimpleDateFormat

SimpleDateFormat 是一个与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。 

SimpleDateFormat(String pattern)  用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat

public final String format(Date date)将一个 Date 格式化为日期/时间字符串。 

 public Date parse(String source) throws ParseException:把字符串source表示的时间按source的格式转成Date对象。

 

练习:StringDate的相互转化

 

按某种时间格式来输出指定的String类型时间

date2String

format

 

把某种时间格式的String时间转成Date类型时间

string2Date

parse

 

package reviewDemo;

 

import java.text.SimpleDateFormat;

import java.util.Date;

 

public class Demo28 {

public static void main(String[] args) throws Exception {

Date d = new Date();

System.out.println(d);//获取当前时间

//格式化

SimpleDateFormat  sd = new SimpleDateFormat("yyyy-M-d HH:mm:ss E");

String s = sd.format(d);//这个方法继承于SimpleDateFormat的父类DateFormat类!

System.out.println(s);

//反格式化

d = sd.parse(s);

System.out.println(d);

}

}

 

 

Calendar

 

 

int get(int field):返回指定日历字段值 

静态常量:

YEAR 表示年的字段数字。

MONTH 表示月份字段数字,月份范围是[0,11]

DATE 表示一个月中的某天。

DAY_OF_MONTH 表示一个月中的某天。

DAY_OF_WEEK 表示一个星期中的某天。

HOUR_OF_DAY / HOUR 表示第几小时

MINUTE  表示第几分钟

SECOND  表示第几秒

 

Date getTime() 返回一个表示此 Calendar 时间值的 Date 对象。 

void set(int year, int month, int date, int hour, int minute, int second)   设置字段 YEARMONTHDAY_OF_MONTHHOURMINUTE 和 SECOND 的值。

abstract void add(int field, int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量。

若 amount为负数,则减去一天,

若 amount为正数 ,则加上一天 

 

 

例子

package reviewDemo;

 

import java.util.Calendar;

import java.util.Date;

 

public class Demo29 {

public static void main(String[] args) {

Calendar c = Calendar.getInstance();

System.out.println(c);

Date d = c.getTime();

System.out.println(d);

/**

 * void set(int year, int month, int date, int hour, int minute, int second)   

 * 设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。

 */

c.set(2015, 07, 15, 12, 24, 55);

d = c.getTime();

System.out.println(d);

c.add(Calendar.DAY_OF_MONTH, 3);

d = c.getTime();

System.out.println(d);

}

}

 

我的总结:注意常查看api

 

 

Eg“查询距今最近三天内的记录”,这里的‘三天内’是什么时间段?

将当前日期时间转换为 只获取当天的00:00:00 

: 2011-08-08 12:12:12 转化为 2011-08-08 00:00:00

 

package reviewDemo;

 

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

 

public class Demo30 {

public static void main(String[] args) {

Calendar c = Calendar.getInstance();

Date d = c.getTime();

System.out.println(d);

SimpleDateFormat sd = new SimpleDateFormat("yyyy-M-d HH:mm:ss E");

String s = sd.format(d);

System.out.println(s);

c.set(2015, 8, 23, 13, 24, 15);

d = c.getTime();

System.out.println(sd.format(d));

c.add(Calendar.DAY_OF_MONTH, -3);

d = c.getTime();

System.out.println(sd.format(d));

}

}

 

输出:

Thu Jul 04 08:56:51 CST 2013

2013-7-4 08:56:51 星期四

2015-9-23 13:24:15 星期三

2015-9-20 13:24:15 星期日

 

14System

 

System 类包含一些与系统相关的类字段和方法。它不能被实例化,类中所有属性和方法都是static,可直接被System调用。

 

常用方法:

static void exit(int status) 终止虚拟机的运行.对于发生了异常情况而想终止虚拟机的运行,传递一个非0数值,对于正常情况下退出系统传递0

该方法实际调用的是Runtime.getRuntime().exit(int status)

static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 数组拷贝

static long currentTimeMillis() 返回以毫秒为单位的当前时间。 

String getenv(String name)   获得指定的环境变量;

static void gc()  运行垃圾回收器。

实际上调用了 Runtime中的gc()方法;

Runtime.getRuntime().exec("notepad ");

static Properties getProperties()  取得当前的系统属性。 

static String getProperty(String key) 取得指定键指示的系统属性。 

static String getProperty(String key, String def)  获取用指定键描述的系统属性,def表示默认信息。 

 

Egpackage reviewDemo627;

 

import java.util.Properties;

 

public class Demo32 {

public static void main(String[] args) {

Properties p = System.getProperties();

System.out.println(p);

System.out.println(System.getenv());

}

}

0 0
原创粉丝点击