Java基础之常用类
一、字符串相关类
1、String类:构造字符串对象
常量对象:字符串常量对象是用双引号括起的字符序列。 例如:String s = "你好"、String s = "12.97"、String s = "boy"等。
字符串的字符使用Unicode字符编码,一个字符占两个字节。
使用构造方法创建并初始化:
String();//初始化一个对象,表示空字符序列
String(value);//利用已存在的字符串常量创建一个新的对象
String (char[] value);//利用一个字符数组创建一个字符串
String(char[] value,int offset,int count);//截取字符数组offset到count的字符创建一个非空串
String(StringBuffer buffer);//利用StringBuffer对象初始化String对象
字符串特性:
String是一个final类,代表不可变的字符序列,字符串是不可变的。一个字符串对象一旦被配置,其内容是不可变的。
字符串内存分析:
字符串常用操作:
1) charAt(下标):获取字符串指定下标位置的字符,返回char值
2) length():返回字符串的长度,返回int值
3) getBytes():将字符串转换为字节数组,返回byte[]值
4) indexOf(子字符串):返回指定子字符串在源字符串中的下标,返回int值,没找到返回-1.(可以指定开始检索的位置下标)
5) lastIndexOf():返回指定子字符串在源字符串中最后一次出现的下标
6) isEmpty():判断字符串的length是否为0,返回Boolean值
7) replace(旧子字符串,新字符串):用指定的新字符串替换源字符串中的旧子字符串部分,返回替换后的字符串,返回值String
8) subString(开始下标,结束下标):截取从开始到结束下标范围的字符串,结果包含开始,不包含结束,如果不给结束下标,表示直接截取到末尾
9) split(字符串):按照指定的字符串拆分源字符串,返回String[]数组
10) trim():用于返回去掉首尾空格的字符串
11) valueOf(其他类型数据):将指定数据转换为字符串值返回
12) toCharArray():返回将此字符串转换为一个新的字符数组
13) toString():返回此对象本身
14) toLowerCase():把字符串全部转换为小写
15) toUpperCase():把字符串全部转换为大写
16) startsWith(前缀):判断前缀是否相同
17) endsWith(后缀):判断后缀是否相同
18) compareTo():判断字符串的大小关系,参考ASSCI表
19) compareToIgnoreCase():忽略大小写判断字符串的大小关系
20) equals(字符串):比较字符串和指定字符串是否相等,返回boolean值
21) equalsIgnoreCase():忽略大小写的情况下判断内容是否相同
22) reagionMatches() :测试两个字符串区域是否相等
23)pubic String replace(char oldChar,char newChar)
24)public String replaceAll(String old,String new)
字符串与基本数据的相互转换
字符串转换为基本数据类型:
Integer包装类的public static int parseInt(String s):可以将由“数字”字符组成的字符串转换为整型。
类似地,使用java.lang包中的Byte、Short、Long、Float、Double类调相应的类方法可以将由“数字”字符组成的字符串,转化为相应的基本数据类型。
基本数据类型转换为字符串:
调用String类的public String valueOf(int n)可将int型转换为字符串。
相应的valueOf(byte b)、valueOf(long l)、valueOf(float f)、valueOf(double d)、valueOf(boolean b)可由参数的相应类到字符串的转换。
字符串与字符、字节数组
字符串与字符数组
String 类的构造方法:String(char[]) 和 String(char[],int offset,int length) 分别用字符数组中的全部字符和部分字符创建字符串对象
String类提供了将字符串存放到数组中的方法:
public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符串中的全部字符存放在一个字符数组中的方法:
public char[] toCharArray()
字符串与字节数组
String(byte[])用指定的字节数组构造一个字符串对象。String(byte[],int offset,int length) 用指定的字节数组的一部分,即从数组起始位置offset开始取length个字节构造一个字符串对象。
public byte[] getBytes() 方法使用平台默认的字符编码,将当前字符串转化为一个字节数组。
public byte[] getBytes(String charsetName) 使用参数指定字符编码,将当前字符串转化为一个字节数组。
2、StringBuffer类与StringBuilder类
StringBuffer是一个容器。
java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。 很多方法与String相同,但StingBuffer是可变长度的。
StringBuffer类有三个构造方法:
1.StringBuffer()初始容量为16的字符串缓冲区
2.StringBuffer(int size)构造指定容量的字符串缓冲区
3.StringBuffer(String str)将内容初始化为指定字符串内容
与String的区别:
String s = new String("我喜欢学习");//长度不可变
StringBuffer buffer = new StringBuffer(“我喜欢学习”);//长度可变,调用append()方法,增加字符串长度
buffer.append("数学");
常用类:
StringBuffer append(String s),
StringBuffer append(int n) ,
StringBuffer append(Object o) ,
StringBuffer append(char n),
StringBuffer append(long n),
StringBuffer append(boolean n),
StringBuffer insert(int index, String str)
public StringBuffer reverse()
StringBuffer delete(int startIndex, int endIndex)
public char charAt(int n )
public void setCharAt(int n ,char ch)
StringBuffer replace( int startIndex ,int endIndex, String str)
public int indexOf(String str)
public String substring(int start,int end)
public int length()
StringBuilder 和 StringBuffer 非常类似,均代表可变的字符序列,而且方法也一样
String:不可变字符序列
StringBuffer:可变字符序列、效率低、线程安全
StringBuilder(JDK1.5):可变字符序列、效率高、线程不安全
String使用陷阱: string s="a"; //创建了一个字符串 s=s+"b"; //实际上原来的"a"字符串对象已经丢弃了,现在又产生了一个字符串s+"b"(也就是"ab")。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能。
二、日期类
1.java.lang.System类
System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
此方法适于计算时间差。
计算世界时间的主要标准有:
UTC(Universal Time Coordinated)
GMT(Greenwich Mean Time)
CST(Central Standard Time)
2. java.util.Date类
表示特定的瞬间,精确到毫秒
构造方法:
Date( )使用Date类的无参数构造方法创建的对象可以获取本地当前时间。
Date(long date)
常用方法:
getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
toString():把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准。
Date类的API不易于国际化,大部分被废弃了,java.text.Simp leDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
它允许进行格式化(日期文本)、解析(文本日期)
格式化:
SimpleDateFormat() :默认的模式和语言环境创建对象
public SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用:
public String format(Date date):方法格式化时间对象date
解析:
public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期。
3. java.util.Calendar(日历)类
Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
获取Calendar实例的方法
使用Calendar.getInstance()方法
调用它的子类GregorianCalendar的构造器。
一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、MINUTE、SECOND
public void set(int field,int value)
public void add(int field,int amount)
public final Date getTime()
public final void setTime(Date date)
package main.dyh.test_utils; import org.junit.Test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class TestString { @Test public void fun1() { Date date = new Date(); System.out.println(date); long l = System.currentTimeMillis(); System.out.println(l); } @Test public void fun2() throws ParseException { Date date = new Date(); //产生一个formater格式化的实例 SimpleDateFormat st = new SimpleDateFormat(); String f1 = st.format(date); System.out.println(f1); SimpleDateFormat st1 = new SimpleDateFormat("yy-MM-dd hh:mm:ss"); String f2 = st1.format(date); System.out.println(f2); } @Test public void fun3(){ Calendar calendar = Calendar.getInstance(); //获取时间 Date time = calendar.getTime(); System.out.println(time); SimpleDateFormat st = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String format = st.format(time); System.out.println(format); //获取年 int year = calendar.get(Calendar.YEAR); System.out.println(year); // 获取月,这里需要需要月份的范围为0~11,因此获取月份的时候需要+1才是当前月份值 int month = calendar.get(Calendar.MONTH)+1; System.out.println(month); //获取日Date同DAY_OF_MONTH int day = calendar.get(Calendar.DAY_OF_MONTH); System.out.println(calendar.get(Calendar.DATE)); System.out.println(day); //获取时 int hour = calendar.get(Calendar.HOUR); System.out.println(hour); //获取分 int minute = calendar.get(Calendar.MINUTE); System.out.println(minute); //获取秒 int second = calendar.get(Calendar.SECOND); System.out.println(second); // 星期,英语国家星期从星期日开始计算 int week = calendar.get(Calendar.DAY_OF_WEEK); System.out.println(week); } //一年后的今天 @Test public void fun4(){ Calendar calendar = Calendar.getInstance(); // 同理换成下个月的今天calendar.add(Calendar.MONTH, 1); calendar.add(Calendar.YEAR, 1); // 获取年 int year = calendar.get(Calendar.YEAR); System.out.println(year); // 获取月 int month = calendar.get(Calendar.MONTH) + 1; System.out.println(month); // 获取日 int day = calendar.get(Calendar.DAY_OF_MONTH); System.out.println(day); } // 获取任意一个月的最后一天 @Test public void fun5(){ Calendar calendar = Calendar.getInstance(); // 假设求6月的最后一天,月份是从0到11,所以这里设置6,其实是7月 int currentMonth = 6; // 先求出7月份的第一天,实际中这里6为外部传递进来的currentMonth变量 // 1 calendar.set(calendar.get(Calendar.YEAR), 10, 1);//设置日期 System.out.println(calendar.getTime()); calendar.add(Calendar.DATE,-1);//七月一号的前一天 // 获取日 int day = calendar.get(Calendar.DAY_OF_MONTH); System.out.println("6月份的最后一天为" + day + "号"); } // 设置日期 @Test public void fun6(){ Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, 2000); System.out.println("现在是" + calendar.get(Calendar.YEAR) + "年"); calendar.set(2008, 8, 8); // 获取年 int year = calendar.get(Calendar.YEAR); System.out.println(year); // 获取月 int month = calendar.get(Calendar.MONTH); System.out.println(month); // 获取日 int day = calendar.get(Calendar.DAY_OF_MONTH); System.out.println(day); } }
三、Math类
java.lang.Math提供了一系列静态方法用于科学计算;其方法的参数和返回值类型一般为double型。
abs 绝对值
acos,asin,atan,cos,sin,tan 三角函数
sqrt 平方根
pow(double a,doble b) a的b次幂
log 自然对数 exp e为底指数
max(double a,double b)
min(double a,double b)
random() 返回0.0到1.0的随机数
long round(double a) double型数据a转换为long型(四舍五入)
toDegrees(double angrad) 弧度—>角度
toRadians(double angdeg) 角度—>弧度