---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
在学习中,穿插了部分知识点的概述,做了初步认知,当往后涉及,可进一步研究,这里部分知识点只做了初步认知。
1、String类
字符串是一个特殊对象,切记字符串一旦被初始化就不可改变,即str = “aa”;再str = “bb”;不是字符串”aa”改变,而是str指向了新的”bb”字符串。所以不宜大量str的赋值操作。
(1)String的常用操作
常用操作有具体的手册,这里不再祥述,简单说明下。
获取方法:length(),charAt(int),indexOf(int)等。
判断方法:contains(str),isEmpty(),startsWith(str),endsWiths(str),equals(str)等。
字符串转换:
(a)构造函数转换:String(char[]),String(char[], offset,count)等。
(b)转成字符数组:char[] toCharArray()等。
(c)字节数组转字符串:String(byte[]),String(byte[], offset, count)等。
注:String(byte[] bytes, Charsetcharset)字符串和字节数组在转换过程中,是可以指定编码表的,通过charset参数指定。
(d)字符串转字节数组:byte[] getBytes()
(e) 将基本数据类型转换成字符串:
StaticString valueOf(int)
StaticString valueOf(double)
或用 3+“” 的形式,相当于String.valueOf(3);
字符串替换和切割:
替换:String replace(oldchar, newchar)
切割:String split(str);
字串:获取字符串中的一部分
Stringsubstring(begin);
Stringsubstring(begin,end)//输出字串,包含头不包含尾。
大小写转换,比较,去空格:
(a)将字符串转成大写或小写。
StringtoUpperCase();
StringtoLowerCase();
(b)将字符串两端的多个空格去除。
String trim();
(c)对两个字符串进行自然顺序的比较。
int compareTo(String)
(2)String的一些注意点
字符串最大特点就是一旦被初始化就不可以再改变,因此会引起和多注意的地方。
Stringstr = “abc”;与String str1 =new String(“abc”);有什么区别?
str是一个引用型变量,”abc”是一个对象,该对象初始一次不能再变,类似成常量。若再令str = “kk”;它不将”abc”内存内容换成”kk”,而是另外创建’kk’的内存,令str指向”kk”。
当需要判断str == str1时,结果为false,虽然内容都是”abc”,但两者所指对象不同,str指向”abc”,str1指向new的对象。
那么可以有以下的一些推断:
public staticvoid main(String[] args) { String s1 = "abc";//一个对象,即”abc” String s2 = "abc"; String s3 = new String("abc");//两个对象,”abc”和new的String对象 String s4 = new String("abc"); System.out.println(s1 ==s2);//true,同一对象 System.out.println(s1 ==s3);//false,"abc"!= new的对象 System.out.println(s3 ==s4);//false,new对象 != new对象 System.out.println(s1.equals(s3));//true,用equals能单纯的比较字符串内容 }
其实String是由final修饰的类,那么String不能继承也不能派生,其对象的也有了类似于常量的约束了,引用变量的对象不可变,但其所指地址可变。
(3)StringBuffer与StringBuilder
StringBuffer类:
有final关键字修饰,它是一个字符串的容器,它是字符串缓冲区,可以对字符串内容进行增删。
普通的String对象,多次赋值将会产生很多的新字符串对象(原有不变,引用将指向新的字符串),将增加内存,于是出现了字符串的缓冲区。
特点:
(a) 长度是可以变化的。
(b) 可以直接操作多个数据类型
(c) 最终用toString方法变成字符串
常用方法:
//存储 StringBuffer append(); //将指定数据作为参数添加到已有数据的结尾处。 StringBuffer Insert(index,数据);//可以将数据插入到指定index位置。 //删除 StringBuffer delete(start, end);//包含start,不包含end StringBuffer deleteCharAt(index);// 删除指定位置字符 //获取 char charAt(int index);//得到index角标下的字符 int indexOf(String str);//返回与str相等字串第一次出现的位置 int lastIndexOf(String str);//从尾部根据str字符串获取位置 int length();//获取长度 String substring(int start,int end);//获取从start到end(不包括)的字串 //修改 StringBuffer replace(int start, int end, String str);//修改原StringBuffer中从start到end(不包括)角标中的内容,与String不同,是真正的在原串中替换。 void setCharAt(int index, char c);替换某一位字符,且不返回。 //反转 StringBufferreverse();//反转,将原串逆序显示
StringBuilder类:
与StringBuffer功能类似,是JDK1.5版出现的。既然功能与StringBuffer类似,那么为什么还要在1.5版后增加StringBuilder呢?
这里就要一起说下StringBuffer类及StringBuilder类的区别了:
学过vector和ArrayList或者HashTable和HashMap我们就能知道,在集合中有同步方式和异步方式,而异步方式在效率上比同步方式要高。
那么StringBuffer就是线程同步方式,即在多线程下操作方法时会进行同步判断,那么这样难免会有损效率,但是却能保证线程的安全型。
StringBuilder是线程异步的方式,因此不保证线程安全,但是有效率。
那么在单线程的情况下,我们采用StringBuilder比StringBuffer是要高效的,如果在多线程情况下,要求安全性,还是得用老的StringBuffer。
2、System类
System类中包含一些有用的类字段和方法,他不能被实例化,全静态方法。
如getProperties(),gc(),等。
out:标准输出,默认控制台。
In:标准输入,默认键盘。
因为Properties是HashTable的子类,也就是Map集合的一个子类对象。
那么可以通过Map的方法取出该集合中的元素。
该集合中存储都是字符串,没有泛型定义。
//在系统中定义自己的信息
System.setProperty("mykey","myvalue");
//获取指定属性信息
String value =System.getProperty("os.name");
4、Random类
Random类用于产生随机数的类,只是这些随机还是有规则的,我们称之为伪随机。我们在进行随机时,随机算法的源数字称为种子(seed),随机数的产生在种子数的基础上进行,那么伪随机会出现同一个种子下,多次随机产生的数字是一样的,即不是真正的随机数,称伪随机数。
伪随机数,即产生的随机数并不是真正意义上的随机数,该随机数通过算法产生,
当数据达到一定数量,还是有规律可循的。
(1)常用的一些方法
//产生一个随机数,值介于int区间。那么要产生指定值,可进行一定的数学转换,如用%取模限制范围等。 public int nextInt(); //随机产生一个int值,该值介于0到n区间,包括0。 public int nextInt(int n); //产生一个小数,若要大于1以上,取其结果乘int值,即可。 public double nextDouble(); //设置一个产生随机数的种子 public void setSeed(long seed);
示例:
import java.util.Random; public class RandomDemo { public static void main(String[] args) { //在构造时刻加seed种子或后面调用setSeed(seed)设置 //Random dom1 = new Random(seed); Random dom = new Random(); //整数随机数 //本来是0-9,加1后值为1-10,包括负数 int a = dom.nextInt()%10+1; int b = dom.nextInt(10)+1; long c = dom.nextLong()%10+1; System.out.println(a+" :"+b+" :"+c); //小数 //本来是0-1.0范围内,乘个整数则可大于1 float fl = dom.nextFloat()*2;//0-2 double db =dom.nextDouble()*5;//0-5 System.out.println(fl+" :"+db); } }
5、Runtime类
Runtime类封装了运行时的环境,每个java应用程序都有一个Runtime类实例,使程序能够与其所在系统运行环境相连接。使程序能开进程运行。
应用程序不能创建自己的Runtime类实例(无构造函数)。可以通过getRuntime方法获取当前运行时。
进一步说明,该类是单例设计模式。
一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和方法。
一般可以用于内存管理或执行其它程序等,这里只是概述,知道是干什么的,具体应用时查阅API手册。
5、Date类
Date为时间类,时间格式为:
其中DateFormat类为抽象类,SimpleDateFormat为其子类,
通常获取系统时间是以个按秒计算的长整数long,于是用格式化的方法转成我们想要的具体格式SimpleDateFormat对象预先设置需要的时间格式,便可对应输出具体格式。
其中EEEE指星期,MM指月,dd指日,yyyy指年,h,m,s分别为时分秒等等。
示例:
import java.text.SimpleDateFormat; import java.util.Date; public class DateDemo { public static void main(String[] args) { /* Date date = new Date(); //获取当前时间,不过是个以秒为单位的long数,需转换 System.out.println(date.getTime()); */ //定制格式,MMMM为中字月份如二月,MM为数字月份,如02 SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy"); Datedate = new Date(); System.out.println(dateFormat.format(date)); } }
6、Calendar类
Calendar抽象类,直接子类为GregorianCalendar,用于获取时间的特定部分,如获取年月日等。
获取时间:
Calendar c = Calendar.getInstance();
//或者利用查表法,sop为封装了System.out.println()输出
sop(c.get(Calendar.YEAR)+"年");
sop("明天:"+(c.get(Calendar.DAY_OF_MONTH)+1));
设置时间:c.set(2012,2,23);//设置时间,月从0开始,2代表3月
改变时间:c.add(Calendar.DAY_OF_MONTH,-3);//前推3天
其中像YEAR,DAY_OF_MONTH等是Calendar的常量字段,较多,但易理解,想进一步了解可查阅api手册。
---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------