在JDK安装目录下可以找到java.lang包下的所有源码;JAVA工程默认加入了此包。
下图展示lang包下的内容。
以下是百度百科的描述:
提供利用 Java 编程语言进行程序设计的基础类。最重要的类是 Object(它是类层次结构的根)和 Class(它的实例表示正在运行的应用程序中的类)。
把基本类型的值当成一个对象来表示通常很有必要。包装器类 Boolean、Character、Integer、Long、Float 和 Double 就是用于这个目的。例如,一个 Double 类型的对象包含了一个类型为 double 的字段,这表示如果引用某个值,则可以将该值存储在引用类型的变量中。这些类还提供了大量用于转换基值的方法,并支持一些标准方法,比如 equals 和 hashCode。Void 类是一个非实例化的类,它保持一个对表示基本类型 void 的 Class 对象的引用。
类 Math 提供了常用的数学函数,比如正弦、余弦和平方根。类似地,类 String 和 StringBuffer 提供了常用的字符串操作。
类 ClassLoader、Process、Runtime、SecurityManager 和 System 提供了管理类的动态加载、外部进程创建、主机环境查询(比如时间)和安全策略实施等“系统操作”。
类 Throwable 包含了可能由 throw 语句抛出的对象(§14.16)。Throwable 的子类表示错误和异常。
接下来重点记录三个内容:包装类与基本数据类型;String;Math。
- 包装类与基本数据类型
以前一直搞不清 int与Integer,float与Float,double与Double这些有什么关系,如果二者功能一样,那为什么要做两套呢?
经过老师的讲解才知道,int是基本数据类型,而Integer是包装类,之所以要这么做是因为我们在进行网络传输时,网路中只能传递字符/字符串,而不能直接传输一个对象或者其他数据类型,如果我们需要传输除了字符串外的类型,需要先将其转成字符串,到达目的地以后,再把字符串还原为原来那个类型。
举例,如果我们要传输int=10:
int i=10;
//int转string
String x=Integer.toString(i);
//string转int
int j=Integer.parseInt(x);
其他转换:
//float转string
float f=1.9f;
String fs=Float.toString(f);
//string转float
float s=Float.parseFloat(fs);
//基本数据转包装类
int k=1;
Integer integer=new Integer(k);
//包装类转基本数据
int yy=integer.intValue();
//string转包装类
String cc="90";
//在API文档找返回值和参数对应的方法
Integer integer2=Integer.getInteger(cc);
2. String类
相对于Integer等其他包装类,String比较特殊;
public class StringTest {
/**
1. ==比较的是栈中的值是否相等,多用于基本数据类型的比较
2. 如果是用在两个对象之间,那么比较的就是这两个对象的地址,即是不是同一个对象
3. 而我们比较对象时 希望比较对象中的内容,采用方法是equals
4. @param args
*/
public static void main(String[] args) {
//String独有的特色
String s1="abd";
String s2="abd";
//s1 和 s2内容相同,为了节省空间,在已经有s1之后,s2会指向s1的那个空间,
//他们两内容一样,所以共享一个内存空间
//使用String时不要new,因为new无论在任何情况下都会新开辟一块内存
System.out.println(s1.equals(s2));
//当其中一个内容修改了,才会另外开辟一块来放
s2="abdc";
System.out.println(s1);
//这种做法要不得,因为每循环一次,jvm就会新开一块内存来放置叠加结果,
//所以会造成内存极大浪费
for(int i = 0;i<1000;i++)
{
s1=s1+"h";
}
//正确做法:stringBuffer在堆中,有不变性
//所以拼接操作采用这种方式
StringBuffer stringBuffer=new StringBuffer(s1);
for(int i = 0;i<1000;i++)
{
stringBuffer.append("h");
}
//字符串长度
System.out.println(s1.length());
//比较两个字符串是否相等,默认区分大小写
System.out.println(s1.equals(s2));
//忽略区分大小写:比如验证码
System.out.println(s1.equalsIgnoreCase(s2));
//根据索引取值
System.out.println(s1.charAt(2));
//取出字符第一次出现的位置,如果找不到则返回-1
System.out.println(s1.indexOf("a"));
//截取字符串中一部分:包含0但不包含1 半开半闭区间
System.out.println(s1.substring(0, 1));
3. Math
这个用到的时候可以去查API文档,但是要注意的是,在使用Random产生a到b之间的随机数时,只包a不包b,也就是说这是一个做闭右开区间。