一、String
java.lang.String
1.String表示字符串类型,属于引用数据类型,不属于基本数据类型
2.java中规定,双引号括起来的字符串是不可变的
3.在JDK当中双引号括起来的字符串都是直接存储在方法区的字符串常量池当中的。
为什么会把字符串存储在方法区的字符串常量池中?
因为字符串在实际开发中使用的太频繁,为了执行效率而放的
4.防止空指针异常
String x = new String(“y”);
如果写成x.equals(“y”)可能出现空指针异常
建议写成"y".equals(x);
5.部分构造方法
(1)String s = new String("");
(2)String s = “”;
(3)String s = new String(char数组);
(4)String s = new String(char数组,数组元素下标的起始位置,长度);
(5)String s = new String(byte数组);
(6)String s = new String(byte数组,数组元素下标的起始位置,长度);
6.常用方法
(1)char charAt(int index)
指定索引的char值
(2)int compareTo(String anotherString)
“a”.compareTo(“b”); //拿a和b比较
字符串之间比较大小不能直接使用> <, 需要使用comoareTo方法
(3)boolean contains(CharSequence s)
判断前面的字符串中是否包含后面的子字符串
(4)boolean endsWith(String suffix)
判断当前字符串是否以某个字符串结尾
(5)boolean equals(Object anObject)
比较两个字符串必须使用equals
(6) boolean equalsIgnoreCase(String anotherString)
判断两个字符串是否相等,并且同时忽略大小写
(7)byte[ ] getBytes()
将字符串对象转换为字节数组
(8)int indexOf(String str)
判断某个子字符串在当前字符串中第一次出现处的索引(下标)
(9)boolean isEmpty()
判断某个字符串是否为空字符串
(10)int length()
判断数组长度和判断字符串长度不一样
(11)int lastIndexOf(String str)
判断某个子字符串在当前字符串中最后一次出现处的索引(下标)
(12)String replace(CharSequence target, CharSequence replacement)
String的父接口就是:CharSequence
替换,把前面的替换成后面的
(13)String[ ] split(String regex)
拆分字符串
(14)boolean startsWith(String prefix)
判断某个字符串是否以某个子字符串开始
(15)String substring(int beginIndex)
截取字符串,参数是起始下标
(16)String substring(int beginIndex, int endIndex)
截取字符串,参数是起始下标,结束是结束下标-1
(17)char[ ] toCharArray()
将字符串转换成char数组
(18)String toLowerCase()
转换为小写
(19)String toUpperCase();
转换为大写
(20)String trim();(常用,指用户名密码操作)
去除字符串前后空白
(21)String中只有一个方法是静态的,不需要new对象
这个方法是valueOf
作用:将非字符串转换为字符串
如果参数是一个对象的时候,valueOf会调用toString,而且没有重写,所以返回的是内存地址
扩展:println()调用了valueOf
本质上System.out.println()这个方法在输出任何数据的时候都是先转换为字符串再输出
二、StringBuffer
1.StringBuffer解释
StringBuffer底层实际上是一个byte[ ]数组;
向StringBuffer中放字符串,实际上是放到byte数组当中,拼接字符串的方法是append( )方法;
StringBuffer初始化容量是16,如果满了会自动扩容
2.如何优化StringBuffer的性能?
在创建StringBuffer的时候尽可能给定一个初始化容量;
最好减少底层数组的扩容次数,尽量一开始就给一个比较大的容量
StringBuffer sb = new StringBuffer(100);
3.StringBuilder
使用StringBuilder也可以完成字符串的拼接
4.StringBuffer和StringBuilder的区别
StringBuffer中的方法都有synchronized关键字修饰,表示StringBuffer在多线程环境下是线程安全的;
StringBuilder中的方法都没有synchronized关键字修饰,表示StringBuilder在多线程环境下是非线程安全的
三、基础类型对应的8个包装类
1.java中为8中基本数据类型对应准备了8种包装类型,8种包装类属于引用数据类型,父类是Object。
2.为什么要提供8种包装类型?
因为8种基本数据类型不够用,所以提供了8种包装类型。
3.有哪8种基本数据类型
java.lang.Byte(父类Number)
java.lang.Short(父类Number)
java.lang.Integer(父类Number)
java.lang.Long(父类Number)
java.lang.Float(父类Number)
java.lang.Double(父类Number)
java.lang.Boolean(父类Object)
java.lang.Character(父类Object)
4.装箱和拆箱
基本数据类型转换为引用数据类型(装箱)
Integer i = new Integer(123);
引用数据类型转换为基本数据类型(拆箱)
int xxx = i.intValue();
5.Number中公共的方法
Number是一个抽象类,无法实例化对象
byte byteValue()
以 byte 形式返回指定的数值。
abstract double doubleValue()
以 double 形式返回指定的数值。
abstract float floatValue()
以 float 形式返回指定的数值。
abstract int intValue()
以 int 形式返回指定的数值。
abstract long longValue()
以 long 形式返回指定的数值。
short shortValue()
以 short 形式返回指定的数值。
这些方法是负责拆箱的
6.Integer类
(1)构造方法
Integet(int)(将数字转换为Integer int–>Integer)
Integet x = new Integer(100)
Integet(String)(将String转换为Integer String–>Integer)
Integet y = new Integer(“100”)
都重写了toString
(2)通过访问包装类的常量,获取最大值
Integer.MAX_VALUE
(3)自动装箱和自动拆箱
JDK1.5之后支持自动装箱和自动拆箱
Integer x = 100;(自动装箱)
int y = x;(自动拆箱)
==不会触发自动拆箱,只有±*/才会触发
java中为了提高程序的执行效率,将-128到127之间所有包装对象提前创建好,放到一个方法区的整数型常量池当中,目的是只要用这个区间的数据就不需要new,之间从整数型常量池中取
(4)常用方法
static int parseInt(String s) (重要)
静态方法,传参String,返回int
int retValue = Integer.parseInt(“123”);
网页上文本框中输入的100其实是"100"字符串,后台数据库中要求存储100数字,此时java程序需要将"100"转换为100
(5)异常
NumberFormatException: 数字格式化异常
如果你输入的不是一个数字而是一个中文,就会出现这种异常
int retValue = Integer.parseInt(“中文”);
四、日期相关类
1.获取系统当前时间
(1)在java.util包下
获取系统当前时间:
Date nowTime = new Date( );
(2)日期怎么格式化
SimpleDateFormat是java.text包下,专门负责日期格式化的
yyyy 年
MM 月
dd 日
HH 时
mm 分
ss 秒
SSS 毫秒
SimpleDateFormat sdf = new SimpleDateFormat("日期格式")
String nowTimeStr = sdf.format(nowTime);//输出就是现在的时间加我们自定义的日期格式
注意:在日期格式中,除了y M d H m s S这些字符不能随便写之外,其余的符合格式自己随意组织
(3)一个日期字符串,怎么转换为Date类型
String time = "日期格式字符串";
SimpleDateFormat sdf2 = new SimpleDateFormat("格式不能随便写,要和上面日期字符串格式一样")
Date dateTime = sdf2.parse(time); //将字符串转换为Date
(4)获取自1970年1月1日00:00:00 000到当前系统时间的总毫秒数:
long nowTimeMillis = System.currentTimeMillis(); //静态方法
System.out.println(nowTimeMillis);
System扩展
简单总结一下System类的相关属性和方法
System.out //out是System类的静态变量
System.out.pringlt() //pringlt()方法不是System类的,是PringStream类的方法
System.gc() //建议启动垃圾回收器
System.currentTimeMillis() //获取自1970年1月1日00:00:00 000到当前系统时间的总毫秒数
System.exit(0) //退出JVM
五、数字相关类
1.数字的格式化
(1)语法
//java.text.DecimalFormat 专门负责数字格式化的
DecimalFormat df = new DecimalFormat("数字格式");
String s = df.format(数字); //将数字转换为上面的数字格式
(2)数字格式有哪些?
# 代表任意数字
, 代表千分位
. 代表小数点
0 代表不够时补0
2.java.math.BigDecimal
(1)属于大数据,精度极高,不属于基本数据类型,属于引用数据类型,这是SUN提供的一个类,专门用在财务软件当中。
(2)在财务软件中double是不够用的,要用java.math.BigDecimal
(3)语法
BigDecimal v1 = new BigDecimal(100);
BigDecimal v2 = new BigDecimal(200);
BigDecimal v3 = v1.add(v2); //不能直接加,需要调用方法求和
六、Random
1.语法
Random random = new Random();
int a =random.nextInt(); //随机产生一个int类型取值范围内的数字,()中可以加一个数字来限定范围
七、Enum(枚举)
1.枚举的定义
(1)一枚一枚可以列举出来的,才建议使用枚举
(2)枚举编译之后也是生成class文件
(3)枚举也是一种引用数据类型
(4)枚举中的每一个值可以看做是常量
2.语法
enum Result/*枚举类型名*/ {
//SUCCESS是枚举Result类型中的一个值
//FAIL是枚举Result类型中的一个值
//枚举中的一个值,可以看做是“常量”
SUCCESS, FAIL //枚举值
}
结果只有两种情况建议boolean,超过两种,并且可以列举的建议枚举