一、java常用包简介:
包里放的是各种系统类
1、java.lang: java 的核心类库,包含了运行java 程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包
2、java.lang.reflect:提供用于反射对象的工具
3、java.io: java 语言的标准输入/输出类库,如基本输入/输出流、文件输入/输出等
4、java.util:常用的工具类,如集合框架类,日期处理类等。
5、java.sql: JDBC 相关类。
6、java.net:JAVA 网络包,其中包含能够使程序通过网络进行通信的
7、java.awt;javax.swing:使用java 开发C/S 结构应用程序使用的类。
注意:lang 包中的类可以不用导入而直接使用。如果您以后在项目代码中看到那个类没有导入而没报编译错误,那它要么与当前类在一个包里,要么一定在lang 包中。
二、包装类
1、概念:
前面讲到java 的数据类型分为两种:值类型和引用类型,其中值类型只有8 个,那与此8 个值类型对应的有8 个类,我们把它们称为包装类。如下图所表示:
基本数据类型 包装类 byte Byte boolean Boolean short
Short char Character int Integer long Long float Float double Double
注意:包装类全部声明在java.lang 包中,上面说过,lang 包中的类不需要导入而直接使用。
2、拆箱与装箱:
拆箱:把数据由包装类转化为基本数据类型叫拆箱
装箱:把数据由基本数据类型转换为对应包装类叫做装箱
如下例:
public class Test {
public static void main(String[] args) {
int a = 10;
//自动装箱,基本数据类型-->包装类
Integer b = a;
//自动拆箱,包装类-->基本数据类型
int c = b;
}
}
3、包装类的常用方法:
(1)Character 类的常用方法:
基本数据类型 包装类 isDigit() 确定字符是否为0 至9 之间的数字 isLetter() 确定字符是否为字母 isLowerCase() 确定字符是否为小写形式 isUpperCase() 确定字符是否为大写形式
注意:这些方法都是通过类名点方法名访问的,我们称为静态方法,如:Character.isDigit(values[count])
(2)字符串类型变为数字类型:
有两种方法:这您可以使用数字类型对应的valueOf()方法,也可以使用paseXXX()方法,同时valueOf ()与paseXXX ()也是静态方法,通过类名点方法名调用。看一个例子:
public class TestValueOf {
public static void main(String[] args) {
String number = "12";
System.out.println("没转换前" + (number + 1));
Byte byNum = Byte.valueOf(number);
Short shNum = Short.valueOf(number);
Integer num = Integer.valueOf(number);
Long lgNum = Long.valueOf(number);
System.out.println("转换后");
System.out.println(byNum + 1);
System.out.println(shNum + 1);
System.out.println(num + 1);
System.out.println(lgNum + 1);
System.out.println("使用paseXXX转换:");
System.out.println(Integer.parseInt(number) + 1);
System.out.println(Float.parseFloat(number) + 1);
}
}
运行结果是:
没转换前121
转换后
13
13
13
13
使用paseXXX转换:
13
13.0
4、String类
(1).equals():判断两个字符串是否相等
例1:
public static void main(String[] args) {
String a = new String("wangwang");
String b = new String("wangwang");
System.out.println("(a == b) = " + (a == b));
System.out.println("(a.equals(b)) = " + a.equals(b));
}
结果:
(a == b) = false
(a.equals(b)) = true
大家看到结果,使用==并不能判断两个字符串的值是否相等,您一定要使用equals(),
关于原因,我们看上例中两个变量的内存分配:
==比较的是两个变量是否指向同一块空间,equals()比较的是指向的两个内存空间的值是否相等。所以在java 中,我们做字符串比较要使用equals()方法。
例2:
public static void main(String[] args) {
String a = "wangwang";
String b = "wangwang";
String c = new String("wangwang");
System.out.println("(a == b) = " + (a == b));
System.out.println("(a == c) = " + (a == c));
System.out.println("(a.equals(b)) = " + a.equals(b));
System.out.println("(a.equals(c)) = " + a.equals(c));
}
运行结果:
(a == b) = true
(a == c) = false
(a.equals(b)) = true
(a.equals(c)) = true
大家发现a==b,也就是说,a 与b 指向同一块内存空间,如图:
这到底是怎么回事儿呢?这就要引入字符串池的概念了。就是说它会把所已知的字符串放入字符串池,如果你创建新字符串没有使用new 关键字,如String b = "wangwang";这行代码,它首先会去字符串池找有没有相同值的字符串,如果有的话就指向它;如果没有的话就会创建新的空间。这里查询时找到了对应的值,所以a 和b 指向了通一块内存空间 35DF。而如果使用了new 关键字,如String c = new String("wangwang");这行代码,它不会去字符串池中寻找而直接创建一份新的内存空间。
(2).length():求字符串长度
(3).trim():去掉字符串两边的空格
(4).toLowerCase(),.toUpperCase():把字符串全部转换为大写或小写
(5).substring(int a, int b):从a 开始截取(b-a)个字符
(6)indexOf(String target):查找target 在字符串中第一次出现的位置,注意下标是从0开始,如没出现返回-1。
(7)indexOf(int a, String target):从a 的位置开始,查找target 在字符串中第一次出现的位置,注意下标是从0 开始,如没出现返回-1。
(8)lastIndexOf(String target) :查找target 在字符串中最后一次出现的位置,如没出现返回-1。
(9)charAt(int a):返回字符串a 位置的字符,如果越界的话报java.lang.StringIndexOutOfBoundsException 异常。
(10)replace(String a, String b):把字符串中的a 替换为b。
(11)rplit(String a):把字符串按照其中出现的字符a 拆分为一个数组。
5、StringBuffer类
我们用两个例子对比一下说明他的用法及优越性
代码1:
String msg = “犀利哥与”;
if(凤姐在)
msg +=”凤姐”;
if(芙蓉姐姐在)
msg +=”芙蓉姐姐”;
msg += “去春游”;
System.out.println(msg);
如果凤姐和芙蓉姐姐都在的话,内存变化为:
那么35DF 到37DF的空间不就浪费了嘛!
代码2:
StringBuffer msg = new StringBuffer(“犀
if(凤姐在)
msg.append(”凤姐”);
if(芙蓉姐姐在)
msg.append(”芙蓉姐姐”);
msg.append(“去春游”);
System.out.println(msg);
上面当创建StringBuffer 对象时系统默认分配一定长度的内存,使用append 方法往其中放入字符串,如果放入的字符串超出内存的范围,那么它会自动在其后追加一倍长度的内存,这样前面的内存就可以继续使用,没有浪费。最后使用toString()方法转化为字符串。