HI,你好, 下面我们一起来学习JAVA语言的基础类。
JAVA语言里面呢,给我们提供的JDK里面呢有
大量的这种API,也就是编程结构,那这些类呢,
实际上它涉及到多个方面,包括我们这里看到的
就是JAVA里面最基本的,比如说 语言的,然后工具的,等等,然后当然到上面呢有一些
编程的,这个应用程序图形化的界面,等等。
所以呢,也就是这些大量的类,当然我们不可能把所有的类呢 都把它记住,所以呢,这里面我们要
学习和掌握里面就是最基本的,也就是我们一般的编程任务里面
最常用的一些类。这些类呢包括
比如说JAVA.LANG,Language这个包里头呢它是JAVA语言的核心类,
那这里面JAVA是自动的导入
JAVA.LANG.*的。另外一个呢是JAVA.UTIL,
就是实用工具类。utility。还有JAVA.IO呢就是标准输入输出,
输入输出的这些相关的input output,还有呢就是AWT和SWING,
这是图形用户界面的相关的类,那这个我们以前遇到过。
还有JAVA.NET是网络功能相关的类,
然后JAVA.SQL呢这个包里头呢是数据库访问的类。
那当然还有其他一些类,这我们提到的这些类呢, 这些包里头的这些类是我们后面呢这几章要学的
那通过这些类的学习呢我们就可以把JAVA里面常见的编程任务的这些类呢
都把它掌握了。当然,这些类太多了,
所以我们也不可能把所有的类都记住,所以这里面呢我们可以
查看JAVA的API文档,JAVA的API文档呢
它也是可以一个是通过在线的查询,也就是在网上,这里我们列了一个JAVA8的地址,
也可以呢下载相应的这个文档在本地来查看,
下载的过程当中呢我这里列了一个就是 我们现有的这样一个网址,
当然后面的网址可能会发生变化,不过你都可以从ORACLE的网站搜索到。
还有其他的一些文档。那网站呢也有人把这个
文档呢做成CHM的格式,也有中文版。也可以下载。
除了看文档以外呢我们更常做的一个任务呢就是看
JDK的源码。就JAVA的这些源代码呢
它是开放的,所以我们安装了JDK以后呢就自动的有一个文件叫
SRC.ZIP,啊SRC.ZIP,那么一般是在安装目录下面,啊,
安装的这个JDK的目录下面有一个SRC.ZIP,然后你就可以把它呢打开,
就是我们用的,JAVA的这些源码呢都在这里面。
通过源码来学习呢也是我们学习JAVA语言的一个很有效的一种方式。
总的说来呢我们要经常看那个API文档,
经常呢看这个源码,下面我们就来说说JAVA.LANG.OBJECT的这个类。
这里面这个类是所有类的直接的或者间接的父类。
那么这样一个好处呢就是让所有的这些
类呢都有了一致性,因为它最终呢都是继承于object。
object这个里面有几个重要的方法我们在这里面来看一下。一个是equals,
这个equals呢我们在前面提到过等等这个 判断呢与equals是有区别的,简单的说呢
是这个双等号是判断引用,两个引用是否引用到同一个地方,
所以它是引用相等,那equals呢是内容或者含义相等, 当然对于Object默认的这个equals呢这两个
是一样的,等等和equals。那equals里面就是判断它是否引用相等。
那对于一些继承的一些类呢一般我们都要从
写这个也就是覆盖equals,比如说对
integer这个类,integer这个类呢它是对整数的一个包装。
这里面呢有一个integer1,另一个呢引用的也是integer1,
那这两个用双等号这两个又不等了,因为它不是同一个引用。但是用这个equals呢
它是判断内容相等,它就true。所以呢我们一般的类呢都要从写这个equals方法。
在从写equals方法的时候呢我们一般也需要覆盖
这个hashCode方法,因为 我们后面会讲到,就是有的时候我们要用这个
来判断hashCode来判断,然后再用equals判断,所以一般这两个呢
要使它一致起来。那那个hashCode简单的说就是用
我们这一个对象然后呢生成一个整数,这个整数呢
就能够代表,或者说
由这个整数来计算出一个整数来。那由这个对象计算出一个整数来。
当然我们尽量的使相等的对象呢
那hashCode也一定相等。然后呢不相等的对象尽量让这个hashCode不相等。
啊当然我们不能严格的做到。另外呢一个getClass
这个是一个final方法也就是它不能被重载。不能够被覆盖的方法。
然后呢它返回的是这个类的表示比如说我们 这个object呢它都有一个getClass,然后
.getName得到这个类的名字,我们甚至呢用这个class
这个类newInstance创建一个实例, 对于这个class呢它是表示的是在运行时所用的这个类,
的表示。那也就是说,它是 不是这个引用所声明的这个类,而是它实际的这个对象,
运行时候所有的类。
另外一个呢是toString方法用来表示返回对象的字符串。
主要用于显示比如说print里面我们显示 一个对象,它实际上呢是把这个对象呢调用toString方法
然后显示出来。另外呢在字符串里相加, 它实际上呢这两个字符串怎么加呢实际上呢也要把这个对象呢
变成String,toString, 然后才能字符串能连接,相加。
所以一般的呢我们每个类呢都要 都要override这个toString方法,
啊,以方便呢它能显示,有一些调试啊,日志啊,等等。
所以我们这个toString这个方法经常要override。
另外finalize呢就是在对象清除。
前面我们讲过对象的清除。
另外还有呢就是任何一个对象呢它都有notify,notifyAll和wait。那- 么这个呢
是跟线程相关,以后我们讲到线程的时候还会讲到。从这个意义上来说呢
任何一个object它都有wait都有notify。所以呢
JAVA是用这个线程呢它是深入到任何一个对象里面的。
下面我们再说说呢,这个基本数据的包装类。
JAVA语言呢两种类型。一种呢是基本数据类型,一种呢是引用类型。
那么为了使它一致呢也就是我们很多时候呢都要用引用类型 那这个时候怎么办呢它就规定了一些包装类。
这些包装类呢与我们的基本类型呢是相对应的 也有8种,但是要注意这个写法。啊
都是大写字母开头的,那么有的呢比我们的那个
基本属性类型写法要长。比如说character,比如说integer,啊。
所以这是这8种基本数据类型。它实际上呢就是把我们一个整数
包装成一个引用性的整数。这个就是integer。
这个类。那这些类呢有一些特点,有一个是比如说提供了一个整数,
提供了一些常数。比如说integer.MAX_VALUE就最大的整数值。
恩,Double.NaN就是非整数以及呢正无穷等等。
第二个呢是提供了valueOf和toString, 它的目的呢就是用来字符串转成
当前的对象,或者把当前的对象呢toString()转成字符串。
另外一个什么什么Value(),比如说integer.int, intValue()呢
它就是得到所包装的值。因为呢包装的这些值呢是不可改变的
也就是说包装了以后,那么这个对象它里面的值
就没法再改变了,它没有一个方法让你去改变它里面的值。它这样做的好处呢
就是使得这个对象呢所包装的值具有稳定性、可预测性。不然这个值就任意改变了 那不行。然后还有toSting
(),equals()等方法进行了覆盖。我们刚才提到 另外还提供了一些使用的方法,比如说
Double里面点parseDouble(),我们以前学过的。parse里面一个p- arseDouble().
解析成一个double类型。然后还有 包装与拆包,那实际上在JDK1.5以上呐
它把刚才那个转换呢更简单地书写了,一个是包装 也就是把一个基本类型包装成一个引用类型
包装成引用类型,那它Java在 编译的时候,它自动把它翻译成这个引用类型等于
什么什么点valueOf(),它实际上是调valueOf()这个方法
然后呢,拆包呢是反过来,是把一个引用类型变成一个基本类型
那么它自接这么写呢,它实际上翻译成呢 这个引用类型的intValue(),
所以这里应该是小写,就翻译成这个样子 另外一个基本类呢就是数学类,
Math 类。把我们的一些数学函数,比如说 这里的sin()、cos()、sqrt()呢是square
root平方根 和random()随机数,还有log()对数,exp()呢指数
然后呢还有一些常量,比如说E啊自然对数的底,
PI也就是圆周率等等,这个类呢用起来
也比较方便。刚刚我们这些函数呢都不能同一类 所以它就把它封装到了一个Math这个类。这些方法呢
都是static的方法,所以呢 我们用起来呢是直接是math点什么什么就可以了
还有一个系统类,这个系统类呢是取得一些系统的属性
比如说我们系统当前时间等等,所以它都封装了一个系统类 其中呢一个最重要的一个方法呢就是getProperty()
就是得到一些环境的系统变量,就这个环境变量。
这个环境变量呢就是由系统给我们告诉的。
从而使我们的这个应用程序呢能跟系统的一些环境打交道。
另外,呃,用getProperties()呢可以得到所有的这一些环境变量。
那除了系统规定环境变量以外呢,我们可以在命令行 上再运行的时候呢,临时的加一些变量
那么它的写法呢就是java后面加个 -D 然后变量的名字等于变量的一个值。
然后我们在程序的时候呢,运行的时候就可以得到这个变量。
下面我们看一个例子,就是使用这个系统
的Properties系统属性。请看这个例子。
那这里面呢我们用了getProperties() 得到所有的这个Properties。这个Properties呢实际上是
名字和,这时有时候和key 它的value,它的值。所以它这里面呢名字或值
都封装到这个对象里头去了。Properties对象,那我们访问它就是 用propertyNames()得到呢是一个
枚举,相当呢是一个枚举器 然后呢我们可以用循环的hasMoreElements()
hasMoreElements(),然后呢nextElements(), 这样的话我们一次一次的得了下一个元素,下一个元素
就是每一个key,然后这个value呢得到的值呢 我们就用getProperty(),就能得到这个值。
我们运行一下这个程序。
请看这里。我们得到的这个值,就是这些
key呢,包括比如说Java虚拟机的一下特点。然后比如说这个os.name就是操- 作系统的
名字等等。然后还有比如说user.home就是我们当前的 所在的这个用户目录。
所以还有其他的一些,比如说user.name当前的用户名 以及还有java当前的class.path,当前的
class这个路径。所以这样的话我们就能够
得到环境的一些信息。当然在程序运行的时候呢,我们就可以利用它,比如说 我们知道当前用户所在路径,然后我们就可以把
我们的文件,比如说一些日志文件啊等等 就把它放到用户葫芦里面去。